TCP 最大段大小 (MSS) 是否有最小值?

TCP 最大段大小 (MSS) 是否有最小值?

我有一个 OpenVPN VPN 网络连接,其中 MSS 大小 60 由于某种原因被发送出去(还不知道为什么)。 编辑:原因:OpenVPN mssfix 被错误地设置为 1

36  92.064383   10.102.0.43 10.1.151.50 TCP 52  49991 → 63760 [SYN] Seq=0 Win=65535 Len=0 MSS=60 WS=128 SACK_PERM=1
37  92.064763   10.1.151.50 10.102.0.43 TCP 52  63760 → 49991 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1460 WS=256 SACK_PERM=1

该网络上有两个设备,其行为方式不同。

  • 带有 Filezilla FTP 服务器的 Win 10 PC
  • 基于 VxWorks 的嵌入式设备 (PLC),带有内部 FTP 服务器

PC 将 MSS 大小设置为 536,但 PLC 根据要求将其设置为 60。

41  92.171676   10.1.151.50 10.102.0.43 FTP-DATA    576 FTP Data: 536 bytes (PASV) (RETR TCData.br)
67  17.385576   10.1.151.1  10.102.0.43 FTP-DATA    100 FTP Data: 60 bytes (PASV) (RETR TCData.br)

双方是否都以正确的方式实施了该措施?

我知道默认的 TCP MSS 是 536,但是是否有要求的最小大小?

答案1

最小 MSS 由 576 字节的最小 IP 数据报 MTU 控制。由于 TCP 使用 40 字节的开销,因此最小 MSS 为 536 字节。如果使用更多字节(例如用于时间戳),则 MSS 会更小

这可以在 IP RFC 791 第 3.1 节“Internet 标头格式 -> 总长度”中找到。

总长度是数据报的长度,以八位字节为单位,包括互联网标头和数据。此字段允许数据报的长度最大为 65,535 个八位字节。如此长的数据报对于大多数主机和网络来说都不切实际。所有主机都必须准备好接受最大 576 个八位字节的数据报(无论它们是完整到达还是分段到达)。建议主机仅在确信目标已准备好接受更大的数据报时才发送大于 576 个八位字节的数据报。

The number 576 is selected to allow a reasonable sized data block to
be transmitted in addition to the required header information.  For
example, this size allows a data block of 512 octets plus 64 header
octets to fit in a datagram.  The maximal internet header is 60
octets, and a typical internet header is 20 octets, allowing a
margin for headers of higher level protocols.

相关内容