图片和文字无关
ICMP的主要功能包括查询报文和错误报文。 ICMP 消息通常由 IP 层或更高层协议(TCP 或 UDP)使用。 某些 ICMP 消息将错误消息返回给用户进程。
通过IP报文传输的ICMP报文主要用于涉及网络操作或错误操作的不可达报文。 ICMP 数据包发送是不可靠的,因此主机不能依靠接收 ICMP 数据包来解决任何网络问题。
1、ICMP主要功能详细说明:
1) 发现网络错误。 例如,某台主机或整个网络由于某种故障而无法访问。
2) 通知网络拥塞。 当路由器缓存太多数据包并且无法以接收数据包的速度传输它们时,将生成 ICMP End of 消息。
对于发送方来说,该信息会导致传输速度降低。 当然,产生越多的ICMP源端报文也会造成更多的网络拥塞,所以应该保守使用。
3)协助排除故障。 ICMP 支持回显功能,该功能在两台主机之间的往返路径上发送数据包。 Ping是基于此特性的通用网络管理工具,它会传输一系列数据包,测量平均往返次数并计算丢失百分比。
4) 通知超时。 如果 IP 数据包的 TTL 降至零,路由器将丢弃该数据包,并生成 ICMP 数据包来通告这一事实。
是一个可以通过发送小TTL值的数据包并监控ICMP超时通告来揭示网络路由的工具。
ICMP 消息在 IP 数据报内传输。
2. ICMP报文
所有消息的前 4 个字节相同,但其余字节不同。
类型字段可以有15个不同的值来描述特定类型的ICMP消息。 一些 ICMP 消息还使用代码字段的值来进一步描述不同的情况。
校验和字段覆盖整个 ICMP 消息。 使用的算法与IP头校验和算法相同。 需要 ICMP 校验和。
3. 消息类型
各种类型的ICMP报文如下图所示。 不同的类型由消息中的类型字段和代码字段决定。
图中最后两列表示ICMP报文是查询报文还是错误报文。
当发送 ICMP 错误消息时,该消息始终包含 IP 标头和生成 ICMP 错误消息的 IP 数据报的前 8 个字节。
这样,接收到ICMP错误消息的模块会将其与特定的协议(根据IP数据报头中的协议字段确定)和用户进程(根据IP的前8个字节中包含的TCP)关联起来。数据报)。 或者通过UDP消息头中的TCP或UDP端口号来确定)。
以下情况不会导致生成ICMP错误消息:
1)ICMP错误消息(ICMP查询消息可能会生成ICMP错误消息)
2)目的地址为广播地址或多播地址的IP数据报
3)数据报作为链路层广播
4)不是第一块IP分片
5) 源地址不是单个主机的数据报。
这些规则是为了防止因响应广播数据包的 ICMP 错误消息而引起的广播风暴。
4. ICMP地址掩码请求和响应
无盘系统使用 ICMP 地址掩码请求在引导过程中获取自己的子网掩码。 系统广播其ICMP请求消息(此过程类似于无盘系统在引导过程中使用RARP来获取IP地址)。
无盘系统获取子网掩码的另一种方法是BOOTP协议。
ICMP地址掩码请求和响应报文格式:
ICMP 消息中的标识符和序列号字段由发送方选择性设置,这些值将在响应中返回。 这样,发送者就可以将响应与请求进行匹配。
ICMP地址掩码请求报文中32位子网掩码段为空。 由接收端填写并以响应消息的形式发送回源。
5. ICMP端口不可达错误
ICMP不可达报文的一般格式:
UDP可用于查看ICMP端口不可达消息(3, 3):
UDP 的规则之一是,如果收到 UDP 数据报并且目标端口与正在使用的进程不匹配,则 UDP 将返回 ICMP 不可达消息。
ICMP 的一条规则是:ICMP 错误消息必须包括生成错误消息的数据报 IP 标头(包括任何选项),并且还必须至少包括标头后面的前 8 个字节。
这8个字节包含TCP或UDP的源端口号和目的端口号,可以将ICMP错误消息与应用程序联系起来。
导致错误的数据报中的IP头之所以被错误消息发回,是因为IP头中包含协议字段,它可以让ICMP知道如何解释后面的8个字节。
ICMP共有16种不同类型的ICMP不可达报文,代码范围为0~15。ICMP端口不可达错误代码为3。
ICMP 不可达消息中的第二个 32 位字必须为 0。
但当代码为4时,路径MTU发现机制允许路由器在这个32位字的低16位中填写出接口的MTU。
注:ICMP时间戳请求和响应报文在实际应用中已被NDP协议替代,因此省略,不再赘述。