什么是MTU

Maximum Transmission Unit,缩写MTU,华文名是:最大传输单位。

这是哪一层搜集的观念?

从底下这个表格中不妨看到,在7层搜集和议中,MTU是数据链路层的观念。MTU控制的是数据链路层的payload,也即是表层和议的巨细,比方IP,ICMP等。

OSI中的层

功效

TCP/IP和议族

运用层

文献传输,电子邮件,文献效劳,假造结尾

TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet

表白层

数据方法化,代码变换,数据加密

没有和议

对话层

废除或创造与其余接点的接洽

没有和议

传输层

供给端对端的接口

TCP,UDP

搜集层

为数据包采用路由

IP,ICMP,RIP,OSPF,BGP,IGMP

数据链路层

传输有地方的帧以及缺点检验和测定功效

SLIP,CSLIP,PPP,ARP,RARP,MTU

物理层

以二进制数据情势在物理媒介上传输数据

ISO2110,IEEE802,IEEE802.2

MTU有什么用?

举一个最大略的场景,你在教用本人的条记本上钩,用的是路由器,路由器贯穿邮电通信搜集,而后考察了www.baidu.com,从你的条记本动身的一个以太网数据帧所有过程了以次路途:

条记本 -> 路由器 -> 邮电通信机房 -> 效劳器

个中,每个节点都有一个MTU值,如次:

1500 1500 1500

条记本 -> 路由器 -> 邮电通信机房 -> 效劳器

假如此刻我把条记本的MTU最大值树立成了1700,而后发送了一个超大的ip数据包(2000),这功夫在除外网传输的功夫会被拆成2个包,一个1700,一个300,而后加上面消息举行传输。

1700 1500 1500

条记本 -> 路由器 -> 邮电通信机房 -> 效劳器

路由器接受到了一个1700的帧,创造大于本人树立的最大值:1500,即使IP包DF标记位为1,也即是不承诺分包,那么路由器径直就把这个包抛弃了,基础就不会达到邮电通信机房,也就到不了效劳器了,以是,到这边咱们就会创造,MTU本来即是在每一个节点的管理和控制值,只假如大于这个值的数据帧,要么采用分片,要么径直抛弃。

干什么是1500?

本来一个规范的以太网数据帧巨细是:1518,头消息有14字节,尾部校验和FCS占了4字节,以是真实留给表层和议传输数据的巨细即是:1518 – 14 – 4 = 1500,那么,1518这个值又是从何处来的呢?

假如取一个更大的值

假如MTU值和IP数据包巨细普遍,一个IP数据包的巨细是:65535,那么加上以太网帧头和为,一个以太网帧的巨细即是:65535 + 14 + 4 = 65553,看上去犹如很完备,发送方也不须要拆包,接受方也不须要重组。

那么假如咱们此刻的带宽是:100Mbps,由于以太网帧是传输中的最小可辨别单位,再往下即是0101所对应的光旗号了,以是咱们的一条带宽同声只能发送一个以太网帧。即使同声发送多个,那么对端就没辙重构成一个以太网帧了,在100Mbps的带宽中(假如中央没有耗费),咱们计划一下发送这一帧须要的功夫:

( 65553 * 8 ) / ( 100 * 1024 * 1024 ) ≈ 0.005(s)

在100M搜集下传输一帧就须要5ms,也即是说这5ms其余过程发送不了任何数据。即使是开始的电话拨号,网速惟有2M的情景下:

( 65553 * 8 ) / ( 2 * 1024 * 1024 ) ≈ 0.100(s)

100ms,这几乎是恶梦。本来这就像红绿灯,功夫要树立有理,瓜代风行,否则同一个目标即使从来是绿灯,那么另一个目标就要堵成翔了。

既是大了不行,那树立小一点不妨么?

假如MTU值树立为100,那么单个帧传输的功夫,在2Mbps带宽下须要:

( 100 * 8 ) / ( 2 * 1024 * 1024 ) * 1000 ≈ 5(ms)

功夫上仍旧能接收了,题目在乎,尽管MTU树立为几何,以太网头帧尾巨细是恒定的,都是14 + 4,以是在MTU为100的功夫,一个以太网帧的传输功效为:

( 100 - 14 - 4 ) / 100 = 82%

写成公式即是:( T - 14 - 4 ) / T,当T趋于无量大的功夫,功效逼近100%,也即是MTU的值越大,传输功效最高,然而鉴于上一点传输功夫的题目,来个折衷的采用吧,既是头加尾是18,那就凑个整来个1500,总巨细即是1518,传输功效:

1500 / 1518 = 98.8%

100Mbps传输功夫:

( 1518 * 8 ) / ( 100 * 1024 * 1024 ) * 1000 = 0.11(ms)

2Mbps传输功夫:

( 1518 * 8 ) / ( 2 * 1024 * 1024 ) * 1000 = 5.79(ms)

总体上功夫都还能接收

最小值被控制在64

干什么是64呢?

这个本来和以太网帧在半双工下的碰撞相关,感爱好的同窗不妨自行去探求。

在我玩玩耍的功夫,干什么把MTU改成1480就不卡了?

路由器默许值大多都是1500,表面上是没有题目的,那干什么我玩玩耍的功夫改成1480本领流利呢?因为在乎其时我运用的是ADSL上钩的办法,ADSL运用的PPPoE和议。

PPPoE

PPPoE和议介于以太网和IP之间,和议分为两局部,PPP( Point to Point Protocol )和oE( over Ethernet ),也即是以太网上的PPP和议,而PPPoE和议头消息为:

| VER(4bit) | TYPE(4bit) | CODE(8bit) | SESSION-ID(16bit) | LENGTH(16bit) |

这边所有是48位,也即是6个字节,那么其余2个字节是什么呢?谜底是PPP和议的ID号,占用两个字节,以是在PPPoE情况下,最好MTU值该当是:1500 – 6 – 2 = 1492。

我的上钩办法

其时我的上钩路途如次:

PC -> 路由器 -> 邮电通信

我在路由器举行拨号,而后PC贯穿路由器举行上钩。

最基础因为

题目就出在路由器拨号,即使是PC拨号,那么PC会举行PPPoE的封装,会依照MTU:1492来举行以太网帧的封装,纵然经过路由器,路由器这功夫也不过转发罢了,不会举行拆包。

而当用路由器拨号时,PC并不领会路由器的通讯办法,会以网卡的树立,默许1500的MTU来举行以太网帧的封装,达到路由器时,因为路由器须要举行PPPoE和议的封装,加上8字节的头消息,如许一来,就必需举行拆包,路由器把这一帧的实质拆成两帧发送,一帧是1492,一帧是8,而后辨别加上PPPoE的头举行发送。

平常玩玩耍不卡,是由于数据量路由器还处置得过来,而当举行群怪AOE的功夫,因为短功夫数据量过大,路由器处置然而来,就会爆发丢包卡顿的情景,也就掉线了。

帖子内里提到的1480,探求大概是尽管设小一点,制止二次拨号带来的又一次PPPoE的封装,由于功夫长久,没方法回到其时的场景再去抓包了。

论断

1518这个值是商量到传输功效以及传输功夫而折衷采用的一个值,而且因为暂时搜集链路中的节点太多,个中某个节点的MTU值即使和其余节点不一律,就很简单带来拆包重组的题目,以至会引导没辙发送。