在挂起,冻结,缓慢,无反应的互联网连接的情况下,通常会被无理地认定为“MTU / MRU问题”,其中有几个草率地提出了“魔法治疗”(通常无效或不适用于这种情况),例如涉及iptables或ifconfig命令,其他“将MTU钳制到TSS”法术。
我想知道的是MTU / MRU究竟是什么问题,为什么它影响连接速度和延迟,以及如何治愈(已知的和现代的方法),因为我想知道如何解决这个问题,不是神奇的。
这是一个复杂的问题,所以我将从基础开始。 原谅我,如果你知道这一切已经。
MTU是最大传输单位,是计算机接口发送的最大数据包。 对于以太网,默认值是1500字节。 以太网帧通常可以达到1522-1542(取决于你的计数),额外的空间是“保留”的头信息。
各种连接可能具有不同的能力。 在互联网上运行的MTU略小于1500的链接是非常常见的。这通常是由于链接采用了额外的头信息或使用“标准”以太网之外的媒介(大多数Internet实际上运行在ATM / SoNet连接)。 通常情况下,遇到这种链接的stream量只是简单地分成多个部分并发送。
由于这是常见的,而且在IP发明的时候,ICMP协议的一部分责任是与MTU沟通任何问题。 如果某个数据包由于某种原因无法被破坏和转发,则使用ICMP将该问题传回发送计算机。 发送计算机采取适当的行动,将信息分解成更小的块,每个人都高兴。 整个过程在幕后处理。 在一个function正常的networking中 ,从不需要使用MTU设置 。
最后一句的限定词是踢球。 自动化过程崩溃有三个常见的原因:
ping工具知道这一点)。 那么,为什么是常见的:懒惰的技术人员/公司。 通过一个微小的MTU来阻止这个连接几乎是比较容易的,而不是解决上述问题之一。 如上所述,现在没有人应该把MTU搞得乱七八糟(我能想到的一个例外就是启用Jumbo帧,但这不是我们在这里讨论的)。 无论如何,正确的治疗方法是找出潜在的问题并解决问题; 治疗病症的典型病例不是症状。
MTU如何影响连接? 把数据切成小块意味着每件作品都有更好的机会到达目的地,尤其是在高度不可靠的连接中。 然而,小的部分,每个传输的数据会有更多的开销。 这意味着有效的连接速度降低; 基本上如果MTU真的很小。 延迟可能会受到影响,但由于头文件和碎片/重组过程需要额外的处理和开销,因此可能会受到影响。
更新: – 关于--clamp-mss-to-pmtu
就我个人而言,我从来没有用MTU搞过; 我承认自己是一个完美主义者,当遇到这样丑恶的黑客时,我总是find问题的根源,并且能够纠正它。 为此, iptables选项--clamp-mss-to-pmtu对我来说是陌生的。 显然这是非常普遍的,而且在大多数情况下可能是非常不合理的,使用这个黑客。 弥补上述问题之一仍然是一个瑕疵。 我从Linux的manpage中引用了iptables(8):
这个目标是用来克服“ICMP碎片需要”或“ICMPv6数据包太大”数据包的刑事智能ISP或服务器。
手册页的相对苛刻的语言应该表明不遵循RFC的ISP和networking(尽力尝试或补偿)获得多less轻视。
说到在VPN中使用UDP,以前最常见的做法是尽量减lessVPN的开销,并允许现有端点pipe理会话信息。 VPN无法知道应该如何处理会话,所以这个任务最好留给知道的应用程序。
许多现代的VPN隧道协议都build立在较低的层面上(开销更less),比如GRE和L2TP; 或通过较高级别(通常用于兼容限制性防火墙或其他原因)隧道,如SSTP或SSH。 这将逐渐取代UDP作为传输机制。
更新2: – 诊断MTU / ICMP问题
所以你认为你有一个MTU / ICMP问题,并想确定。 这个过程有两个基本的步骤。 指示是针对Linux或BSD的,但可以适应任何操作系统。
ping -c 2 -s 1472 -D google.com 。
traceroute -F google.com 1472 。 这会告诉你哪一跳是坏的。 注意:CPE对traceroute请求没有响应是非常常见的,所以如果第一跳没有响应,不要惊慌。
在旁注:什么ISP使用PPTP这些天? 这是来自陈旧和无用的过去的爆炸。 他们至less应该使用PPPoE; 但简单地通过MAC和Segment授权调制解调器将会更容易(对于ISP和客户而言)。