PING网络数据包为何只能65500
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PING网络数据包为何只能65500相关的知识,希望对你有一定的参考价值。
数据包最大的理论长度应该是65535,然后去掉报文长度20. 去掉ICMP 8个字节,那么剩下的字节去哪了? 使用了wireshark抓包后发现65500的数据包里分片后最后一个数据为388,也就是有包含8个数据,但是找不出这个数据的来源?是可选字段+填充部分的大小?
说一下我的理解吧,数据包理论最大长度是2^16 - 1 = 65535,这个是IP数据报的总长度
Ping包的长度 = IP数据报的总长度 - IP头部 - ICMP头
其中,IP头部是20~60,必须是4的整数倍,ICMP头是8字节
所以Ping包的最大长度应该是65535 - 20 - 8 = 65507
那么为什么把这个 7 字节也省略了?应该是操作系统做了限制(或者考虑分段偏移就是8的整数倍,就将这7个字节也省略了)
最后一个分片是由 65500 -(MTU - IP头部)*n + ICMP头 来决定的,一般MTU是1500,当然也可以修改为小于1500
所以最后一片的长度就是 小于(MTU - IP头部)的一个值,那只能是 388 字节了 参考技术A 可选字段和填充部分知识针对IP报头来说,因为IPV4报头大小在20懂啊60字节之间,并且是4的倍数,比如23字节,就会填充1字节变成24字节。但这个只是报头大小。这么大的一个数据被分片了很多,分片根据MTU大小,388就是最后不到MTU的那部分数据分片。追问
我使用了wireshark试着ping了65500个数据包,发现抓到的是65508,而PING了1000个数据包,抓到的是1008,这里有8个字节是哪里来的?(不是ICMP和报文长度,不过个人感觉也有可能是ICMP的长度扩充了,但是ICMP的长度都是8字节,有可能会变成16个字节吗?)
我使用了wireshark试着ping了65500个数据包,发现抓到的是65508,而PING了1000个数据包,抓到的是1008,这里有8个字节是哪里来的?(不是ICMP和报文长度,不过个人感觉也有可能是ICMP的长度扩充了,但是ICMP的长度都是8字节,有可能会变成16个字节吗?)
追答我个人认为是这样的,你想,如果一个包是65500可以直接发出去,那么它发出去的大小应该是65500+报头的大小,但是如果分片了,每一个分片都需要加一个报头,也就是说虽然发了一个65500的包,但是实际上发送的大小肯定是大于这个数字的,个人觉得不应该只有8这么小,我算了算 最起码总大小要大院65500+43*20,这是算上三层最小IP报头大小,实际上还有二层报头的大小呢。
追问我wireshark发送了0字节的包出去,然后抓包出来也有8个字节,数据显示是0个,但是回声回来的数据是8个字节,发送1000个字节的也有1008,这8个字节的来源并不知道是哪来的,数据里已经包括ICMP和报文头的长度,所以不可能是ICMP和报文长,我原本猜测是否回声时数据是ICMP填充的8个字节,但是这明显是不可能的,所以对于这8个字节的来源还是不了解
本回答被提问者和网友采纳 参考技术B 还是不在这现眼了。paping/psping 那些事
paping & psping 简单描述
paping:跨平台
psping:只能在windows上进行使用
ping:跨平台
当需要测试数据包能否通过IP协议到达特定主机,一般都是使用ping。
工作时,ping向目标主机发送一个ICMP Echo请求的数据包, 并等待接收Echo相应数据包,通过响应时间和成功响应的次数来判断丢包率和网络延迟、担当对方禁止ICMP之后,ping将无效。所以不能直接使用ping来测试服务的连通性。
当需要进行连通性测试,如测试RDP SSH端口 或者HTTP HTTPS服务稳定性等 可使用psping或者paping。
psping是微软PsTools套件中的一个命令,可进行ICMP ping测试,主要用来测试TCP端口的连通性,还可以进行TCP/UDP网络时延和带宽。
paping功能与psping简单一点,不支持UDP端口的测试
paping & psping 使用
psping 的使用
psping在测试的时候,会有一个热身测试,目的是使后续的测试数据更加准确。当没有指定-t 参数,默认只统计4次正式测试数据
统计结果第一行包含发送请求的次数,接收到回应的次数,连接丢失的次数以及丢失百分比。
第二行数据表示的是:最小、最大以及平均的响应时延。
psping支持的参数
参数 | 含义 |
---|---|
-t | 类似于ICMP的长 ping测试,知道按下ctrl+c 停止测试,并显示统计结果 |
-n | 指定测试的次数。还可以指定测试的时间长度,以秒为单位,使用时,需要在数字后加上s。如“10s” |
-i | 每次测试的间隔,默认为1秒。还可以指定0来进行快速ping测试 |
-w | 热身次数,默认为1次 |
-q | 测试过程中不输出结果,结束后显示统计结果 |
-h | 将时延结果统计为直方图打印(默认打印20行),也可以指定结果行数。如 "-h 10" 还有一种使用方法是统计自定义时延。如 “-h 65,70” 结果将统计时延分别为65 和 70 毫秒的次数 |
-4 | 强制使用IPV4 |
-6 | 强制使用IPV6 |
由于是测试TCP,测试时不排除被测试服务有一定的防护机制。
psping的下载可以直接搜索
https://download.sysinternals.com/files/PSTools.zip
解压之后可以psping文件复制到 C:WindowsSystem32 就可以直接使用
paping的使用方法
paping支持的参数
参数 | 含义 |
---|---|
-p --port N | 指定被测试服务的TCP 端口(必须) |
--nocolor | 屏蔽颜色输出 |
-t --timeout | 指定超时时长,单位毫秒 默认值 1000 |
-c --count N | 指定测试次数 |
当需要将结果输出到文件,建议使用 --nocolor参数,方便后期处理。
下载后解压
tar zxf paping_1.5.5_x86_linux.tar.gz
以上是关于PING网络数据包为何只能65500的主要内容,如果未能解决你的问题,请参考以下文章