我有一个 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.