ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 合理设置MTU,提升下载速度

合理设置MTU,提升下载速度

原创 Linux操作系统 作者:huannancun2008 时间:2010-12-15 21:12:13 0 删除 编辑
可能很少有雷友注意过“本机、网络”的“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”然后回车

1.jpg

2、在出现的“命令提示符”窗口中输入“ping -l 1472 -f ”然后回车

含义:

ping:发起一个探测请求;

-l(L的小写):限制探测包大小;

1472:包大小为1472字节;

-f:禁止路由器拆分数据包

:设百度为探测目标

(你问我为什么不用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”

216 条评论
我是win7 64位旗舰版,原来的4M带宽还可以达到400k/s的速度,修改后最快也就是100多了,还原到1500都没有用,现在的留言是刚刚无奈重装系统后达到450K/S后说的话

C:\Users\Administrator>ping -l 1472 -f

正在 Ping [119.75.218.45] 具有 1472 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

119.75.218.45 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

C:\Users\Administrator>ping -l 1472

正在 Ping [119.75.217.56] 具有 1472 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

119.75.217.56 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

如果我输入ping -l 1720 -f
那么会提示需要拆分数据包但是设置 DF。
但是如果把1720改成1470就会提示请求超时(这个时候网络绝对没有断)
1470附近的几个数字都有这样的问题
具体的范围没有测试过
但是改成1464或者小于1464的数字正常
为什么?

F:\>ping -l 1452 -f g.cn

Pinging g.cn [203.208.37.99] with 1452 bytes of data:

Reply from 203.208.37.99: bytes=1452 time=119ms TTL=245
Reply from 203.208.37.99: bytes=1452 time=109ms TTL=244
Reply from 203.208.37.99: bytes=1452 time=124ms TTL=245
Reply from 203.208.37.99: bytes=1452 time=109ms TTL=244

Ping statistics for 203.208.37.99:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 109ms, Maximum = 124ms, Average = 115ms

额额 看见前边的东东觉得挺好 结果最后按照你的方法一查:已经是最大的了……
不用我设置了再嘿^.^

我完全照您说的做
完了之后出现“确定”2字,请问是不是成功了?(win7)

恩,你可以再查看一下修改后的MTU值是多少,就可以确认了。

上当了 修改后网速很不稳定

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>ping-l 1472 -f
‘ping-l’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\Documents and Settings\Administrator>ping -l 1472 -f

Pinging [220.181.6.18] with 1472 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 220.181.6.18:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

C:\Documents and Settings\Administrator>

文是好文,不过,老兄的4M带宽确实不咋的,我的电信4M下载最高达到525KB,一般保持在500KB正负误差5K这样。我奇怪的是我用的是WIN7使用默认设置。

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Owner>ping -l 1472 -f
‘ping’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\Documents and Settings\Owner>“ping -l 1472 -f
‘“ping’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\Documents and Settings\Owner>

操作系统的问题。简单点解决就是重装系统。

能不能不冲装呢。。这是笔记本自带的原装的XP家庭版。。

这个是网卡的功能,不懂就别说,系统不可能更改网卡的参数,以后绝对也不会有。
系统的MTU要你手动调节,现在的百兆网卡都是自动调节的 你可以在你的网卡设置选项上看到。
而如果你的网络提供商的服务MTU 和你系统的MTU不对称 那绝对是要拆包的。

还有小文件在小也是拿数据包衡量的,在网络传输上没有文件一说。它传输的只有数据包。

为什么阳台的图片都这么扭曲、难看的?

你是不是还在用IE6呢?可能是由于PHP或者Html的一些新特性IE6不支持导致的。

貌似此方法不对,正确的方法应该是:1.先修改MTU到一个不可能达到的值,比如3000(参考上文)。2.使用“ping -l 1472 -f out”(而不是需要拆分数据包但是设置 DF。或是Packer needs to be fragmented but DF set.的提示)。3.得到正确值,在修改MTU。
个人观点,觉得即便成功也不会让你个人感觉快多少,总网络的负担可能小很多

“请求超时、time out”是指包成功发出,但是因为别的原因没返回(比如防火墙禁止ping之类),这种情况可不是人人都有的。

抱歉,两条分开了,重新发过
Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Windows\system32>netsh interface ipv4 set subinterface “本地连接” mtu=1492 st
ore=persistent
确定。

C:\Windows\system32>ping -l 1472 -f

正在 Ping [202.108.22.5] 具有 1472 字节的数据:
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。

202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

C:\Windows\system32>netsh interface ipv4 set subinterface “本地连接” mtu=3000 st
ore=persistent
确定。

C:\Windows\system32>ping -l 1472 -f

正在 Ping [202.108.22.5] 具有 1472 字节的数据:
来自 202.108.22.5 的回复: 字节=1472 时间=37ms TTL=51
来自 202.108.22.5 的回复: 字节=1472 时间=39ms TTL=51
来自 202.108.22.5 的回复: 字节=1472 时间=37ms TTL=51
来自 202.108.22.5 的回复: 字节=1472 时间=37ms TTL=51

202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 37ms,最长 = 39ms,平均 = 37ms

C:\Windows\system32>

这个情况可能是之前你的系统默认值不足1500导致的。你手动将MTU从3000设成1500,应该也可以ping通。

所以我说你说的不对啊,这样子岂不是1500以上的找你的方法都测试不出来?或者还有其他的情况

Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\可乐冰>ping -l 1472 -f

正在 Ping [202.108.22.5] 具有 1472 字节的数据:
来自 202.108.22.5 的回复: 字节=1472 时间=42ms TTL=51
来自 202.108.22.5 的回复: 字节=1472 时间=43ms TTL=51
来自 202.108.22.5 的回复: 字节=1472 时间=41ms TTL=51
来自 202.108.22.5 的回复: 字节=1472 时间=42ms TTL=51

202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 41ms,最长 = 43ms,平均 = 42ms

C:\Users\可乐冰>ping -l 1464 -f

正在 Ping [202.108.22.5] 具有 1464 字节的数据:
来自 202.108.22.5 的回复: 字节=1464 时间=37ms TTL=51
来自 202.108.22.5 的回复: 字节=1464 时间=42ms TTL=51
来自 202.108.22.5 的回复: 字节=1464 时间=38ms TTL=51
来自 202.108.22.5 的回复: 字节=1464 时间=40ms TTL=51

202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 37ms,最长 = 42ms,平均 = 39ms

C:\Users\可乐冰>ping -l 1465 -f

正在 Ping [202.108.22.5] 具有 1465 字节的数据:
来自 202.108.22.5 的回复: 字节=1465 时间=38ms TTL=51
来自 202.108.22.5 的回复: 字节=1465 时间=38ms TTL=51
来自 202.108.22.5 的回复: 字节=1465 时间=38ms TTL=51
来自 202.108.22.5 的回复: 字节=1465 时间=38ms TTL=51

202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 38ms,最长 = 38ms,平均 = 38ms

C:\Users\可乐冰>ping -l 1470 -f

正在 Ping [202.108.22.5] 具有 1470 字节的数据:
来自 202.108.22.5 的回复: 字节=1470 时间=37ms TTL=51
来自 202.108.22.5 的回复: 字节=1470 时间=38ms TTL=51
来自 202.108.22.5 的回复: 字节=1470 时间=39ms TTL=51
来自 202.108.22.5 的回复: 字节=1470 时间=38ms TTL=51

202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 37ms,最长 = 39ms,平均 = 38ms

C:\Users\可乐冰>ping -l 1450 -f

正在 Ping [202.108.22.5] 具有 1450 字节的数据:
来自 202.108.22.5 的回复: 字节=1450 时间=40ms TTL=51
来自 202.108.22.5 的回复: 字节=1450 时间=38ms TTL=51
来自 202.108.22.5 的回复: 字节=1450 时间=37ms TTL=51
来自 202.108.22.5 的回复: 字节=1450 时间=36ms TTL=51

202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 36ms,最长 = 40ms,平均 = 37ms

C:\Users\可乐冰>ping -l 1500 -f

正在 Ping [202.108.22.5] 具有 1500 字节的数据:
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。

202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

C:\Users\可乐冰>ping -l 1572 -f

正在 Ping [202.108.22.5] 具有 1572 字节的数据:
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。
来自 192.168.0.44 的回复: 需要拆分数据包但是设置 DF。

202.108.22.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24398307/viewspace-681927/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: java打包exe文件
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-12-02

  • 博文量
    9
  • 访问量
    15264