目录
[二、ICMP 差错报告报文](#二、ICMP 差错报告报文)
[1. 四类差错报告](#1. 四类差错报告)
[2. 不应发送差错报告的情况](#2. 不应发送差错报告的情况)
[三、ICMP 询问报文](#三、ICMP 询问报文)
[四、ICMP 报文格式与封装](#四、ICMP 报文格式与封装)
[五、ICMP 典型应用](#五、ICMP 典型应用)
[1. PING(分组网间探测)](#1. PING(分组网间探测))
[2. 跟踪路由(tracert)](#2. 跟踪路由(tracert))
一、核心定义
ICMP 是 TCP/IP 体系结构网际层 的重要协议,用于主机或路由器之间传递差错报告报文 和询问报文,以辅助 IP 协议更好地工作。
二、ICMP 差错报告报文
1. 四类差错报告
-
目的不可达:当路由器/主机无法交付 IP 数据报时触发,细分为目的网络、主机、协议、端口不可达等情况。
-
时间超过(超时):
-
路由器收到 TTL 减 1 后为 0 的数据报,丢弃并发送此报文。
-
终点主机未在规定时间内收到所有分片,丢弃已收分片并发送此报文。
-
-
参数问题:收到首部字段值错误的 IP 数据报时丢弃并发送此报文。
-
改变路由(重定向):路由器发现主机选的下一跳并非最优时,通知主机改用更佳路由。
2. 不应发送差错报告的情况
-
对 ICMP 差错报告报文自身出错,不发送。
-
对 IP 数据报的非首个分片出错,不发送。
-
对目的地址为 IP 广播/多播地址的数据报出错,不发送。
-
对具有特殊地址(如 [127.0.0.0](127.0.0.0)、[0.0.0.0](0.0.0.0))的数据报出错,不发送。
三、ICMP 询问报文
-
回送请求/回答 :用于测试目的站是否可达及状态,是
ping命令的核心原理。 -
时间戳请求/回答 :用于测量延迟和时钟偏差,返回从 1900 年 1 月 1 日到当前的秒数。
四、ICMP 报文格式与封装
-
格式:前 4 字节固定(类型、代码、检验和),数据部分依报文类型而定。
-
封装 :ICMP 报文作为 IP 数据报的数据载荷,封装在 IP 数据报中传输。
五、ICMP 典型应用
1. PING(分组网间探测)
-
属于应用层程序,直接使用网际层的 ICMP,不依赖传输层。
-
通过发送 ICMP 回送请求/回答报文,测试主机/路由器间的连通性。
2. 跟踪路由(tracert)
-
Windows 系统:发送 TTL 依次递增的 ICMP 回送请求报文,路由器收到 TTL 超时的报文后返回"时间超过"差错报告,从而追踪路径。
-
最终目的站收到请求后,返回 ICMP 回送回答报文。