哪个网络层处理对 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().
我最近一直在学习 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().