我试图了解不匹配的 MTU 在网络中如何表现。
假设两台主机能够通过以太网相互通信。网络和主机 A 配置为巨型帧,最高可达(但不包括主机 B 所在的 LAN 上的交换机和主机 B 本身)。据我对 TCP 的理解,每个 TCP 会话开始时的三次握手会将每个主机的 MSS 通告给另一台主机。假设主机 B 在减去 IP 和 TCP 报头后将通告 1460 字节的 MSS,并且由于它们将使用两个通告的 MSS 中较低的一个,那么这两台主机之间的任何 TCP 对话是否都能顺利进行?
另一方面,由于 UDP 没有 MSS,主机 A 发送的大型未分段的 UDP 数据包会被主机 B 丢弃吗?
答案1
TCP 会进行路径 MTU 发现以避免碎片化,这可能会导致数据包丢失增加。使用 UDP 的应用程序有两种选择。
它们可以允许数据包分段。这样,数据包就不会被丢弃,但如果任何分段被丢弃,整个数据包将不会被接收。这会增加数据包丢失率。
它们还可以通过在数据报中设置“不分段”位来执行自己的路径 MTU 发现。它们必须检测数据报丢失并处理路径 MTU 发生变化的可能性。
典型的 UDP 应用程序只是将数据报的总长度保持在 1,500 字节以下,并允许它们在必要时进行分段。这将导致最常见的链接上没有分段,并且不需要进行路径 MTU 检测。