MTU 大小是否存在“典型”或“事实”默认值?

jef*_*unt 6 networking mtu

  1. 在编写网络软件时,是否有默认的、典型的或其他事实上的 MTU 大小标准,我应该注意哪些?如果是,那是什么?

  2. 1500 的 MTU 大小(如此处建议:DSL 标准中支持的最大 MTU 是多少)是一个好的经验法则吗?

  3. 另外,我是不是想多了这个问题?这是人们在编写网络软件时认为很重要的事情之一,但实际上,在现实世界中,由于 TCP 会为您处理细节,因此最终并不重要吗?

我在这里提问,而不是在 StackOverflow 上提问,因为在涉及与 MTU 大小相关的实际支持问题时,我想要系统管理员的观点。

更新:根据一些反馈和初步答案,我稍微缩小了重点:

  • 我正在编写的应用程序将通过 WAN 连接在台式机/服务器之间进行通信
  • 这是典型的台式机/服务器(即非移动)软件,虽然连接的笔记本电脑可能会通过移动网络使用该软件,但我并不担心
  • 除了应用层之外,它甚至不会尝试处理 TCP 堆栈的任何层以进行优化
  • 在这个问题的范围内可以排除 VPN 开销

Gre*_*kew 7

这是一个相当广泛的问题。

1500常见吗?是的,绝对适用于 LAN 上的传统以太网。

假设 1500 或期望它用于任何连接是否安全?不可以。从任何地方连接的移动用户在不同时间可能有不同的 MTU。

我们有时会降低可能通过 VPN 连接向远程办公室提供服务的数据中心服务器的 MTU。

一般而言,VPN 连接的 MTU 很可能会降低,而且到处都是。它可能是 1410、1390、1362 或其他一些奇怪的数字。

如果您对给定 tcp 连接的最大负载大小感兴趣,您可能会发现协商的最大段大小更有意义。对于标准的 1500 MTU LAN 连接,通常为 1460,但结果是它应该反映两个主机都可接受的大小。

对于遍历许多跳的连接,期望所有跳都具有“标准”MTU 或可以可靠地确定 MTU 可能是不现实的。请参阅有关该主题的路径 MTU 发现讨论。

路径 MTU 发现
http://en.wikipedia.org/wiki/Path_MTU_discovery#Problems_with_PMTUD

使用 MSS 钳位绕过路径 MTU 发现问题
http://lartc.org/howto/lartc.cookbook.mtu-mss.html


the*_*bit 4

您不应该关心 MTU,因为网络堆栈将负责必要的优化。如果您使用 TCP,堆栈可能会使用计算最大段大小 (MSS) 的方法,这在理想情况下会导致数据包小于路径中的最低 MTU。其中之一是PMTU 的发现

一般来说,您不应该试图比堆栈更聪明——TCP/IP 的分层架构使用抽象是有充分理由的。除非您有更好的功能,否则您应该将分段和碎片功能保留在其设计的位置。

正如其他人所写,除了 IP 数据包定义的最小 MTU( 68 字节)之外,没有“安全 MTU”可以假设,因此由于巨大的开销而具有相当低的实用价值。

由于 MTU 限制而导致的典型支持问题主要有两个:

  • 不必要的碎片,从而导致乒乓协议更高的协议开销和更高的延迟
  • 由于无知的防火墙管理员过滤 ICMP 导致传输中断,从而破坏了路径上的 PMTU 发现

这两个因素都不应该在应用程序中处理。