ping 命令设置数据包大小依靠参数指定 ICMP 探测包的字节数值,Windows 系统使用 l 参数,Linux 和 Mac 系统使用 s 参数,修改数据包大小主要用来测试链路 MTU 极限,排查分片丢包,验证大报文传输稳定性,默认情况下 Windows ping 数据包大小是 32 字节,Linux 和 Mac 默认是 64 字节,这个默认小包在很多场景下无法暴露真实故障,比如链路 MTU 不匹配的时候小包可以正常通,加大数据包之后就会出现丢包或者超时,这也是网络运维里面经常使用大 ping 包测试的核心原因,同时要注意数据包大小不能无限设置,超过链路 MTU 之后系统会自动分片,如果需要禁止分片还要额外搭配对应的参数,很多新手只改大小却不知道分片机制,最后测试结果会产生误判。
相关基础原理
ICMP 数据包大小指的是 ICMP 载荷部分的字节长度,不包含 IP 头部和以太网帧头部,IP 头部固定 20 字节,ICMP 头部是 8 字节,所以完整 IP 报文总大小等于设置的载荷大小加 28 字节。
MTU 也就是最大传输单元,以太网默认 MTU 是 1500 字节,意味着单个 IP 报文最大不能超过 1500,如果自定义 ping 数据包之后总报文超过 MTU,路由器就会把数据包拆成多个分片传输,分片传输会增加丢包概率,一旦某个分片丢失,整个 ICMP 包就判定失败,ping 就会显示丢包。
禁止分片的作用就是强制数据包不拆分,如果报文超过 MTU,路由器直接丢弃该包并且返回 ICMP 不可达,这个特性专门用来精准测出链路真实 MTU 数值。
分系统操作步骤
Windows 系统
打开 cmd 命令提示符,参数是小写 l,格式为 ping l 数据包大小 目标 IP 或者域名
示例 ping l 1000 223.5.5.5
如果需要持续测试并且禁止分片,追加 f 参数,完整格式 ping l 1000 f t 目标地址
注意 Windows 里面 l 是字母 L 小写,很多人误写成数字 1,命令会直接报错无法执行。
Linux 系统
终端使用 s 参数,格式 ping s 数据包大小 目标 IP
示例 ping s 1000 223.5.5.5
禁止分片参数是 M do,持续测试不需要额外参数,默认就是持续发包,按 Ctrl 加 C 停止,指定发包数量使用 c 参数,示例 ping s 1000 c 100 目标 IP
Mac 系统
命令格式和 Linux 保持一致,终端执行 ping s 数据包大小 目标地址,同样支持 M do 禁止分片,c 参数指定发包数量。
常用数据包大小参考表
| 数据包载荷大小 | 总 IP 报文大小 | 测试用途 |
|---|---|---|
| 32 字节 | 60 字节 | 默认小包基础连通测试 |
| 500 字节 | 528 字节 | 中等报文稳定性测试 |
| 1000 字节 | 1028 字节 | 常规大报文压力测试 |
| 1472 字节 | 1500 字节 | 标准以太网 MTU 极限测试 |
| 大于 1472 字节 | 超过 1500 | 触发分片或者禁止分片报错 |
实操注意要点
设置数据包大小测试的时候,优先对比小包和大包结果,如果小包 ping 正常,大包 ping 丢包,基本可以锁定 MTU 不匹配,链路分片故障,或者路由器对大报文处理性能不足。
部分运营商设备会丢弃大尺寸 ICMP 报文,这种不是本地网络故障,属于运营商策略限制,不要误判成线路损坏。
数值单位是字节,不要和比特混淆,很多人把 1500 比特当成数据包大小,会造成测试参数设置错误。
数值不能设置成负数,也不能超过系统允许最大值,Windows 最大可以设置到 65500 字节,超过这个数值命令会提示参数无效。
【常见问题】
问题 1 Windows ping 怎么设置数据包大小还禁止分片
回答 1 Windows ping 设置数据包大小使用 l 参数,同时加上 f 参数实现禁止分片,命令写法是 ping l 数值 f 目标地址,这个组合测试可以准确判断链路 MTU 是否匹配,避免分片掩盖真实故障。
问题 2 Linux ping 设置数据包大小的参数和 Windows 一样吗
回答 2 不一样,Linux ping 设置数据包大小使用 s 参数,Windows 是 l 参数,Linux ping 设置数据包大小之后默认允许分片,想要禁止分片还需要额外添加 M do 参数。
问题 3 ping 设置数据包大小到 1472 字节是什么目的
回答 3 ping 设置数据包大小为 1472 字节,加上头部之后总 IP 报文刚好等于 1500,也就是标准以太网 MTU 上限,用来测试链路是否支持完整 1500 MTU,排查 VPN 拨号之后 MTU 偏小导致网页打不开这类故障。
问题 4 为什么 ping 设置数据包大小之后出现丢包小包却正常
回答 4 ping 设置数据包大小之后报文变大,超过链路 MTU 就会分片,路由器拥塞或者不支持分片的时候就会丢包,小包体积小不需要分片所以可以正常回复,这种情况属于典型 MTU 相关故障。
【免责申明】
本文内容仅作为网络技术学习参考,ping 设置数据包大小相关测试请在拥有合法管理权限的网络环境下操作,禁止对非授权的公网服务器进行大报文探测压力测试,操作产生的网络异常以及相关后果由操作者自行承担,本文不属于官方运维规范,测试结果仅供参考。


