互联网控制消息协议(ICMP)详解
1. ICMPv4 相关内容
ICMPv4 在网络中起着重要的作用,用于报告网络层的错误和提供诊断信息。下面详细介绍几种常见的 ICMPv4 “目的地不可达” 代码及其处理逻辑。
1.1 常见 “目的地不可达” 代码处理
- ICMP_PORT_UNREACH(代码 3) :当接收 UDPv4 数据包时,系统会搜索匹配的 UDP 套接字。若未找到匹配的套接字,会先验证校验和的正确性。若校验和错误,数据包将被静默丢弃;若校验和正确,会更新统计信息并发送 “目的地不可达” / “端口不可达” 的 ICMP 消息。相关代码如下:
int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, int proto)
{
struct sock *sk;
...
sk = __udp4_lib_lookup_skb(skb, uh->source, uh->dest, udptable)
...
if (sk != NULL) {
...
}
/* No socket. Drop packet silently, if checksum is wrong */
if (udp_lib_checksum_complete(skb))
goto csum_error;
UDP_INC_STATS_BH(net, UDP_MIB_NOPO
超级会员免费看
订阅专栏 解锁全文
1088

被折叠的 条评论
为什么被折叠?



