在编写网络软件时,是否有默认的、典型的或其他事实上的 MTU 大小标准,我应该注意哪些?如果是,那是什么?
1500 的 MTU 大小(如此处建议:DSL 标准中支持的最大 MTU 是多少)是一个好的经验法则吗?
另外,我是不是想多了这个问题?这是人们在编写网络软件时认为很重要的事情之一,但实际上,在现实世界中,由于 TCP 会为您处理细节,因此最终并不重要吗?
我在这里提问,而不是在 StackOverflow 上提问,因为在涉及与 MTU 大小相关的实际支持问题时,我想要系统管理员的观点。
更新:根据一些反馈和初步答案,我稍微缩小了重点:
这是一个相当广泛的问题。
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
您不应该关心 MTU,因为网络堆栈将负责必要的优化。如果您使用 TCP,堆栈可能会使用计算最大段大小 (MSS) 的方法,这在理想情况下会导致数据包小于路径中的最低 MTU。其中之一是PMTU 的发现。
一般来说,您不应该试图比堆栈更聪明——TCP/IP 的分层架构使用抽象是有充分理由的。除非您有更好的功能,否则您应该将分段和碎片功能保留在其设计的位置。
正如其他人所写,除了 IP 数据包定义的最小 MTU( 68 字节)之外,没有“安全 MTU”可以假设,因此由于巨大的开销而具有相当低的实用价值。
由于 MTU 限制而导致的典型支持问题主要有两个:
这两个因素都不应该在应用程序中处理。
归档时间: |
|
查看次数: |
8302 次 |
最近记录: |