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地址。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本