ICMP协议
一、ICMP(网际控制协议)简介
1.1 ICMP协议的简介
由于IP协议不提供可靠的传输,IP协议无法为传输层提供是否丢包,丢包原因等信息。所以使用ICMP协议来提供差错报告和错误原因等功能。基于ICMP协议,ping命令可以测试目标主机是否可达,并测量往返时间。
二、ICMP的协议类型
2.1 ICMP的报文结构
字段名称 长度 描述 Type 1字节 报文类型 Code 1字节 代码 Checksum 2字节 校验和 Message Body 可变 字段的长度和内容,取决于消息的类型和代码
2.2 ICMP的类型分类
ICMP报文分为查询报文和差错报文
常见的报文类型
2.3 ICMP的封装过程
IP header的Protocol的值为1,用来封装ICMP报文
三、ICMP的协议应用
3.1 ping应用
测试两个主机之间的连通性。使用ICMP回送请求和回送应答报文,检测网络连接的状态和响应时间。
一组正常的echo request (8 0) 和 echo reply (0 0)报文如下
3.2 tracert应用
Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将 TTL 递增 1, 直到目标响应或 TTL 达到最大值,从而确定路由。TTL域每经过一个路由器转发后减1, TTL 减为 0 时,该路由器会将此数据报丢弃,并将超时回应数据报(包括数据报的源地址、内容和路由器的IP地址)发回源系统。
Windows下:源端发的是ICMP报文,echo request(8 0),中间节点和目的返回的都是TTL超时报文(11 0)。
Linux/Unix下:源端发的是UDP报文,中间节点返回的是TTL超时报文(11 0),目的端返回的是ICMP端口不可达(3 3)。
(11 0)
(3 3)
3.1 tracert工作原理
- 首先发送一个TTL为1的报文,当到达第一个路由器时TTL减1变为0,路由器就不再转发这个数据了,而直接丢弃,并且发送一个ICMP“超时”信息给源主机,并告知自己的IP地址;
- 之后再发送一个TTL为2的报文,在第二跳返回TTL超时,这个过程不断进行,直至到达目的地;
- 在目的地,由于数据报中使用了无效的端口号(缺省为33434),目的主机会返回一个ICMP目的地不可达消息,该tracert操作结束。
在上述过程中,tracert记录下每一个ICMP TTL超时消息的源地址,从而获得报文到达目的地所经过的网关的IP地址。











浙公网安备 33010602011771号