ICMP网际控制报文协议
ICMP 的概念和作用
• IP 是一种不可靠的,无连接的数据报传输协议,提供了一种尽力而为的点到点数据传输服务,但不能保证所有数据报都可以成功地从信源到达信宿。为此人们在网络层(也称为 IP 层)引入了另外一种协议 ——* 网际控制报文协议( Internet Control Message Protocol , ICMP )来实现 IP 层数据报传输过程中的差错控制。通过 ICMP 配合 IP 的使用,提高了数据报传递的成功率。
• ICMP 是 IP 的补充,用于IP 层的差错报告、拥塞控制、路径控制以及路由器或主机信息的获取。
ICMP报文的格式
类型:用于定义ICMP报文类型。
代码:用于标识发送这个特定报文类型的原因。
校验和:用于数据传输过程的差错控制,提供ICMP整个报文的校验和。
首部其他部分:由报文类型来确定相应内容,大部分差错报告报文未使用该字段;
数据:提供了ICMP差错和状态报告信息,内容因报文类型而异。
各种报文类型的作用及具体格式
差错报告
信宿不可达报告-3
-
作用: 当一台路由器或主机无法将数据包传递到目标地址时,会生成信宿不可达报告,通知源站数据包无法被送达。
-
具体格式: 信宿不可达报告包含 ICMP 报文头和差错报告信息,报文类型为 Destination Unreachable(目标不可达)。具体格式包括 ICMP 头、差错报告类型码和其他相关信息。
数据报超时报告-11
-
作用: 当数据包在传输过程中超时(Time-to-Live 到达零),路由器会生成数据报超时报告,通知源站数据包未能在合理的时间内到达目标。
-
具体格式: 数据报超时报告同样包含 ICMP 报文头和差错报告信息,报文类型为 Time Exceeded(超时)。其格式也包括 ICMP 头、差错报告类型码和其他相关信息。
ICMP 超时报文的基本格式如下:
8 16 32
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Unused | Next Hop MTU |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type (8 bits): 指定 ICMP 报文的类型。对于 ICMP 超时报文,Type 通常为 11。
Code (8 bits): 给出了更详细的信息,指定了 ICMP 报文的子类型。对于 TTL 过期,Code 通常为 0。
Checksum (16 bits): 用于校验 ICMP 报文的完整性,计算方法与其他 ICMP 报文相同。
Unused (16 bits): 未使用字段。
Next Hop MTU (16 bits): 下一跳的最大传输单元(MTU),表示此报文引起的超时的原因。
Internet Header + 64 bits of Original Data Datagram: 超时报文中包含 IP 数据包的前 8 个字节(即 IP 头部),以及原始数据包的前 64 位数据。
数据报参数错误报告-12
-
作用: 当数据包的头部在传输过程中存在错误或不合法时,路由器会生成数据报参数错误报告,通知源站数据包的参数有误。
-
具体格式: 数据报参数错误报告同样包含 ICMP 报文头和差错报告信息,报文类型为 Parameter Problem(参数问题)。其格式包括 ICMP 头、差错报告类型码、指示出错字节的指针和其他相关信息。
源站抑制报告-4
- 作用: 当一个路由器因为某些原因(比如拥塞)希望源站减缓发送数据包的速率时,会生成源站抑制报告。
- 具体格式: 源站抑制报告包含 ICMP 报文头和抑制报告信息,报文类型为 Source Quench(源站抑制)。其格式包括 ICMP 头、差错报告类型码和其他相关信息。
重定向报告-5
-
作用: 当一台路由器认为有更好的下一跳地址时,会生成重定向报告,通知源站将下一跳地址修改为更合适的地址。
-
具体格式: 重定向报告包含 ICMP 报文头和重定向报告信息,报文类型为 Redirect(重定向)。其格式包括 ICMP 头、重定向报告类型码和其他相关信息。
查询报告
时间戳请求与应答报告-13/14
-
作用: 时间戳请求用于获取目标主机或路由器的当前时间,而时间戳应答用于响应时间戳请求。
-
具体格式: 时间戳请求与应答报告包含 ICMP 报文头和时间戳报告信息,报文类型分别为 Timestamp Request 和 Timestamp Reply。其格式包括 ICMP 头、标识符、序列号、原始时间戳和接收到的时间戳。
回应请求与应答报文-8/0
-
作用: 回应请求用于测试目标主机或路由器是否能够正常响应,回应应答用于确认目标主机或路由器的可达性。
-
具体格式: 回应请求与应答报文包含 ICMP 报文头和 Echo 报告信息,报文类型分别为 Echo Request 和 Echo Reply。其格式包括 ICMP 头、标识符、序列号和回应数据。
地址掩码与应答报告-17/18
-
作用: 地址掩码请求用于获取目标主机的子网掩码信息,而地址掩码应答用于响应地址掩码请求。
-
具体格式: 地址掩码与应答报告包含 ICMP 报文头和地址掩码报告信息,报文类型分别为 Address Mask Request 和 Address Mask Reply。其格式包括 ICMP 头、标识符、序列号和子网掩码。
路由器询问与通告报告
-
作用: 路由器询问用于询问目标主机是否是一个路由器,而路由器通告用于通知网络中的其他主机自己是一个路由器。
-
具体格式: 路由器询问与通告报告包含 ICMP 报文头和路由器通告报告信息,报文类型分别为 Router Solicitation 和 Router Advertisement。其格式包括 ICMP 头、标识符、选项字段和其他相关信息。
-
路由器询问报告报文格式
-
路由器通告报告报文格式
ICMP报文的封装过程
ICMP虽然是IP层的协议,但其报文是以IP数据报形式进行传递的,即ICMP报文本身被封装在IP数据报的数据区中。包含ICMP报文的IP数据报首部的协议类型字段被设置为1。