例如:ping试验得到的最佳包大小为1460字节时,要加上28,将MTU设为1488。
计算机本地MTU值是1500,路由器MTU值默认1480,最大不可超过1492,进入路由设置了1.168.192。
如果是ADSL拨号上网的话,就设置成1492,如果是宽带上网或者是光纤上网,就设置成1500,mtu值没有明确规定必须是多少,要根据使用的网络环境决定。一般设备出厂时都默认是1500。
扩展资料:
MTU是网络调节的重要因素,因为包中的额外开销量相当高。高的MTU减少了头信息浪费的字节数。对大量数据传输尤其重要,而对小于MTU的传输没有影响。因此,注意配置传输大量数据流的服务器(如文件服务器和FTPH&.务器)上的MTU。
选择MTU时,规则是选择传输中不需分段的最大MTU。如果网络使用一种媒体类型,缺省的设置就可以。选择比媒体最大值更小的MTU并没有好处,整个数据报会因为每个包的错误而重发。换言之,不能重发单个段。
参考资料来源:百度百科-最大传输单元
数据包mtu设置多少
1. 一般建议保持MTU值为默认设置,除非出现以下情况:无法访问某些网站,或者无法打开安全网站(如网上银行页面),无法收发邮件,无法访问FTP和pop服务器等。
2. 寻找最佳MTU值是一个反复试验的过程。可以尝试将MTU值从最大值(1500)逐渐降低,直到网络问题得到解决。建议修改范围为1400 ~ 1500。设置多少MTU值取决于您的互联网访问方法。不同的上网方式支持不同的MTU。
大学那会我玩魔兽世界,我的职业是法师,然后经常有朋友找我我带小号,带小号的方式是冲到血色副本里面把所有怪拉到一起,然后一起用AOE技能瞬间杀掉,在学校玩的时候没什么问题,但是放假在家的时候,我发现每次我拉好怪,放技能AOE的那个瞬间,很大概率会掉线,也不是网速问题,当时很多人也遇到同样的问题,看到个帖子说,把自己的MTU改成1480就行了,当时也不知道啥是MTU,就改了,发现还真的可以,就愉快地打游戏去了,多年以后我才知道MTU的重要性。
Maximum Transmission Unit,缩写MTU,中文名是:最大传输单元。
从下面这个表格中可以看到,在7层网络协议中,MTU是数据链路层的概念。MTU限制的是数据链路层的payload,也就是上层协议的大小,例如IP,ICMP等。
举一个最简单的场景,你在家用自己的笔记本上网,用的是路由器,路由器连接电信网络,然后访问了 www.baidu.com ,从你的笔记本出发的一个以太网数据帧总共经过了以下路径:
其中,每个节点都有一个MTU值,如下:
假设现在我把笔记本的MTU最大值设置成了1700,然后发送了一个超大的ip数据包(2000),这时候在以外网传输的时候会被拆成2个包,一个1700,一个300,然后加上头信息进行传输。
路由器接收到了一个1700的帧,发现大于自己设置的最大值:1500,如果IP包DF标志位为1,也就是不允许分包,那么路由器直接就把这个包丢弃了,根本就不会到达电信机房,也就到不了服务器了,所以,到这里我们就会发现,MTU其实就是在每一个节点的管控值,只要是大于这个值的数据帧,要么选择分片,要么直接丢弃。
其实一个标准的以太网数据帧大小是:1518,头信息有14字节,尾部校验和FCS占了4字节,所以真正留给上层协议传输数据的大小就是:1518 - 14 - 4 = 1500,那么,1518这个值又是从哪里来的呢?
假设MTU值和IP数据包大小一致,一个IP数据包的大小是:65535,那么加上以太网帧头和为,一个以太网帧的大小就是:65535 + 14 + 4 = 65553,看起来似乎很完美,发送方也不需要拆包,接收方也不需要重组。
那么假设我们现在的带宽是:100Mbps,因为以太网帧是传输中的最小可识别单元,再往下就是0101所对应的光信号了,所以我们的一条带宽同时只能发送一个以太网帧。如果同时发送多个,那么对端就无法重组成一个以太网帧了,在100Mbps的带宽中(假设中间没有损耗),我们计算一下发送这一帧需要的时间:
在100M网络下传输一帧就需要5ms,也就是说这5ms其他进程发送不了任何数据。如果是早先的电话拨号,网速只有2M的情况下:
100ms,这简直是噩梦。其实这就像红绿灯,时间要设置合理,交替通行,不然同一个方向如果一直是绿灯,那么另一个方向就要堵成翔了。
假设MTU值设置为100,那么单个帧传输的时间,在2Mbps带宽下需要:
时间上已经能接受了,问题在于,不管MTU设置为多少,以太网头帧尾大小是固定的,都是14 + 4,所以在MTU为100的时候,一个以太网帧的传输效率为:
写成公式就是:( T - 14 - 4 ) / T,当T趋于无穷大的时候,效率接近100%,也就是MTU的值越大,传输效率最高,但是基于上一点传输时间的问题,来个折中的选择吧,既然头加尾是18,那就凑个整来个1500,总大小就是1518,传输效率:
100Mbps传输时间:
2Mbps传输时间:
总体上时间都还能接受
为什么是64呢?
这个其实和以太网帧在半双工下的碰撞有关,感兴趣的同学可以自行去搜索。
路由器默认值大多都是1500,理论上是没有问题的,那为什么我玩游戏的时候改成1480才能流畅呢?原因在于当时我使用的是ADSL上网的方式,ADSL使用的PPPoE协议。
PPPoE协议介于以太网和IP之间,协议分为两部分,PPP( Point to Point Protocol )和oE( over Ethernet ),也就是以太网上的PPP协议,而PPPoE协议头信息为:
这里总共是48位,也就是6个字节,那么另外2个字节是什么呢?答案是PPP协议的ID号,占用两个字节,所以在PPPoE环境下,最佳MTU值应该是:1500 - 4 - 2 = 1492。
当时我的上网路径如下:
我在路由器进行拨号,然后PC连接路由器进行上网。
问题就出在路由器拨号,如果是PC拨号,那么PC会进行PPPoE的封装,会按照MTU:1492来进行以太网帧的封装,即使通过路由器,路由器这时候也只是转发而已,不会进行拆包。
而当用路由器拨号时,PC并不知道路由器的通信方式,会以网卡的设置,默认1500的MTU来进行以太网帧的封装,到达路由器时,由于路由器需要进行PPPoE协议的封装,加上8字节的头信息,这样一来,就必须进行拆包,路由器把这一帧的内容拆成两帧发送,一帧是1492,一帧是8,然后分别加上PPPoE的头进行发送。
平时玩游戏不卡,是因为数据量路由器还处理得过来,而当进行群怪AOE的时候,由于短时间数据量过大,路由器处理不过来,就会发生丢包卡顿的情况,也就掉线了。
帖子里面提到的1480,猜测可能是尽量设小一点,避免二次拨号带来的又一次PPPoE的封装,因为时间久远,没办法回到当时的场景再去抓包了。
1518这个值是考虑到传输效率以及传输时间而折中选择的一个值,并且由于目前网络链路中的节点太多,其中某个节点的MTU值如果和别的节点不一样,就很容易带来拆包重组的问题,甚至会导致无法发送。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)