-a
:使ping
在收到响应时发出声音(适用于某些操作系统)。-b
:允许向广播地址发送ping
。-c count
:指定发送的ping
请求的数量。例如,ping -c 5 google.com
只发送 5 个请求。-i interval
:指定两次请求之间的间隔时间(单位:秒)。-I interface
:指定要使用的网络接口(例如eth0
)。-l preload
:在开始正式 ping 测试之前,预先发送指定数量的包。-n
:显示数字而不是地址解析后的主机名。-p pattern
:在每个 ICMP 请求中发送自定义的负载模式(例如ping -p 0xdeadbeef google.com
)。-q
:不显示输出,只显示最终的统计信息。-s packetsize
:指定 ICMP 请求包的大小(字节)。-t ttl
:设置 ICMP 请求的生存时间(TTL)。-v
:显示详细的输出(适用于调试)。-V
:显示ping
命令的版本。-w deadline
:设置ping
命令的最大运行时间(单位:秒)。-W timeout
:设置每个响应的超时时间(单位:秒)。-6
:使用 IPv6 协议进行ping
测试。
-
-M do
:这个选项告诉ping
在发送数据包时执行“防止分段”(Don't Fragment)。也就是说,要求网络设备在传输数据包时不允许对数据包进行分段。如果数据包大于路径 MTU(最大传输单元),就会导致错误。 -
-c 4
:表示发送 4 个ping
请求。 -
-s 1473
:设置每个ping
请求的数据大小为 1482 字节。 -
100.1.1.221
:目标主机的 IP 地址,表示你在 ping 这个地址。
网络中传输的最大传输单元(MTU)是 1500 字节。由于 ping -M do
强制不允许数据包分段,因此如果数据包大于路径的 MTU,就会触发错误。
- 数据包总大小 =
1473
字节的负载 + 28 字节的 ICMP 协议头和 IP 协议头,共计 1501字节。
协议头 | 字段 | 大小(字节) | 说明 |
---|---|---|---|
IP 协议头 | 版本与头部长度 | 1 | 4 位版本(IPv4),4 位头部长度(指示头部的长度,单位为 4 字节)。 |
服务类型 | 1 | 8 位服务类型(优先级、延迟、吞吐量等)。 | |
总长度 | 2 | 16 位,表示整个数据包的长度(包括头部和数据部分)。 | |
标识符 | 2 | 16 位,标识数据包,用于分片和重组。 | |
标志和片偏移 | 2 | 3 位标志、13 位片偏移,用于数据包分片的处理。 | |
生存时间(TTL) | 1 | 8 位,表示数据包的生存时间,防止数据包在网络中循环。 | |
协议 | 1 | 8 位,标识上层协议类型(例如 1 表示 ICMP,6 表示 TCP)。 | |
源 IP 地址 | 4 | 32 位,表示源主机的 IP 地址。 | |
目标 IP 地址 | 4 | 32 位,表示目标主机的 IP 地址。 | |
总计(IP 头) | 20 字节 | 总大小为 20 字节。 | |
ICMP 协议头 | 类型 | 1 | 8 位,表示 ICMP 消息的类型(例如,8 表示 Echo 请求,0 表示 Echo 响应)。 |
代码 | 1 | 8 位,表示消息的具体子类型。 | |
校验和 | 2 | 16 位,表示数据的校验和,用于检测传输过程中数据是否损坏。 | |
标识符 | 2 | 16 位,用于标识请求的 ID,通常用于匹配请求和响应。 | |
序列号 | 2 | 16 位,用于标识请求的顺序。 | |
总计(ICMP 头) | 8 字节 | 总大小为 8 字节。 | |
IP + ICMP 头总和 | 28 字节 | 20 字节(IP 头) + 8 字节(ICMP 头)= 28 字节。 |