问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ICMP协议详解及尝试用ping和tracert捕抓ICMP报文

创作时间:
作者:
@小白创作中心

ICMP协议详解及尝试用ping和tracert捕抓ICMP报文

引用
CSDN
1.
https://blog.csdn.net/ZZZCY2003/article/details/139606374

一、ICMP协议

1.1、定义

ICMP(Internet Control Message Protocol,互联网控制消息协议)是一个支持IP层数据完整性的协议,主要用于在IP主机、路由器之间传递控制消息。这些控制消息用于报告IP数据报在传输过程中的错误,或者用于诊断网络问题。

1.2、作用

  1. 错误报告:当IP数据报在传输过程中发生错误时(如目标不可达、超时、参数问题等),ICMP会发送一个错误报告给发送方。这有助于发送方了解问题所在,并采取相应的措施。
  2. 诊断工具:ICMP提供了一些诊断工具,如ping命令和traceroute命令。ping命令通过发送ICMP回显请求报文并等待回显应答报文来测试两台主机之间的连通性。traceroute命令则通过发送具有递增TTL(Time To Live)值的IP数据报来跟踪数据包从源主机到目标主机所经过的路由。

1.3、类型

ICMP报文主要分为两大类:ICMP差错报文和ICMP查询报文。根据ICMP报文中的字段类型和编码字段值的不同,将ICMP报文细分许多不同的类型。如下图:

常见类型:

  • 终点不可达报文(类型3):IP数据报无法到达目的地时,路由器或主机向源主机发送终点不可达报文。
  • 源站抑制报文(类型4):当路由器由于拥塞而丢弃IP数据报时,就发送源站抑制报文,通知源主机降低数据发送速率。
  • 重定向报文(类型5):当有到达目的网络更好的路由时,路由器通过发送重定向报文通知源主机。
  • 超时报文(类型 11):当IP数据报的TTL值减为0时,路由器会向主机发送超时报文;当分片丢失造成主机无法完成IP数据报的重组时,主机会向源主机发送超时报文。
  • 参数出错报文(类型12):当路由器发现IP数据报首部的参数有问题,无法完成对数据报的处理时,就向源主机发送参数出错报文。
  • 回声请求(类型8)和回声应答(类型0)报文:这两个报文成对出现,用来验证两台主机之间的可达性。
  • 时间戳请求(类型13)和时间戳应答(类型14)报文:它们用来向一个主机查询当前的时间。
  • 地址掩码请求(类型17)和地址掩码应答(类型18)报文:它们用来帮助一个主机获得子网掩码。

1.4、报文格式

ICMP协议的报文格式很简单,只有几个字段.

  1. 类型(Type)
  • 占8位,用于指示ICMP报文的类型。
  • 例如,类型8代表Echo Request(回声请求),用于测试网络中的数据包是否能够正确传输;类型0代表Echo Reply(回声应答),是Echo Request的响应。
  1. 代码(Code)
  • 占8位,为ICMP消息类型提供额外的细分信息。
  • 例如,当Type字段为“Destination Unreachable”(目标不可达)时,Code字段可以进一步指示具体的原因,如网络不可达、主机不可达等。
  1. 校验和(Checksum)
  • 占16位,用于检测报文中的错误。
  • 校验和字段对整个ICMP报文进行校验,以确保报文在传输过程中没有被损坏。
  1. 其他字段
  • 根据不同类型的ICMP报文,可能会包含其他字段。
  • 例如,Echo Request和Echo Reply报文包含标识符(Identifier)和序列号(Sequence Number)字段,用于匹配请求和应答。

二、ping测试并分析

2.1、实验步骤

2.1.1、步骤一

打开wiresahrk抓包工具,选择WLAN接口并开始抓包

2.1.2、步骤二

win+R调出命令行界面,并输入ping baidu.com(我这里是ping百度,你可以ping其他网站)

2.1.3、步骤三

返回wireshark工具,停止抓包并以ICMP为筛选字段

2.2、报文分析

第一个报文的序列号为256的某一个倍数,以后的每个报文的序列号在这个基础上增加256。

标识符和序列号

ping回声请求报文

ping回声应答报文

总结

Ping测试是一种网络诊断工具,它利用ICMP协议来检测网络连通性。Ping命令会向目标主机发送一个ICMP Echo请求报文,然后等待目标主机的响应。如果目标主机可以接收到这个请求并回复,那么就可以认为目标主机与源主机之间存在一条可达的网络路径。

1)测试网络的连通性:通过向目标主机发送小数据包,Ping可以判断网络是否连通。如果目标主机能够接收并响应Ping请求,那么网络连接就是正常的;反之,如果无法收到响应,就说明网络存在问题,需要进一步诊断和排除。

2)测试网络延迟:Ping工具会记录从发送数据包到接收响应的时间,根据这个时间可以衡量网络的延迟情况。延迟越低,网络的响应速度就越快。对于实时性要求高的应用,如在线游戏和视频会议,低延迟是非常重要的。

3)排除网络故障:当网络出现故障时,Ping可以帮助系统管理员进行故障诊断和排除。通过比较电脑和目标主机之间的Ping延迟,可以判断网络中存在的问题,如网络阻塞、丢包等。这样可以快速确定故障点,并采取相应的措施来修复网络故障。

4)确定TCP/IP参数设置:Ping测试可以验证TCP/IP参数是否设置正确,以及网络是否正常运行。通过发送ICMP回显数据包并侦听回显回复数据包,可以验证与一台或多台远程计算机的连接。

5)测试网络带宽:虽然Ping本身并不直接测试网络带宽,但通过向目标计算机发送大量数据包,可以间接地评估网络的带宽。如果发送的数据包数量足够大,网络带宽就会被占用,从而限制其他网络活动。

三、tracert测试并分析

3.1、实验步骤

与ping步骤操作相同,将ping baidu.com 改为tracert 39.156.66.10(这个ip地址为ping百度时的百度地址)

3.2、报文分析

序列号和生存周期

请求和应答报文

总结

Tracert测试和ping 一样,都是一种网络诊断工具,主要用于测试数据包从发送方到目的地的路径,并显示消息在转发时所经过的路由器和网络节点。Tracert基于ICMP(Internet控制消息协议)实现,其工作原理:

1、首先,Tracert会向目标主机发送一个ICMP回显请求数据包,该数据包包含一个时间戳。

2、当数据包到达第一个路由器时,该路由器会将数据包的时间戳记录下来,并将数据包向下一个节点转发。

3、下一个节点收到数据包后,同样会记录时间戳并继续向目标主机转发。

4、此过程会一直持续下去,直到数据包最终到达目标主机。

5、当目标主机收到数据包后,它会发送一个ICMP回显应答数据包回源主机。

6、源主机收到应答数据包后,Tracert会显示每个路由器/节点的IP地址和数据包往返时长(即延迟)。

通过分析显示的路由器IP和延迟信息,可以确定从源主机到目标主机的网络路径及每个节点的性能。同时,Tracert还提供了一些命令行参数,如设置最大跳数、使用特定的数据包大小等,可以更有效地诊断网络问题。

四、IP数据报分片

4.1、概述

IP数据报是TCP/IP协议族中用于在因特网上传输的数据包,是互联网协议(IP)的核心组成部分。它基于无连接的服务模式,屏蔽了下层各种物理子网的差异,向上层提供统一格式的IP数据报。IP数据报采用数据报分组传输的方式,提供的服务是无连接、不可靠的,即不保证数据报能成功到达目的地,任何可靠性必须由上层(例如TCP)提供。

4.2、分片

当要传输的IP报文的大小超过目标网络的最大传输单元(MTU)时,就需要进行IP分片。MTU是指数据链路层所能传输的最大数据单元,不同网络环境的MTU可能不同。例如,在以太网环境中,MTU通常为1500字节。如果要传输的数据帧大小超过1500字节,即IP数据报负载长度大于1472字节(1500字节减去IP头部和UDP头部的大小),就需要进行分片。

4.3、分片原理

IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也可能对IP数据报进行再次分片。因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。

在IP数据报的首部,有特定的字段用于标识和处理分片。其中,16位的标识字段用于唯一记录一个IP包的ID,具有相同ID的IP分片将被重新组装。13位的片偏移字段记录了某IP片相对整个包的位置。3位的标志字段用于表示该分片后面是否还有新的分片,以及是否禁止分片。

4.4、注意事项

  1. 尽可能少分片:过多的分片会增加传输过程中的复杂性和错误率。
  2. 一个最大分片可封装的数据字节数最好是8的倍数:这有助于提高传输效率。
  3. 避免IP分片:在网络编程中,应尽量避免IP分片,因为IP层没有超时重传机制。如果一个分片丢失,将依赖于传输层进行重传,导致所有分片都需要重传,降低传输效率。

4.5、实验步骤

在正式开始前,我们会使用ping来完成数据报分片的实验,可以先查看ping的使用方法。使用win+R调出命令行界面,输入以下命令:

ping /?

可以查看ping的具体使用方法,如下图:

4.5.1、步骤一

打开wireshark抓包工具,进行抓包。

4.5.2、步骤二

win+R调出命令行界面,在命令行界面上输入以下命令:

ipconfig

查看自身网络的网关

4.5.3、步骤三

将步骤二得到的网关地址进行ping操作,输入以下命令:

ping 10.225.64.1 -l 6000 -n 1

其中:
-l 6000:这个参数实际上是用于指定 ICMP echo 请求数据包的大小。
-n 1:这个参数指定了发送的 ICMP echo 请求数据包的次数。

4.6、报文分析

将6000字节分成4个数据包

回声请求报文

回声应答报文

:内容仅为个人意见,有什么不妥或错误的地方,欢迎指出!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号