可能很少有雷友注意过“本机、网络”的“MTU”值对自己网络性能产生的影响。对于追求更快的下载速度来说,MTU值设置不当,就仿佛穿着高跟鞋跑步一般。
MTU是什么?
“MTU=最大传输单元 单位:字节”
我们在使用互联网时进行的各种网络操作,都是通过一个又一个“数据包”传输来实现的。而MTU指定了网络中可传输数据包的最大尺寸,在我们常用的以太网中,MTU是1500字节。超过此大小的数据包就会将多余的部分拆分再单独传输。
为什么MTU影响网络性能?
让我们看看这个情况,在Windows系统中,默认MTU值也是1500字节,但是“不同的接入方式、不同地区的网络运营商、不同的路由器”有着不同的MTU设置。
例如:ADSL接入时MTU为1492字节,假设A需要给B传输3000字节数据,如果整个传输过程中各个环节的MTU都是1500,那么2个数据包就可以传输完成。可是偏偏这时ADSL接入方式的MTU是1492字节,数据包就因为这个MTU差异额外拆分为3个(为了便于理解,暂时不将“数据包报头”纳入考虑范围)
显然这额外增加了需要传输的数据包数量,而且拆包组包的过程也浪费了时间。如果从本地到网络采用一致的MTU就可以避免额外拆包。
对下载速度的影响会有多大?
就拿伊文家里的线路质量不太好的电信4M带宽为例,将操作系统的MTU值改为1492,再将路由器的MTU值从1460改为1492后,下载速度从原本的435KB/s提升到了450KB/s,提升了15KB/s。电信的带宽检测工具的检测结果也从4.09M提升到了4.19M。
我该如何合理设置MTU呢?
更快的下载速度,对于迅雷的用户来说,显然很有意义。可是MTU设置不能一个值天下通用,所以我们讲究合理设置MTU。
那么什么情况下的MTU值才是合理的呢?
我们先看看什么是不合理的:
1、本地MTU值大于网络MTU值时,本地传输的数据包过大导致网络会拆包后传输,不但产生额外的数据包,而且消耗了“拆包、组包”的时间。
2、本地MTU值小于网络MTU值时,本地传输的数据包可以直接传输,但是未能完全利用网络给予的数据包传输尺寸的上限值,传输能力未完全发挥。
这样我们就知道,所谓合理的设置MTU值,就是让本地的MTU值与网络的MTU值一致,既能完整发挥传输性能,又不让数据包拆分。
接下来最重要的就是要找出对于你的网络环境来说MTU多少才是合理的。
方法如下:
1、按Win+R组合键,调出“运行”菜单,输入“cmd”然后回车
2、在出现的“命令提示符”窗口中输入“ping -l 1472 -f www.baidu.com”然后回车
含义:
ping:发起一个探测请求;
-l(L的小写):限制探测包大小;
1472:包大小为1472字节;
-f:禁止路由器拆分数据包
www.baidu.com:设百度为探测目标
(你问我为什么不用Google做目标?考虑到Google时不时被墙,还是算了吧。。)
3、这时有2种情况:
(1)、如果收到了回复,那么说明你的网络允许最大MTU值就是1500字节,与系统默认值相同,只需要将路由器的MTU值也设置为1500即可;
(2)、如果出现需要拆分数据包但是设置 DF。或是Packer needs to be fragmented but DF set.的提示,那就说明数据包大小超过了网络限定的MTU大小。需要减小探测包大小再次尝试。(为了截效果图,我将探测包改为1473了)
4、按“上箭头”恢复刚才输入的命令,然后以5为跨度减小包大小为1467字节,再次回车探测。
5、这时同样也有两种可能:
(1)、如果有返回,说明数据包小于MTU限制,就将包大小+3再次探测,如果+3之后没有返回,那就以1为跨度降低数据包大小进行探测。
(2)、如果还是没有返回,就继续以5为跨度减小包大小,直至有返回后进行5(1)中的操作。
6、直至你发现数据包-1后,有了返回,就说明你探测到了MTU允许的准确数据包大小。(例如从1465降低到1464就有了返回,那么允许的数据包大小就是1464)
7、不过上面得到的值还不能设置为操作系统或路由器的MTU,你找到的数据包大小需要加上28字节的“数据包报头”,才是完整的数据包尺寸。
(例如:探测到的数据包大小是1464,那么加上28字节,最终MTU=1492字节)
8、最后,只需要将路由器和操作系统中的MTU值设置为你得出的结果即可。
路由器设置方法见路由器说明书!建议使用“Windows优化大师、超级兔子魔法设置、鲁大师”等软件修改操作系统的MTU。
以下是较复杂的方法:
(1)、XP操作系统设置方法:
1、 按Win+R组合键,调出“运行”菜单,输入regedit,然后回车;
2、 选择“HKEY_Local_Machine>SYSTEM>CurrentControlSet>Services>Tcpip>Parameters>interface”;
3、在 interface 中下可能有很多项,需要逐个观察键值,会有一个项与你的网卡IP一致,选中该项;
4、然后在该项上点击右键,选择“编辑>新建>DWORD值”,然后在右侧将其命名为“MTU”;
5、右键点击MTU,选择“修改”,在弹出的窗口中选择“十进制”,填入你得出的合理MTU值即可。
(2)、Vista、Win7操作系统设置方法:
1、进入系统盘:\Windows\System32\找到cmd.exe,右键“以管理员身份运行”;
2、在出现的“命令提示符”窗口中输入“netsh interface ipv4 show subinterfaces”并回车来查看当前的MTU值
3、接下来输入“netsh interface ipv4 set subinterface "需修改的连接名" mtu=你得出的合理值 store=persistent”并回车即可
例如:“netsh interface ipv4 set subinterface "本地连接" mtu=1492 store=persistent”
Oarer
发表于 2010年09月08日 20:48
再说声感谢!
Oarer
发表于 2010年09月08日 20:48
强文 ,学习了
零の轨迹
发表于 2010年09月08日 20:36
天翼3G的怎么办???……..W7系统
zncznc
发表于 2010年09月08日 19:19
谢谢 修改成功
103059502
发表于 2010年09月08日 17:57
我的是1464+28=1492。如果我进入192.168.1.1设置可以吗?mtu=1492然后mru是什么?在cmd里,是这样写吗? netsh interface ipv4 set subinterface streamyx mtu=1492 store=persistent
强伊文
发表于 2010年09月08日 21:11
连接名没写。。。
Lemon
发表于 2010年09月08日 17:40
ping -l 1453 -f http://www.baidu.com
显示DF SET
1452 就可以PING了
TIME=51MS TTL=54
是不是设置1452就OK啦?
TTL呢?超级兔子的推荐是64…有32 64 128几个选项
强伊文
发表于 2010年09月08日 21:14
要+28的包头大小。如果你使用正常,TTL值不建议修改。
Q
发表于 2010年09月08日 16:31
我是在学校的宿舍弄,都到1747了还没有,这正常吗
强伊文
发表于 2010年09月08日 16:37
1747吗?应该是减小才对,不是增加啊
Q
发表于 2010年09月08日 16:49
减小我找到了,但是算出来的值和电脑的值是一样的
强伊文
发表于 2010年09月08日 16:53
那就行了。
Q
发表于 2010年09月08日 16:52
计算出来的是1480,而且我本地连接(1480)和宽带连接(1500),没有使用路由器,使用的是交换机
痕
发表于 2010年09月08日 14:42
希望迅雷能弄出简单的傻瓜设置 让大家都能理解
nono
发表于 2010年09月08日 14:38
1372和1400都有收到回复该怎么设置??
klto1
发表于 2010年09月08日 12:14
我输入后 提示中无线网络连接2的MTU是1500 本地连接的MTU是1480 我就是不明白 哪个连接指系统的 哪个连接指路由的?我的MTU已经算好是1480(加28字节以后得出1480)了
强伊文
发表于 2010年09月08日 15:41
你是通过那套网络连接上网的就改哪套。
stupidboy2979
发表于 2010年09月08日 12:03
好麻烦啊,出个工具自动改吧^_^(我承认我很懒)
猫小路
发表于 2010年09月08日 10:18
我家算出来的是1496,但是我家路由最高只能设置1492。。。。怎么办?
强伊文
发表于 2010年09月08日 11:36
设为1492
HIJI
发表于 2010年09月08日 14:06
其实我也是 算出来的是 1496
路由器只能设1492
有谁的路由器能设高于 1492的么??
skyqty
发表于 2010年09月08日 09:13
我ping的结果就只有请求超时
5548125
发表于 2010年09月08日 09:02
我的设置数值在1473时显示 需要拆分数据包但是设置 DF
我的设置数值在1472时显示 请求超时
莫非这个数值时1472—1473之间的小数不成?
怎么回事呀?
强伊文
发表于 2010年09月08日 11:37
那说明就是1472了,只不过数据成功发出了,没有返回而已。
ZeroDream
发表于 2010年09月08日 08:45
1430的MTU值北京联通2M ADSL加上28就是1458
kinglibra
发表于 2010年09月08日 05:12
请问,请求超时是怎么回事?不明白。
win7
发表于 2010年09月08日 02:19
我在win7下测试出宽带的最佳数值是1480 还有一个MyIP的vpn的最佳数值是1400,然后输入netsh interface ipv4 show subinterfaces查看时 这两个连接已经被设置成1480和1400了,以前没有修改过,看来win7进化了,会自动设置了^^
信至
发表于 2010年09月08日 12:46
晕……折腾了半天发现我的系统使用的也已经是最佳值1480了,看来从vista开始系统就已经进化过了。
菲娜
发表于 2010年09月08日 02:08
我试1465时是Packer needs to be fragmented but DF set.试1464时是Request time out.我该怎么办?
强伊文
发表于 2010年09月08日 11:42
就是1464了
菲娜
发表于 2010年09月08日 12:55
谢谢!
xjf
发表于 2010年09月08日 01:25
路由设置是1480,用1452去ping,都是请求超时.1473是包大…
xjf
发表于 2010年09月08日 01:23
我ping不通在1473是包大,后面都是请求超时…..
强伊文
发表于 2010年09月08日 11:43
请求超时说明包发出去了,也就是说小于网络的MTU
iBoy
发表于 2010年09月08日 01:22
我的设为1453的时候是:需要拆分数据包但是设置 DF。数据包完全丢失!
但是设为1452的时候,却出现了“请求超时”,数据包完全丢失!
不知什么原因?
强伊文
发表于 2010年09月08日 11:44
那就是1452了。数据包能够发出,只是没有接到返回包而已。
HR
发表于 2010年09月08日 00:38
我那个MTU本来就有的了“
我编辑数据是1500“
我按照你说的得出的是1451+28=1479
我就编辑成1479吗?
强伊文
发表于 2010年09月08日 11:45
恩,得出的合适值是1479的话最好就改成1479.
脆弱
发表于 2010年09月07日 23:59
为什么我检测出来的值是1452+28是1480但是我改猫和系统的mtu以后访问不了网站只能访问百度。。。。。
强伊文
发表于 2010年09月08日 11:45
那你可以ping别的站点试一试
刚刚从病毒中被拯救出来的电脑
发表于 2010年09月07日 23:42
迅雷和百度也结仇了吗,这不就是传说中的洪水攻击吗?呵呵
lingbo1986
发表于 2010年09月07日 22:06
谢谢,我设置好了,最重要是懂了MTU的意思~~
叽基
发表于 2010年09月07日 21:47
能不能在下载BT时 查看的到 用户啊 健康度什么的啊
木头
发表于 2010年09月07日 20:25
C:\Users\MuTou>ping -l 1465 -f http://www.baidu.com
正在 Ping http://www.a.shifen.com [202.108.22.5] 具有 1465 字节的数据
需要拆分数据包但是设置 DF。
需要拆分数据包但是设置 DF。
需要拆分数据包但是设置 DF。
202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 3,已接收 = 0,丢失 = 3 (100% 丢失),
Control-C
^C
C:\Users\MuTou>ping -l 1464 -f http://www.baidu.com
正在 Ping http://www.a.shifen.com [202.108.22.5] 具有 1464 字节的数据
来自 202.108.22.5 的回复: 字节=1464 时间=39ms TTL=55
来自 202.108.22.5 的回复: 字节=1464 时间=39ms TTL=55
202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 39ms,最长 = 39ms,平均 = 39ms
Control-C
^C
C:\Users\MuTou>ping -l 1465 -f http://www.baidu.com
正在 Ping http://www.a.shifen.com [202.108.22.5] 具有 1465 字节的数据
来自 202.108.22.5 的回复: 字节=1465 时间=39ms TTL=55
来自 202.108.22.5 的回复: 字节=1465 时间=39ms TTL=55
来自 202.108.22.5 的回复: 字节=1465 时间=39ms TTL=55
202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 3,已接收 = 3,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 39ms,最长 = 39ms,平均 = 39ms
这个怎么解释呢?
强伊文
发表于 2010年09月08日 11:48
这个。。。好奇怪啊。每次以1465ping都能通吗?
0xi0ix
发表于 2010年09月07日 19:50
没有路由就不用设置
闪烁
发表于 2010年09月07日 19:12
看不懂啊,请重新编辑下,主要是步骤,和使用那个系统平台,
MP4-25
发表于 2010年09月07日 17:41
请问一下 怎么才能知道自己修改成功了呢
mm
发表于 2010年09月07日 16:14
“例如:ADSL接入时MTU为1492字节,假设A需要给B传输3000字节数据,如果MTU是1500,那么2个数据包就可以传输完成。但MTU为1492时,数据包就得拆分为3个(为了便于理解,暂时不将“数据包报头”纳入考虑范围)”
你觉得说得通吗?网络上的传输难道都是以3000字节为倍数的吗?如果不是那这个拆包理论岂不就是扯淡。
强伊文
发表于 2010年09月07日 16:32
这个情况昨晚已经回复解释过了,只是为了便于理解,因MTU差异导致额外拆包的情况举的例子。不过我还是完善一下吧
tsrc1987
发表于 2010年09月07日 19:52
换个网站就不好使了 比如百度的可以 换成126网站就有一半传输失败
power
发表于 2010年09月08日 00:32
不错不错 受教了
我是一菜鸟
发表于 2010年09月07日 16:03
是不是192.168.1.1打不开就不需要改
强伊文
发表于 2010年09月07日 16:30
不一定是这个IP,这取决于设备中的设置。默认是192.168.0.1
我是一菜鸟
发表于 2010年09月07日 15:57
我只把本地连接和宽带连接的MUT改了,猫是上海贝尔S6307TVb,需要改吗?怎么改?劳驾说一下
强伊文
发表于 2010年09月07日 16:01
不能打开设置界面的话就不用改。
学习了
发表于 2010年09月07日 15:39
我家的vista算出来是1480
用netsh interface ipv4 set subinterface命令查看出来的默认MTU确实1500
是否需要往小里改, 有无实际意义?
强伊文
发表于 2010年09月07日 15:48
有意义,前文说了,本地MTU大于网络MTU时,会产生额外的数据包并消耗拆包组包的时间。。
103059502
发表于 2010年09月07日 15:11
用Windows优化大师如何设置?
sansao
发表于 2010年09月07日 15:03
看起来有点专业呀,能不能出个补丁什么的,打上去就ok了。
随心
发表于 2010年09月07日 14:59
我的只修改了电脑上的MTU值,路又不在我家,会不会有影响
ichck
发表于 2010年09月07日 14:41
我没有路由器,只有电信送的阉割版的中兴ZXV10 H608B宽带猫,修改MTU的选项被屏蔽了,需要破解,就懒得动手了,就不改了,2M带宽,下载速度最快能达到270左右~~~
灰烬
发表于 2010年09月07日 14:35
改了后迅雷下载不稳定了
挡路的
发表于 2010年09月07日 14:25
我的ping到2000多了怎么还通的啊~~?
强伊文
发表于 2010年09月07日 14:41
你没加-f参数吧