MSS 和 MTU 有什么区别?

网络工程 通讯协议 第3层 第4层 pppoe
2021-07-08 13:33:38

我对最大段大小和最大传输单元之间的区别感到困惑。

有人可以解释一下第 2 层和第 3 层吗?

如果我在有效载荷中有一个 800 字节的数据包。说 MSS 为 800 字节(如果我将其设置为该字节)而 MTU 为 840 是否正确?TCP 20 和 IP 20 字节。如果我在做 PPPoE 会有什么不同吗?

3个回答

MTU 是给定链路的最大 IP 数据包大小。大于 MTU 的数据包在找到较低 MTU 的点被分段,并在链的下游重新组装。

如果不需要分片,您要么必须检查每一跳的 MTU,要么为此使用辅助协议(路径 MTU 发现)。

需要注意的是IPv6的确实不是由路由器支持数据包碎片,因此PMTUD与ICMPv6的是强制性的,如果你不想失去,因为小MTU的数据包的地方。端点可以分段,但路由器不能分段。此外,IPv6 具有更高的 MINIMUM MTU。

MSS 是最大 TCP 段大小。与 MTU 不同,超过 MSS 的数据包不会分片,它们只是被丢弃。MSS 通常在 TCP 三向握手中决定,但某些设置可能会产生路径,其中决定的 MSS 仍然太大,导致丢包。MSS 不是按数据包协商数据包,而是针对完整的 TCP 会话,也不考虑 TCP/IP 标头

当使用 PPPoE 时,所有的开销意味着你需要减少途中的 MSS,通常通过在找到阻塞点的路由器上指定它,然后如果它更高,它将用正确的较低值替换通过三路握手的 MSS。PPPoE 只是在所有内容 (IP+TCP) 之上添加 8 字节(6 字节 PPPoE + 2 字节 PPP),旨在以 1500 字节 MTU 在以太网上运行,因此通常配置 1492 MSS 以使其通过。

您的 IP 堆栈将切断要发送到 MSS 的数据,将其放入 TCP 段,然后在发送之前将其放入一个或多个 IP 数据包(取决于它是否大于本地 MTU 设置)。如果中间路由器的 MTU 较低,则可以进一步将其切断,但它们仅影响 IP 数据包本身,而不影响 TCP 段/标头。

此外,MSS值源自MTU假设您有 2260 字节的数据要发送到远程设备。如果MTU为1500,我们认为IP头+TCP头为40字节,那么第一个IP包只能发送1460字节的数据。剩余的 800 字节将在第二个 IP 数据包中发送。因此,对于 MSS = 800,MTU 应至少为 840。

由于 PPPoE 开销为 8 个字节,因此 MTU = 1492 个字节,MSS = 1492-40 = 1452 个字节。

MTU 是给定链路的最大 IP 数据包大小。MSS 是最大 TCP 段大小。

MTU 用于分片,即对大于 MTU 的数据包进行分片。但在 MSS 的情况下,大于 MSS 的数据包将被丢弃。

MSS 在 TCP 握手时基本在 SYN 中指定,并且它的值在连接建立后不能更改。

MSS=MTU-40(IP头(20字节)+TCP头(20字节))