什么Linux进程负责响应ping?


39

我有一个基于Linux的过程控制器,有时会锁定到无法ping的程度(即,我可以ping起来,然后在不对网络设置进行任何修改的情况下,它就不再可以ping通)。

我很好奇,哪个进程/系统负责实际响应ping?看来此过程已崩溃。


您仍然可以在不响应ping的情况下使用它吗?还是现有的SSH会话会锁定?
彼得·科德斯

@PeterCordes整个系统锁定,并且在强制重新启动之前实际上是一个砖块。
伊佐

3
好的,那通常是机器停止响应ping的唯一方法。如果ping命令停止工作,但其他东西仍在工作,那将很奇怪,因为即使用户空间被占用,并且磁盘I / O上的所有内容都被阻塞到死磁盘或NFS挂载或其他操作上,ping处理仍然有效。尝试将显示器连接到系统,然后查看锁定时是否有控制台消息。(如果你可以使用魔术SysRq的键盘序列转储信息或重新挂载只读,力同步磁盘+重启。
彼得·柯德斯

2
尽管您的问题很有趣,但ping并不是系统问题的根源,而是系统不稳定的结果。检查日志以了解问题所在。
Pedro Lobito '18

@PedroLobito具体记录什么?
伊佐

Answers:


56

内核网络堆栈正在处理ICMP消息,这些消息是ping命令发送的。

如果您没有得到答复,除了网络问题或过滤,以及基于主机的过滤/速率限制/黑洞/等等。这意味着机器可能因某些东西而过载,这可能是暂时的,或者是内核崩溃,这种情况很少见,但可能会发生(硬件故障等),不一定是由于ICMP流量造成的(而是试图用这种流量来使其过载)可以在服务器生命周期初期进行一次很好的测试,以了解它如何维持事物运行。在以后发生内核崩溃的情况下,您应该在日志文件或控制台中具有足够的信息。

还要注意,ping检查服务是否在线几乎总是错误的工具。出于各种原因,但主要是因为根据定义,它没有模拟实际的应用程序流量。例如,如果您需要检查Web服务器是否仍处于活动状态,则应该对它进行HTTP查询(TCP端口80或443),如果需要检查邮件服务器,则进行SMTP查询(TCP端口25),如果DNS服务器,UDP TCP查询到端口53等。


4
@Outurnate任何其他应用程序服务测试都将失败或处于超时状态,因此观察到的最终结果将相同。我绝不会错过任何机会来反对使用pingping,因为这会在故障排除中造成太多误报,因此我认为不完全了解ping的功能以及如何提供误导性结果的用户应该坚持使用其他方法。
Patrick Mevzek '18年

2
在大多数过载情况下,唯一仍然可以响应的是内核完成的操作。这意味着一台机器通常将对ping做出响应,而不管其过载程度如何。尝试到达封闭的端口将以RST响应TCP,如果是UDP,则ICMP错误。而到达开放TCP端口的前几次尝试将完成一次握手。磁盘故障可能导致几乎相同的症状。
kasperd

@kasperd我已经看到(非常)过载的服务器(特别是交换服务器)也没有回复ICMP请求。当然也没有别的。内核没有崩溃,只是磁盘I / O内容繁忙。
帕特里克·梅夫克

2
@纳赫特 网络接口是硬件设备。因此,有一个内核驱动程序可以与其连接。然后,第二层提供通用的管理/通信API。(这不是网络独有的功能:有用于音频开发人员的ALSA,用于KMS API的视频输出,USB具有{U,E,X} HCI,然后是usb_storage,usbhid等)网络路由表,防火墙规则(通过iptables) ),握手,数据包组装,重传等都在内核中。由于ICMP本身就是一种协议,没有有效载荷,也没有“响应或不响应”以外的处理,因此内核可以直接处理ICMP响应,从而将开销降至最低。
FeRD

5
@Nacht:这与基本的计算机体系结构无关;这是一种实现选择。微内核将在OS进程中处理ICMP。
MSalters

11

没有用户域过程负责响应ping。Ping只是发送ICMP回显数据包的实用程序。这些由内核的网络堆栈接收并处理


9

内核本身(不是任何用户进程)负责发送ICMP回显应答消息,以响应ICMP回显请求消息。因此,如果主机停止响应ping,通常是由于以下某些原因:

  • 您与被ping通的主机之间的网络连接可能已断开。可能是由于多种原因本身:电缆的物理损坏,无线情况下的噪声,路由表损坏,您受到DDoS攻击,路由器之间的路由器/交换机有问题等。在这种情况下,您可以通过以下方式开始进行故障排除:使用ethtool(8)iwconfig(8)route(8)ping(8)它的路由器,tcpdump(8)目标主机上等等。

  • 目标主机(或您与目标主机之间的任何路由器/防火墙)上的防火墙设置可能会限制ping(或流量)的数量。这也可能是由于fail2ban(8)按需对防火墙进行了填充等工具所致。参见iptables(8)检查。

  • 目标主机上存在软件/硬件故障。目标主机上的网络内核模块可能已设置为OOPS和/或变得混乱,甚至整个内核都可能已被PANICked。您将dmesg(8)在目标主机上的或在物理控制台上的屏幕输出上看到有关的消息(如果无法进行物理访问,则另一台具有串行控制台的计算机可以提供帮助。)如果问题出在OOPS / PANIC内核上,则可能会有更新的内核以及更好的驱动程序帮助,或者您可以通过watchdog(8)和辅助驱动程序来了解系统锁定。或者,您可以更改硬件部件。


2
对于感兴趣的人,这里是用于处理ICMP回显请求的相关内核代码
Ruslan '18

您还应该提到非常高的负载(特别是cpu)
Guilherme Bernal '18

@GuilhermeBernal不,即使CPU用户负载过高(以千为单位)也不会导致ICMP丢失(因为它是在用户进程获得运行机会之前在内核中提供的)。极高的网络PPS速率与低端硬件结合使用可能会导致数据包丢失,但此类DDoS属于“网络连接”类别
Matija Nalis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.