我正在通过分析将大文件上传到 Web 服务器来学习 TCP 网络。
在syn、syn/ack、ack期间,服务端和客户端达成一致Maximum Segment Size = 1460。这与我在网上看到的一致。
但是从我的 Wireshark 捕获中我可以看到每个 TCP 段实际上包含 2776 字节的数据。
显然,这是两件不同的事情,我误解了一些东西。
我的问题是:
TCP 段的数据长度是如何/何时/在哪里决定的?
我正在通过分析将大文件上传到 Web 服务器来学习 TCP 网络。
在syn、syn/ack、ack期间,服务端和客户端达成一致Maximum Segment Size = 1460。这与我在网上看到的一致。
但是从我的 Wireshark 捕获中我可以看到每个 TCP 段实际上包含 2776 字节的数据。
显然,这是两件不同的事情,我误解了一些东西。
我的问题是:
TCP 段的数据长度是如何/何时/在哪里决定的?
如果您指的是 Wireshark“数据长度”列,则它是一个 TCP 段的所有 IP 片段的总和。
这样做的原因是您的操作系统实际上正在向网卡发送大 TCP 段,而网卡对(较小的)MTU 进行分段,这就是为什么您看到您正在发送 2776 字节长的帧(相同我认为可能发生在接收方)。如果您直接嗅探线路(例如交换机),您只会看到 1518/1522 字节的帧。
这称为大段卸载,是网卡的功能。可以关闭它,然后操作系统将不得不向网卡发送低于 MTU 限制的帧。