目录
8.1 引言
ICMP位于网络层和传输层之间。
因为路由器缓冲区溢出的丢包不会触发任何ICMP差错报文。而由TCP等处理(重传等)。
黑客在大量攻击中使用ICMP。由于担心攻击,通常防火墙封阻ICMP报文,特别是边界路由器。此时诊断程序(ping, traceroute)无法正常工作。
ICMPv6包含:
错误报告。
邻居请求,邻居通告。
路由器请求,路由器通告。
重定向:优化路由。
报文过滤: 引入Packet Too Big报文,通知源主机包超过了链路层MTU。
8.1.1 在IPv4和IPv6中的封装
报文格式:
其中ICMPv4头:
字段介绍:
类型:指定报文类型,常用8个值。
代码:进一步指定报文类型。
校验和:IP层没有对载荷完整性保护。所以ICMP需包含校验和。
8.2 ICMP 报文
ICMP报文分类:
差错报文:用于通知发送端数据包传输中的错误情况。
查询/信息类报文:用于信息采集和配置。
8.2.1 ICMPv4 报文
差错报文:
目的不可达(类型3),重定向(类型5),超时(类型11 ),参数问题(类型12)
查询/信息类报文:
回显请求(类型8),回显应答(类型0),路由器通告(类型9),路由器请求(类型10)
其中重定向报文目的:指导主机或路由器改变路由决策,将数据发送到更优路径上。
8.2.2 ICMPv6 报文
ICMPv6不仅包含差错和查询/信息类报文,还有大量IPv6路由器和主机的配置,如RS,RA,NS,NA。
ICMPv6类型字段值:
从0到127是差错类报文,从128到255是信息类报文。
ICMPv6也使用代码字段。
ICMPv6还支持大量标准选项,而ICMPv4不支持选项。
8.2.3 处理ICMP报文
收到重定向报文:会更新路由表。
目的不可达报文:可用于路径MTU发现(PMTUD)
ICMPv6报文处理规则:
1. 收到未知ICMPv6差错报文,须传递给上层产生差错报文的进程。
2. 收到未知ICMPv6信息类报文,丢弃。
3. 发送ICMPv6差错报文时,应尽可能多地包含导致差错的原始IPv6报文,但不超过最小的IPv6 MTU ( 1280字节)
4. IPv6节点须限制发送ICMPv6差错报文速率。
IPv6网络中链路层最小MTU是1280字节。IPv4中是576字节。
8.3 ICMP差错报文
请注意8.3.1到8.3.5章节都属于ICMP差错报文。
不会用ICMP差错报文响应以下报文:
另一个ICMP差错报文。
头部损坏的数据报(例如校验和错误)。
IP层广播或组播数据。
链路层广播或组播帧数据。
无效地址(零地址、环回地址、广播地址,组播地址)
第一个之外的分片。
发送ICMP差错报文:应包含导致错误数据报的IP头副本,包括IP选项和原始IP载荷,生成的ICMP数据报大小不超过网络最小MTU。
差错报文包含原始IP包载荷作用:
使接收ICMP差错报文主机能根据IP头中协议或下一个头部将该差错报文传递到对应传输层和应用进程。
8.3.1 扩展的ICMP和多部报文
扩展的ICMP差错报文: 使ICMP差错报文包含额外信息以提供更多诊断信息。
用ICMP中代码字段指明具体原因,实现扩展功能。
后续章节详解。
8.3.2 目的不可达和数据包太大
ICMPv4目的不可达差错报文:
网络不可达: