MTU尺寸的默认值是“典型的”还是“事实上的”?

  1. 在编写networking软件时,是否有一个默认的,典型的或事实上的MTU尺寸标准,我应该知道这一点? 如果是这样,那是什么?

  2. MTU的大小为1500(这里build议: 什么是DSL标准支持的最大MTU )是一个很好的经验法则?

  3. 还有,我在想这个问题吗? 在编写networking软件的时候,人们认为这些东西是否重要,但是在实际的现实世界中,由于TCP会为您处理细节,所以这些事情不会太重要。

我在这里问,而不是在StackOverflow,因为我想在系统pipe理员的angular度来看实际的支持MTU大小相关的问题。

更新:基于一些反馈和最初的答案,我缩小了焦点:

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

您不应该关心MTU,因为networking堆栈将负责进行必要的优化。 如果您使用的是TCP,堆栈可能会使用计算最大分段大小(MSS)的方法,这反过来会导致数据包小于path中最低的MTU。 其中之一是PMTU的发现 。

一般来说,你不应该试图超越堆栈 – TCP / IP的分层架构使用抽象是有原因的。 除非你有更好的,否则你应该把分割和分割的function放在devise的地方。

正如其他人所写,除了最小定义的MTU外,没有“安全的MTU” – 这是68字节 ,由于巨大的开销,因此具有相当低的实际价值。

由于MTU限制,典型的支持问题主要有两方面:

  • 不必要的碎片,因此乒乓协议更高的协议开销和更高的延迟
  • 由于无知的防火墙pipe理员过滤了ICMP并因此破坏了PMTU发现

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

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

1500是常见的? 是的,绝对是在局域网上的传统以太网。

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

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

一般情况下,VPN连接的MTU很可能会降低,而且这些连接都已经到位。 它可能是1410,1390,1362或其他一些好奇的数字。

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

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

pathMTU发现
http://en.wikipedia.org/wiki/Path_MTU_discovery#Problems_with_PMTUD

用MSS Clamping避开pathMTU发现问题
http://lartc.org/howto/lartc.cookbook.mtu-mss.html

回答:

1)很难回答这个问题,因为在接触networking时总会有影响软件性能的事情。 一个MTU优化的交换机端口到交换机端口通信不会对你的广域网链路有什么好处,或者更糟的是一个VPN将会增加开销和潜在的碎片。

2)是的,但在任何情况下都无法控制上游的情况!

3)是的,你正在推翻它,你真的正在编写软件,这将回到第2层进行优化? 如果你正在写… iSCSI驱动程序,那么是的,你可能需要考虑这样的事情。

坚持协议的要求,并假设你可以轻松地传递数据。 但是,尽量避免使用刚好超过MTU的固定长度块或其一小部分。

  1. 默认MTU是1500,这是Internet上可用的最大值。 隧道传输时可能需要较小的值。 大多数stream量将被分段并重新组装,超过链路上可用的最大MTU。 只有设置了DNF(Do Not Fragment)选项,数据包才能小于或等于MTU。 本地MTU设置可用MTU的上限。
  2. 由于大多数主机的MTU是1500.这是一个很好的使用默认值。 一些ISP提供使用像PPPOE这样提供较小MTU的隧道协议的链路。 同样,许多IPv6早期采用者可能正在使用隧道,并且可能具有更小的MTU。
  3. 你很可能过度思考问题。 在现实世界中,不能依靠本地MTU来确定链路的MTU。 你也不能指望它是一个静态值。 如果需要的数据包将被分割和重新组装。 例如,NFS的块大小通常为4096,通常以分段发送。