为什么 TCP 不会调整段的大小?

为什么 TCP 不会调整段的大小?

我正在发送一个 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 模块

wireshark 数据包

大数据包的 IPv4 标头

响应大数据包的 ICMP 数据包(“下一跳的 MTU:1430B”)

编辑:所有流量都是通过客户端设备捕获的tcpdump

相关内容