我正在发送一个 HTTP 请求,其主体足够大,可以将请求分割成大小分别为 374B(标头)、1500B 和 199B 的多个数据包。
由于我们的某些网络设备的 MTU 仅为 1430B,并且数据包设置了 IPv4“不分段”标志,因此设备拒绝大小为 1500B 的数据包,并以需要 ICMP 分段但设置了“不分段”标志进行响应。此数据包 ICMP 数据包的“下一跳的 MTU”为 1430B。
然后,TCP 等待一会儿,并在由于网络拥塞而丢弃数据包时重新传输该数据包(参见 Wireshark 屏幕截图),并且不调整其段的大小。
为什么 TCP 不调整段的大小,以使数据包大小足够小?
我在用:
- Java Apache HTTPClient 库或 curl 7.64.0
- Linux 树莓派 4.19.86-v7+
- SIMCOM SIM7600G-H LTE 模块
响应大数据包的 ICMP 数据包(“下一跳的 MTU:1430B”)
编辑:所有流量都是通过客户端设备捕获的tcpdump
。