在 3 次握手期间,MSS 是协商还是交换的

网络工程 通讯协议
2021-07-10 03:03:13

这个疑问已经困扰了我一段时间了。

在阅读了大量文章后,我发现客户端和服务器在 tcp 3 方式握手期间交换了它们的 mss 值,并且选择了两个值中较低的作为连接的 mss。由于客户端和服务器都使用相同的 mss 值,这不是协商吗?

2个回答

它不被视为谈判,它是一个已知最大值的声明,并且没有来回。它可以双向不同。因此,一个 TCP 流可以具有不同的 MSS。

RFC 879规定:

主机不得发送大于 576 个八位字节的数据报,除非他们特别知道目标主机已准备好接受更大的数据集。

因此:

TCP 最大段大小是 IP 最大数据报大小减去四十。

默认 IP 最大数据报大小为 576。

默认 TCP 最大段大小为 536。

并继续:

TCP 提供了一个选项,可以在建立连接时使用该选项(仅)指示该连接上可以接受的最大 TCP 段大小。这个最大段大小 (MSS) 声明(通常被错误地称为协商)从数据接收方发送到数据发送方,并表示“我可以接受最大为 X 的 TCP 段”。大小 (X) 可能大于或小于默认值。MSS 可以在数据流的每个方向上完全独立地使用。 结果可能是两个方向上的最大尺寸完全不同。

您可以在RFC 6691RFC 1122第 4.2.2.6 节中找到有关 MSS 的更多信息

你不能称之为协商,因为每一方都声明了它可以接受的 MSS。此值是 tcp 缓冲区和出口接口 mtu 大小之间的最小值。一旦主机知道其 MSS 和远端主机的 MSS,他将选择最低的一个。因此,本质上,两个主机都将使用相同的 MSS 发送数据。