什么网络层处理响应ping?

时间:2015-01-31 08:36:15

标签: networking ping icmp

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

我的问题是,当服务器响应该回复回复消息时,实际上是在做什么?是操作系统吗?这是一个特定的应用程序?或者它完全是另一回事?

2 个答案:

答案 0 :(得分:1)

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

ICMP模块定义了一个关于如何处理各种ICMP请求的数组表,其对象为icmp_objects,名为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服务器发送一个echo请求时,消息类型将icmp_echo沸腾到子程序调用{​​{3}},它通过发送来处理echo(ping)请求(ICMP_ECHO) echo回复(ICMP_ECHOREPLY) icmp_echo()

答案 1 :(得分:-1)

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