我最近一直在学习TCP和UDP,我知道ping
使用ICMP,所以我也试图理解它。我的理解是,当运行命令ping google.com
时,您的计算机会通过IP向Google发送回应请求ICMP数据包,然后谷歌会以回复回复消息进行响应。
我的问题是,当服务器响应该回复回复消息时,实际上是在做什么?是操作系统吗?这是一个特定的应用程序?或者它完全是另一回事?
答案 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参考模型而言,它是协议栈的网络层,通常在内核中。