ICMP协议

一、ICMP(网际控制协议)简介

1.1 ICMP协议的简介#

由于IP协议不提供可靠的传输,IP协议无法为传输层提供是否丢包,丢包原因等信息。所以使用ICMP协议来提供差错报告和错误原因等功能。基于ICMP协议,ping命令可以测试目标主机是否可达,并测量往返时间。

二、ICMP的协议类型

2.1 ICMP的报文结构#

image-20250217010852475

字段名称 长度 描述
Type 1字节 报文类型
Code 1字节 代码
Checksum 2字节 校验和
Message Body 可变 字段的长度和内容,取决于消息的类型和代码

2.2 ICMP的类型分类#

ICMP报文分为查询报文差错报文

常见的报文类型

img

img

2.3 ICMP的封装过程#

image-20250217011728841

image-20250217013139351

IP header的Protocol的值为1,用来封装ICMP报文

三、ICMP的协议应用

3.1 ping应用#

测试两个主机之间的连通性。使用ICMP回送请求和回送应答报文,检测网络连接的状态和响应时间。

一组正常的echo request (8 0) 和 echo reply (0 0)报文如下

image-20250217024512492

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)

image-20250217023238674

(3 3)

image-20250217023315382

3.1 tracert工作原理#

  1. 首先发送一个TTL为1的报文,当到达第一个路由器时TTL减1变为0,路由器就不再转发这个数据了,而直接丢弃,并且发送一个ICMP“超时”信息给源主机,并告知自己的IP地址;
  2. 之后再发送一个TTL为2的报文,在第二跳返回TTL超时,这个过程不断进行,直至到达目的地;
  3. 在目的地,由于数据报中使用了无效的端口号(缺省为33434),目的主机会返回一个ICMP目的地不可达消息,该tracert操作结束。

image-20250217022939832

在上述过程中,tracert记录下每一个ICMP TTL超时消息的源地址,从而获得报文到达目的地所经过的网关的IP地址。

image-20250217023010145

posted @   江寒雨  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示
主题色彩