哪个 Linux 进程负责响应 ping?

Izz*_*zzo 41 ping icmp network-interface

我有一个基于 Linux 的进程控制器,它偶尔会锁定到无法 ping 的程度(即我可以 ping 它,然后如果不对网络设置进行任何修改,它就不再可 ping 通)。

我很好奇,什么进程/系统负责实际响应 ping?看来这个过程正在崩溃。

Pat*_*zek 58

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

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

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

  • @Nacht:这与基本的计算机体系结构无关;这是一个实现选择。微内核将在操作系统进程中处理 ICMP。 (5认同)
  • @Outurnate 任何其他应用程序服务测试都将失败或超时,因此观察到的最终结果将相同。我从来没有错过任何一次反对使用“ping”的机会,因为这会在故障排除中产生太多的误报,所以我认为用户不知道 ping 的确切作用以及它如何产生误导性结果,应该坚持使用其他方法。 (4认同)
  • 在大多数过载情况下,唯一仍然响应的事情是内核所做的事情。这意味着机器通常会响应 ping,而不管它的过载程度如何。尝试到达关闭的端口将使用 TCP 的 RST 和 UDP 的 ICMP 错误进行响应。到达开放 TCP 端口的前几次尝试将完成握手。磁盘故障可能导致几乎相同的症状。 (3认同)
  • @Nacht 是的。网络接口是硬件设备;因此,有一个内核驱动程序可以与之交互。然后第二层提供通用管理/通信 API。(这不是网络独有的:音频开发者有 ALSA,视频输出使用 KMS API,USB 有 {U,E,X}HCI,然后是 usb_storage、usbhid 等)网络路由表、防火墙规则(通过 iptables )、握手、数据包组装、重传等都在内核中。由于 ICMP 本身就是一个协议,没有有效载荷,也没有“响应或不响应”之外的处理,内核直接处理 ICMP 响应以减少开销。 (2认同)

Out*_*ate 12

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


Mat*_*lis 11

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

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

  • 目标主机(或您和目标主机之间的任何路由器/防火墙)上的防火墙设置可能会限制 ping 数量(或流量流量)。这也可能是由于诸如fail2ban(8)按需防火墙之类的工具。看到iptables(8)检查。

  • 目标主机出现软件/硬件故障。目标主机上的网络内核模块可能出现 OOPS 和/或混淆,甚至整个内核都可能出现 PANICked。您将dmesg(8)在目标主机上看到有关 at in 的消息,或作为物理控制台上的屏幕输出(如果物理访问不切实际,另一台带有串行控制台的机器可以提供帮助。)如果内核 OOPS/PANIC 是问题,则具有更好驱动程序的新内核可能帮助,或者您可以watchdog(8)与辅助驱动程序一起解决系统锁定问题。或者您可以更换硬件部件。

  • 有兴趣的,[这里是相关的内核代码](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/ipv4/icmp.c?id= 24cac7009cb1b211f1c793ecb6a462c03dc35818#n918) 用于处理 ICMP 回声请求。 (4认同)