哪个网络层处理对 ping 的响应?

What network layer handles responding to pings?

我最近一直在学习 TCP 和 UDP,我知道 ping 使用 ICMP,所以我也想了解它。我的理解是,当命令 ping google.com 为 运行 时,您的计算机通过 IP 向 google 发送回显请求 ICMP 数据包,然后 google 以回显回复消息响应。

我的问题是,当服务器使用回显回复消息进行响应时,实际上是什么处理了它?是操作系统吗?它是一个特定的应用程序吗?还是完全不同?

就TCP/IP参考模型而言,它是协议栈的网络层,通常在内核中。

它是响应 ICMP 请求的内核模块。 ICMPv4 模块是 net/ipv4/icmp.c

ICMP 模块定义了一个 table 数组,用于处理对象为 icmp_objects 的各种 ICMP 请求,名为 icmp_pointers,由 ICMP 消息类型索引。

ICMP 控制结构:

struct icmp_control {
  void (*handler)(struct sk_buff *skb);
  short error; /* This ICMP is classed as an error message */
};

static const struct icmp_control icmp_pointers[NR_ICMP_TYPES + 1] = {
...
  [ICMP_ECHO] = {
        .handler = icmp_echo,
  },
...
};   

从上面的结构中,当您向 google.com 服务器发送回显请求时,消息类型将 icmp_echo 归结为处理回显(ping)请求的子例程调用 icmp_echo() ( ICMP_ECHO) 通过发送回显回复 (ICMP_ECHOREPLY) icmp_reply().