一、MTU的定义及相关概念:
Mtu即最大传输单元,全称为Maximum Transmission Unit,是指通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。由于定义的模糊性,在此也介绍几个相关的名词,MRU、PMTU、MSS和JUMBO FRAME,供大家甄别。
MRU即最大接收单元,全称为Maximum Receive Unit,与MTU相对,称为最大接收单元,目前也没有权威的标准定义,但许多文章中有这个名词。一台主机或路由器的MTU与MRU可以不一致。
PMTU,全称为 path maximum transmission unit,即路径MTU,把一条IP路径上MTU的最小值称为PMTU,PMTU是个理想化的概念,但目前业界没有有效的手段来实现PMTU的发现和更新。`
MSS是OSI参考模型中四层的一个概念,即最大分段长度,全称为TCP Maximum Segment Size,指TCP每次能够传输的最大数据分段长度(以字节为单位),MSS一般比MTU小40字节。
Jumbo Frame(有些称Giant Frame),网络上会遇到jumbo frame的概念,cisco路由器的接口中也有这个参数,超过以太网标准长度1518字节的帧称为jumbo frame。
二、MTU涉及主要原理:
1、常见网络的MTU值:
IP网络以包为单位进行信息传递,那么,一次传送多大的包合适、多大的包最高效就成为一个核心问题之一。MTU就是决定在什么样的物理网络传送多大数据包大的事实标准,不同类型网络由于物理特性、发展阶段不同,其MTU的默认值也不尽相同,以下是摘录的各类网络及其默认MTU值:
对于windows操作系统来讲,其以太网网卡MTU默认为1500,但可以通过修改工具或修改注册表进行修改,但只能改小,不能改大,即只能修改为小于或等于1500字节。
2、PMTU 发现过程:
对于一个基于网络的应用来讲,如果应用穿过网络的MTU与PMTU相等,那么应用穿过网络的效率最高,或者说,应用通过主机网卡发出的最大数据包与PMTU越接近(指小于等于PMTU),应用穿过网络的效率越高,原因是有效的避免了分片和重组。
为了达到这个目的,一些操作系统支持自动发现路径MTU的功能,具体过程为:
路由器接口上收到一个报文长度大于本接口MTU值的报文,如果该报文被打上不分片的标记,将丢弃本报文,并且返回一个ICMP差错报文,通知报文发起者丢弃原因。报文发起者将发送比较小的报文。通过多次上述报文协商,将得到对于某一个固定路径上的最小Mtu值,这个过程叫做“Mtu Discovery”[详见RFC1191]。
了解了MTU发现的原理,举一个实例验证PMTU变化过程:
在上图所示实验网络中,由三层设备模拟PPPOE拨号,实现接入宽带IP网。三层设备上行以太网口默认MTU为1482字节。抓包结果显示如下:
将三层设备上行以太网口默认MTU改为1000字节。抓包结果显示如下:
3、“PMTU”发现存在的问题:
由于互联网上路由器或其它网络设备的配置的无法统一规范,某些运营商或网站考虑到网络安全和其它需要,有时会把ICMP报文过滤掉,此外,PMTU牵涉到主机、各类交换机、路由器、防火墙等网络设备,这些主机和网络设备没有有效的手段实现PMTU的协商和交互,这样Mtu Discovery不能正常运行,影响应用正常运行,即实质上目前没有有效的手段来发现PMTU。
互联网上的网络设备,遇到MTU发现报文或必须将IP包分片但DF设置为1时,路由器可采用以下任一种方式(从网上摘录):
发送符合 RFC 792 中最初定义的“ICMP Destination Unreachable-Fragmentation Needed and DF Set”消息,然后丢弃该包。原始消息格式中不包含有关转发失败的链路的 IP MTU 的信息。(导致PMTU无法正常发现)
发送符合 RFC 1191 中重新定义的“ICMP Destination Unreachable-Fragmentation Needed and DF Set”消息,然后丢弃该包。此新消息格式包含一个 MTU 字段,可指出转发失败的链路的 IP MTU。(PMTU可能会正常发现)
RFC 1191 定义了路径 MTU (PMTU) 发现,它使得源和目的 TCP 对等方能够动态地发现二者之间路径的IP MTU,从而发现该路径的 TCP MSS。一旦收到符合 RFC 1191 定义的“Destination Unreachable-Fragmentation Needed and DF Set”消息,TCP 就会将该连接的 MSS 调整为指定 IP MTU 减去 TCP 和 IP 报头的大小。这样,在该 TCP 连接上发送的后续包就不会超过最大大小,无需分段即可在该路径上传输。
直接丢弃包。直接丢弃需分段但 DF 标记设置为 1 的包的路由器称为 PMTU 黑洞路由器。
总之,PMTU的不可发现性,导致因MTU问题引起的应用系统无法正常运行情况时有发生。
4、超过MTU值的数据包分片、重组过程,:
IP包的格式如下:
IP包的分片重组牵涉到IP包头的几个重要字段,主要是标识符、标识位、偏移量,分别详述如下:
标识符(Identification):在发送数据包前,发送主机给每个数据包一个ID值,放在16位的标识符字段中。此ID用于标识唯一的数据报或数据流。接收主机利用此ID对收到的数据报进行重组。当分片的IP数据报从源地址发送到目的地址的时候,由于网络延迟或者不同的传输路径的关系,在到达目的主机时,这些分片数据报并不总是有序的到达,而是处于一种无序状态,因此,接收主机便用此ID判断接收的这些分片数据报是否属于同一个数据流,然后再进行重组。
标志(Flags):第一个bit称为R位,目前保留未用。第二个bit称为DF位,Don't Fragment,“不分片”位,即如果将这一比特置1 ,表示上层应用不允许分片,IP层将不对数据报进行分片。第三个bit称为MF位,More Fragment,“更多的片”。除了最后一个数据分片外,其他每个组成数据报的数据分片都要把该比特置1,表示有更多的分片。
偏移量(Framentation offset):13位的偏移量字段用来表示分段的数据报在整个数据流中的位置,即相当于分片数据报的顺序号。发送主机对第一个数据报的偏移量置为0,而后续的分片数据报的偏移量则以网络的MTU大小赋值。偏移量对于接收方进行数据重组的时候,这是一个唯一依据。对于分片的数据段(单位:字节)必须为8的整数倍,否则IP无法表达其偏移量。
了解了数据分片的几个关键字段后,我们找一个实例说明分片过程(从网上摘录):
在MTU为1500的以太网中,源主机如果需要通过UDP传送3000字节的数据到目的主机,这时的分段情况如下所示(假定在同一网段):
此处需要注意的是对于分片1的报头,相对于其他两个分片的报头要多8个字节UDP协议报头的开销。因此,在计算实际传输的数据净载荷时,分片1要多减去8字节UDP报头。最后,接收主机通过包ID、标识位、偏移量值将数据重组成完整的数据。
需要注意是,有些数据包在一次分片后,由于遇到更小MTU的网络,还可能被继续分片。为数据包分片和为数据包再次分片的区别在于网关处理MF位的不同。在一个网关为原来未分片的数据包分片时,除了末尾的数据包片,它将其余所有分片上的MF位置为1,最后一片为0。然而,当网关为一个非末尾的数据包片再次分片时,它会把生成的所有子分片中的MF位全部调为1,因为所有这些子分片都不可能是整个数据包末尾的数据包。分片中标志字段的M值取决于该分片是否是原始分组的最后一片,而片偏移量也是相对于原始分组的偏移量。
三、MTU对上层应用的影响:
1、TCP、UDP等上层应用传输效率的高低与PMTU有密切联系。
对TCP来讲,其传输效率与MSS的合适大小密切相关,而MTU是决定MSS大小的唯一因素。MSS的大小会在TCP连接建立阶段进行协商,具体协商过程如下:
TCP client发出SYN报文,其中option选项填充的MSS字段一般为(MTU-IP头大小-TCP头大小),同样TCP server收到SYN报文后,会发送SYN+ACK报文应答,option选项填充的mss字段也为(MTU-IP头大小-TCP头大小);协商双方会比较SYN和SYN+ACK报文中MSS字段大小,选择较小的MSS作为发送TCP分片的大小。
理论上,如果MSS与合适的MTU即PMTU(我认为合适的PMTU为路径上可不分片通过的最大MTU)匹配,TCP传输效率最高,因为免去了分片、重组等工作。但由于PMTU发现过程无法保证,导致最终发现的MTU可能并不合适路径传输,造成部分应用的分片和重组,降低了传输效率。
2、部分网络设备对特定应用的分片报文处理能力弱,造成部分应用故障。
目前,国内宽带IP网络多数用户采用PPPOE拨号方式实现业务接入。位于电信运营商内侧的BAS设备用于终结PPP连接,实现用户接入汇聚。实际应用中,部分BAS设备对VPDN等特定应用的分片、重组机制不健全,造成部分基于VPDN方式的业务速度缓慢。如:笔者曾发现过某厂商BAS设备ME60当TSU板未启用时,其于L2TP隧道的VPDN拨号应用,经常出现业务访问缓慢,甚至不通的情况,当启用TSU板后,业务恢复正常(经了解,TSU板是专门用于基于隧道或其它协议数据包分片处理功能)。某厂商设备SE800,承载了基于L2TP隧道的VPDN拨号应用后,部分应用可以使用,部分应用无法正常运行。
3、部分网络安全设备对分片的重组过程进一步影响业务应用。
原则上,当某个网络应用业务在传输过程中发生分片后,只有发送端和接收端会进行分片的重组,这已经影响到业务运行速度。当分过片的IP包经过网络监测设备、安全系统等设备时,基于安全和其它特定目的,有些设备要求完成数据包的分片和重组,会进一步延缓应用的运行速度,甚至导致部分应用无法使用。
四、MTU常见问题小结(摘录自网络):
1、为何有些共享上网的路由器的网络设备以太网口MTU值不是1500?
有些通过共享路由器PPPOE拨号上网的路由器上连口(与ADSL调制器互联的以太网口)MTU为1492,因为PPP报文占据了8个字节,导致承载数据信息的IP报文大小变成了1492。
2、为什么在思科路由器上GRE接口的默认MTU为1476?
因为GRE会重新封装一个IP包头,以及加上GRE的4字节头部,一共是24个字节。这样总的用于应用的IP包的长度为1476。
3、为什么支持VLAN标记的接口MTU要大于1514字节?
由于VLAN的原理是在以太网的帧头部加入了4个字节的VLAN TAG信息,因此在支持802.1q标记的链路的接口上要求MTU不小于1518字节,才能保证净荷为1500的数据包顺利通过该接口。
4、MTU和各种VPN的关系有无规律性?
因VPN的实现需要对原有的IP或者是TCP/UDP数据进行封装,因此也就增加了数据包或数据帧的总长度,这样也就导致了VPN 承载的数据净荷值的减小,具体减少的数值与不同的VPN类型相关。
即:MTU=经VPN封装后数据包长度-VPN封装包头长度
5、对于因MTU问题引起的应用系统故障现象有哪些?处理思路是什么?
因MTU引的网络问题表现各种各样,如:有些游戏,经常卡机。有的网站,部分网页可以打开,部分网页打不开。总的来讲,如果网络不丢包,而网络应用时快时慢,或部分应用无法使用,很大程度上可以定位为MTU问题。
对于MTU引起的问题,处理思路为:要么增加网络中最细管道的MTU值,要么减少终端应用发现的数据包大小。对于终端的MTU,会有各种各样的工具或方法进行修改。