wireshark简易抓包分析——ping指定大小包长多28Byte

wireshark简易抓包分析

测试ping时会发现一个现象:
在指定ping包长度后,实际发出的包总长=指定ping包长度+28

为什么ping -s指定大小n后,发出的包长为n+28呢?

先在不涉及分片的简单情况下抓包分析。
通过下方ping指令指定包长20Byte后,终端输出的结果显示实际发出去的包长却是48Byte(小于MTU 1500,此时ping包不会被分片)。

test@test-FTF:~$ ping 172.30.200.180 -s 20
PING 172.30.200.180 (172.30.200.180) 20(48) bytes of data.
28 bytes from 172.30.200.180: icmp_seq=1 ttl=63 time=0.253 ms
^C
--- 172.30.200.180 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 0.153/0.203/0.253/0.050 ms

先看下ip协议定义的包头:
在这里插入图片描述

固定ip头为20Byte(除去可选字段的可变部分),片偏移值的单位为8字节(此值为n,代表着此包数据部分偏移量是8n Byte),整个ip头的长度按照4字节对齐。

icmp协议定义的头部如下,前4Byte固定头部,一般认为icmp request、reply等常见的报文类型头部8Byte(有4Byte的可变部分记录序列号+标识符):
在这里插入图片描述
下图为实际wireshark抓包,可以看到ping包的offset偏移量是0(因为有且只有一个包),ip包总长=48Byte。这里会发现,当指定ping包20Byte时,icmp包的data部分只有12Byte,与实际发出的48Byte相差了36Byte
在这里插入图片描述
其中20Byte很好理解是IP协议头,另外8Byte为ICMP头,但是多剩下的8Byte是哪里的呢?
查看wireshark显示的十六进制ICMP报文内容,一共28Byte:

0020         08 00 6e ff 12 89 00 0a 47 ae 2a 63 00 00   ....n.....G.*c..
0030   00 00 d4 37 0e 00 00 00 00 00 10 11 12 13         ...7..........

其中“47 ae 2a 63 00 00 00 00 ”是icmp时间戳,占了8Byte,正好是前面找不到原因的8Byte大小。所以多出来的36Byte=icmp协议头固定前8Byte+icmp时间戳8Byte+ip协议头20Byte。

由此知,icmp 报文格式还有一部分可选字段是记录时间戳,request和reply类型都会使用此字段:
在这里插入图片描述
这就是为什么指定了ping包长为20后,实际抓到的icmp报文长却是28(icmp data长12)、ip包长48

当通过ping -s len指定发出长度为len的ping包时,程序默认将固定的8Byte ICMP头部长度涵盖了进去,意味着icmp报文的数据段长度将设为(len-8)。但实际发出的icmp包可能使用了头部的可选数据段记录时间戳,导致实际发送时icmp包长增加了8Byte,总的ip包长增加了28Byte。

icmp大包是如何被分片的呢?

上面是未被分片的抓包,下面观察下被分片的icmp包的ip头部offset变化。
下方指令指定5000包长后,实际发出是5028Byte。28Byte的增量同理。

test@test-FTF:~$ ping 172.30.200.180 -s 5000
PING 172.30.200.180 (172.30.200.180) 5000(5028) bytes of data.
5008 bytes from 172.30.200.180: icmp_seq=1 ttl=63 time=21.9 ms
^C
--- 172.30.200.180 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 21.860/24.090/26.321/2.230 ms

当指定ping包长为5000时,每个发出的icmp报文的数据部分长度为5000-8=4992Byte,ICMP报文总长度为4992+8+8=5008Byte=5028-20。

对于ip层来说,待传输的ip层数据为5008Byte ICMP报文,ip层将对这5008Byte的数据进行分片,确保每个分片包加上ip头部后的包总长不超过1500,即会把ip层数据分为5008=1480*3+568这四部分,需要分成4个分片包发出。

一个ping包发出,wireshark会抓到四个fragmented ip 包,如下图:
在这里插入图片描述

2-5号是4个分片包。注意:第一列2-5这个序号不代表ip报文id,而是表明这个软件抓到的第几个包的序号。reassembled in #5代表着这些分片内容将在5号包内重组后显示。

  • 第一个分片包:ip头部header length这里二进制值为0101,转换成十进制为5,因为这个项值的单位是4Byte,这里代表的是ip头部长度为20Byte。ip包的数据部分长度1500-20=1480Byte
    在这里插入图片描述

  • 第二个分片包:flags值为20b9=0010 0000 1011 1001,flags部分的最高位0是保留位,从左数第二高位0是DF位(DF位置1代表不分片),第三高位1是MF位(MF置1代表着more fragments后面还有分片包),后13位代表片偏移,片偏移为0 0000 1011 1001(185),此值单位是8Byte,所以表示的是185*8=1480 Byte的偏移量。对于第一个分片包的icmp数据来说,第一个包只存放了1480Byte的ICMP内容,故第二个分片包的片偏移为1480。
    在这里插入图片描述

  • 第三个分片,flags值为2172=0010 0001 0111 0010,片偏移为0001 0111 0010(370),偏移量为3708=2960Byte。对于第一个分片包的icmp数据来说,前两个包存放了14802=2960Byte的ICMP内容,故第三个分片包的片偏移为2960。
    在这里插入图片描述

  • 第四个分片,flags值为022b=0000 0010 0010 1011,片偏移为0 0010 0010 1011(555),偏移量为5558=4440Byte。对于第一个分片包的icmp数据来说,前三个包存放了14803=4440Byte的ICMP内容,故第四个分片包的片偏移为4440。最后一个分片的icmp数据长度为588-20=568Byte。注意,最后一个分片包的MF未置上,说明当前包就是最后一个分片了。
    在这里插入图片描述
    在最后一个分片包内,wireshark会自动将前面收到的所有IP分片重组后显示在此包的ip数据部分,对比可发现前面三个分片ip头之后就只有ip data区,而最后一个分片ip头后是一个完整的icmp报文(16Byte头+4992Byte数据)。

  • 24
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Wireshark是一款网络协议分析工具,可以用来抓取网络数据包并进行分析Ping是一种常用的网络工具,用于测试网络连接是否正常。下面是使用Wireshark抓包分析Ping的步骤: 1. 打开Wireshark并选择要抓取的网络接口。 2. 在过滤器中输入“icmp”,这样Wireshark就只会显示ICMP协议的数据包。 3. 在命令行中执行ping命令,例如“ping www.baidu.com”。 4. 在Wireshark中可以看到所有与ping相关的数据包,包括请求和响应。 5. 可以通过分析数据包的源地址、目的地址、时间戳等信息来判断网络连接是否正常。 总之,使用Wireshark抓包分析Ping可以帮助我们更好地了解网络连接的情况,从而更好地维护网络。 ### 回答2: Wireshark是一款非常强大的网络协议分析工具,它的功能十分强大,可以用来抓包分析网络数据包。其中,对于ping命令的抓包分析,也是Wireshark常用的操作之一。 首先,我们可以通过Wireshark选择需要抓取数据包的网络接口,比如以太网接口、无线网卡、虚拟网卡等。接着,在过滤条件面板中输入“icmp”,选择“icmp echo request”过滤条件,点击“start”按钮开始抓包。 当我们在另一台电脑上使用ping命令来ping网络接口时,我们就可以在Wireshark中看到相应的ping数据包,其中会包含源IP地址、目标IP地址、TTL值、数据度等信息。我们可以通过Wireshark可以很轻松地分析该包的详细信息,比如:请求响应时间、往返时间、TTL值以及其他诸多参数,从而更深入地了解网络通信的一些基本参数。 Ping命令抓包分析常常被用于网络出现问题的排查过程中,通过分析ping包可以判断某个节点的网络状况,以及是否存在延时、丢包等问题。同时,对于网络攻击与防御也十分有用,比如可以分析DOS攻击中ping flood过程的细节,从而有效防御异常的ping请求等网络攻击行为。 总之,Wireshark抓包分析ping命令是非常实用的网络工具,尤其对于网络维护与安全方面有着极其重要的作用。掌握这两个功能,对于网络管理人员,必不可少。 ### 回答3: Wireshark是一款流行的网络抓包工具,它可以通过在网络接口上监听数据包来进行数据抓包。其中,ping是一个常用的网络命令,能够检测网络连接是否正常,通过使用Wireshark可以对ping命令进行抓包分析,以了解网络延迟、丢包等问题。 在开始进行Wireshark抓包前,首先需要在网络适配器上设置过滤条件。以ping命令为例,可以使用以下过滤条件:icmp和ip.addr==<目标IP>。这将只过滤ICMP数据包以及目标IP地址匹配的数据包。接下来,运行ping命令并同时运行Wireshark进行抓包Wireshark在捕获到数据包后,可以进行详细的分析和解析。 在Wireshark中,可以通过查看ping命令发送的ICMP数据包来分析网络延迟和丢包情况。图中可以看到,有多个ICMP数据包从源IP地址发送到目标IP地址,并且每个包的序号依次递增。在此基础上,通过观察时间戳可以计算出每个数据包的延迟时间,以判断网络连接的速度和质量。 此外,Wireshark还可以分析ping命令的回应。当目标IP地址接收到ping数据包时,会向源IP地址返回一个回应数据包。在Wireshark中,可以通过查看回应数据包的序号和时间戳来分析网络延迟和丢包情况。如果回应数据包的序号和时间戳与发送数据包不符,则说明存在丢包现象。通过这些分析,可以更好地了解网络连接的质量和性能问题。 总之,Wireshark抓包分析ping命令是网络工程师必备的技能之一,通过这些技能,可以更好地了解网络的性能和质量问题,为网络优化和故障排除提供有力支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值