ICMP(internet control message protocol)网际控制报文协议,是网络层协议
用途:向源端发送错误
网络测试或配置
是配合IP使用的,进行差错检验
注意:错的ICMP报文不会引发新的ICMP报文(ICMP自身错误)
目的是避免形成广播风暴
ICMP的两级封装:
每个ICMP被封装在IP数据报的数据部分
IP数据报本身又封装在帧的数据部分,通过物理网络传递
ICMP的差错报文:源站抑制报文、超时报文、参数错误报文、重定向报文(不丢弃数据报)
ICMP常见应用:Ping、Traceroute(记录通过的路由器的路径信息)、MTU测试
Traceroute工作流程:
从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的 UDP 用户数据报。第一个数据报 P1 的生存时间 TTL 设置为1。当 P1 到达路径上的第一个路由器 R1 时,路由器 R1 先收下它,接着把 TTL 的值减 1。由于 TTL 等于零了,R1 就把 P1 丢弃了,并向源主机发送一个 ICMP 时间超过 差错报给报文。
源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达路由器 R1 收下后把 TTL 减 1 再转发给路由器 R2。R2 收到 P2 时 TTL 为 1,但减 1 后 TTL 变为零了。R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报给报文。这样一直继续下去。当最后一个数据报刚刚到达目的主机时,数据报的 TTL 是 1。主机不转发数据报,也不把 TTL 值减 1。但因 IP 数据报中封装的是无法交付的传输层的 UDP 用户数据报,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
这样,源主机达到了自己的目的,因为这些路由器和最后目的主机发来的 ICMP 报文正好给出了源主机想知道的路由信息——到达目的主机所经过的路由器的 IP 地址,以及到达其中的每一个路由器的往返时间。