windowsmtu设置

windowsmtu设置

浏览次数:
信息来源: 用户投稿
更新日期: 2026-03-10
文章简介

最近在设置一款国外VPS的时候,能够连上,可是不能够使用浏览器上网,后来发现问题居然是MTU错误,重新设置后就可以上网了。今天我就说说MUT是怎么回事,我们在国外VPS中有可能会用到。 MTU是Ma

2025阿里云双十一服务器活动

最近在设置一款国外VPS的时候,能够连上,可是不能够使用浏览器上网,后来发现问题居然是MTU错误,重新设置后就可以上网了。今天我就说说MUT是怎么回事,我们在国外VPS中有可能会用到。

MTU是MaximumTransmissionUnit的缩写,中文名是:最大传输单元。

我们先看下网络中注明的7层协议。

如果上面的图你觉得不好看,我们看看下面的表格:

文件传输,电子邮件,文件服务,虚拟终端

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

数据格式化,代码转换,数据加密

解除或建立与别的接点的联系

IP,ICMP,RIP,OSPF,BGP,IGMP

传输有地址的帧以及错误检测功能

SLIP,CSLIP,PPP,ARP,RARP,MTU

以二进制数据形式在物理媒体上传输数据

ISO2110,IEEE802,IEEE802.2

从上面的表格中可以看到,在7层网络协议中,MTU是数据链路层的概念。MTU限制的是数据链路层的payload,也就是上层协议的大小,例如IP,ICMP等。

举一个最简单的场景,你在家用自己的笔记本上网,用的是路由器,路由器连接电信网络,然后访问了www.baidu.com,从你的笔记本出发的一个以太网数据帧总共经过了以下路径:

笔记本->路由器->电信机房->服务器

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

1500    1500              1500  

  笔记本->路由器->电信机房 ->服务器

假设现在我把笔记本的MTU最大值设置成了1700,然后发送了一个超大的ip数据包(2000),这时候在以外网传输的时候会被拆成2个包,一个1700,一个300,然后加上头信息进行传输。

1700    1500              1500  

  笔记本->路由器->电信机房 ->服务器

路由器接收到了一个1700的帧,发现大于自己设置的最大值:1500,如果IP包DF标志位为1,也就是不允许分包,那么路由器直接就把这个包丢弃了,根本就不会到达电信机房,也就到不了服务器了,所以,到这里我们就会发现,MTU其实就是在每一个节点的管控值,只要是大于这个值的数据帧,要么选择分片,要么直接丢弃。

其实一个标准的以太网数据帧大小是:1518,头信息有14字节,尾部校验和FCS占了4字节,所以真正留给上层协议传输数据的大小就是:1518-14-4=1500,那么,1518这个值又是从哪里来的呢?

假设取一个更大的MTU值会怎么样?

假设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值既然大了不行,那把MTU的值设置小一点可以么?

windowsmtu设置

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

时间上已经能接受了,问题在于,不管MTU设置为多少,以太网头帧尾大小是固定的,都是14+4,所以在MTU为100的时候,一个以太网帧的传输效率为:

写成公式就是:(T-14-4)/T,当T趋于无穷大的时候,效率接近100%,也就是MTU的值越大,传输效率最高,但是基于上一点传输时间的问题,来个折中的选择吧,既然头加尾是18,那就凑个整来个1500,总大小就是1518,传输效率:

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

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

至于MUT的值最少是64,这个值是因为和以太网帧在半双工下的碰撞有关,具体这里就不展开了。

玩游戏,有可能你把MTU改了就不卡了

路由器默认值大多都是1500,理论上是没有问题的,那为什么我玩游戏的时候改成1480才能流畅呢?原因在于当时我使用的是ADSL上网的方式,ADSL使用的PPPoE协议。

PPPoE协议介于以太网和IP之间,协议分为两部分,PPP(PointtoPointProtocol)和oE(overEthernet),也就是以太网上的PPP协议,而PPPoE协议头信息为:

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

这里总共是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值如果和别的节点不一样,就很容易带来拆包重组的问题,甚至会导致无法发送。

下面我们就说一说LinuxVPS和WindowsVSP的值怎样修改。

因为Linux的版本众多,这里主要说下Centos6和Centos7的设置。

Centos6MTU值的修改只需要输入如下命令就可以了:

ifconfigeth0mtu这里填写MTU的值

Centos7MTU值修改需要修改文件,输入如下命令:

vi/etc/sysconfig/network-scripts/ifcfg-eth0

MTU="这里填写MTU的值"

保存后输入如下命令重启网卡生效就可以了。

1、以管理员身份运行命令行

2、在命令提示符中输入如下命令,按下回车键查看当前的MTU值

netshinterfaceipv4showsubinterfaces

接着按下面格式输入下面的命令,然后按下回车键:

netshinterfaceipv4setsubinterface"连接名"mtu=这里填写MTU的值store=persistent

比如用前面的例子就应该像下面这样写:

netshinterfaceipv4setsubinterface"WLAN"mtu=1458 store=persistent

出现“确定”提示则说明修改完成。

以上就是关于MTU的一些介绍,并介绍了LinuxVPS和WindowsVPS修改MTU的方法,希望可以帮助到有需要的朋友。

标签:
了解哪些主机游戏有香港服务器(什么游戏有港服)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!