如何计算PING请求的帧大小?ICMP帧MTU计算疑问解惑
关于ICMP数据包1472字节大小的拆解
咱们先把几个容易混淆的概念掰扯清楚,就能明白为啥是1472了:
1. 以太网MTU的真实含义
首先,以太网说的1500字节MTU,指的是IP数据包的最大总长度(也就是IP头部 + IP负载的总和),不是整个以太网帧的大小——你提到的帧头26字节是以太网帧的封装开销,不算在MTU里,MTU是给IP层用的限制。
2. ICMP的封装层级
ICMP消息是被封装在IP数据包里的,它属于IP的负载内容。咱们来一层层拆:
- IP头部:最小长度是20字节(不带可选字段的情况,这也是最常见的场景)
- ICMP头部:固定是8字节(包含类型、代码、校验和、标识符、序列号这些必要字段)
- ICMP数据部分:就是咱们ping的时候发送的测试内容,这部分的最大长度就是MTU减去前面两部分的固定开销。
3. 1472字节的由来
直接套公式算:
ICMP最大数据长度 = IP MTU - IP最小头长度 - ICMP头长度 = 1500 - 20 - 8 = 1472字节
这么算出来的1472字节,加上ICMP头8字节,再加上IP头20字节,刚好凑成1500字节的IP数据包,完美贴合以太网的MTU限制,不需要IP分片就能直接通过以太网传输。如果你把ICMP数据部分设得比1472大,整个IP包就会超过1500字节,要么触发分片(如果允许的话),要么被网络设备直接丢弃。
内容的提问来源于stack exchange,提问作者ErAB




