MTU值是指一种通信协议的某一层上面所能通过的最大数据报大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。
MTU值可以这样设置(Windows平台下):
运行regedit
打开:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
Interfaces下有多个子项,每个子项对应一个网卡。请按如下方法选择网卡:
A.确定本机用来连接Internet的网卡或拨号连接的IP,如192.168.0.19;
B.用鼠标点击Interfaces上的子项,查看键值列表中的IPAddress项;
C.如果IPAddress的键值与A中的IP相同,即192.168.0.19,则该子项就是要找的网卡;
D.进入该子项,在右边的窗口里按鼠标右键,选择“新建”->“DWORD 值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口,填入MTU的值(一般为十进制的1480)。
填写前请先把基数设为十进制。 设置好后,需要重启机器才能生效。
MTU的主要特点:
因特网协议允许IP分片,这样就可以将数据包分成足够小的片段以通过那些最大传输单元小于该数据包原始大小的链路了。这一分片过程发生在网络层(OSI 模型的第四层,此前词条为传输层:O S I 模型中最重要的一层,这里是根据窗口控制传输,而非MTU。传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络能处理的最大尺寸将较长的数据包进行强制分割。
MTU,即Maximum Transmission Unit(最大传输单元),此值设定TCP/IP协议传输数据报时的最大传输单元。设置合适的MTU值可以解决“部分网站打不开”、“上网速度慢”等问题,并且可以适当提升上网速度。
设置多大的MTU值取决于你的上网方式,不同的上网方式支持不同的MTU,下面列出了一些上网方式的MTU值:
EtherNet(一般上网方式,默认值):1500
PPPoE/ADSL:1492
Dial Up/Modem:576
设置MTU值:
1. 在 『开始』>『运行』中,键入regedit,点确定;
2. 选择『HKEY_Local_Machine』>『SYSTEM』>『CurrentControlSet』>『Services』>『Tcpip』>『Parameters』>『interface』;
3. 在 interface 底下可能有很多的选项,你一个一个的去看,会有一个选项与你的网卡的 IP 相同,那个就是你要挑选的选项啦!然后同样的在该选项上选择『编辑』>『新建』>『DWORD值』之后,建立一个名为『MTU』的DWORD,然后双击修改,选择十进制,填入合适 MTU 值,确定。
设置多大的MTU值取决于你的上网方式,不 同的上网方式支持不同的MTU,下面列出了一些上网方式的MTU值:EtherNet(一般上网方式,默认值):1500PPPoE/ADSL:1492 Dial Up/Modem:576问题一:知道了我的上网方式,如何设置MTU值?1. 在『开始』>『运行』中,键入regedit,点确定;2. 选择『HKEY_Local_Machine』>『SYSTEM』>『CurrentControlSet』>『Services』>『Tcpip』>『Parameters』>『interface』;3. 在 interface 底下可能有很多的选项,你一个一个的去看,会有一个选项与你的网卡的 IP 相同,那个就是你要挑选的选项啦!然后同样的在该选项上选择『编辑』>『新建』>『DWORD值』之后,建立一个名为『MTU』的 DWORD,然后双击修改,选择十进制,填入合适 MTU 值,确定!大功告成!问题二:我不知道自己的上网方式,如何确定MTU值呢?ping -f -l 1500 127.0.0.1 C:\WINDOWS>ping -f -l 1500 127.0.0.1Pinging 127.0.0.1 with 1500 bytes of data: Packet needs to be fragmented but DF set.Packet needs to be fragmented but DF set. Packet needs to be fragmented but DF set. Packet needs to be fragmented but DF set. Ping statistics for 127.0.0.1: Packets: Sent = 4, Received = 0, Lost = 4 (100% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms上面的式子中,-l 是 L 的小写(不是 1 喔),1500 是我们要测的 MTU 值,结果出现了 Packet needs to be fragmented but DF set. 这个东西,那表示MTU值太大了,你需要更小的 MTU 值才行!好啦!那假设我们使用 1464 来测试时:C:\WINDOWS>ping -f -l 1464 127.0.0.1Pinging 127.0.0.1 with 1464 bytes of data: Reply from 127.0.0.1: bytes=1464 time=10ms TTL=128Reply from 127.0.0.1: bytes=1464 time<10ms TTL=128Reply from 127.0.0.1: bytes=1464 time<10ms TTL=128 Reply from 127.0.0.1: bytes=1464 time<10ms TTL=128 Ping statistics for 127.0.0.1:Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 10ms, Average = 2ms结果出现了回应了!这表示这一个 MTU 值是可行的!不过,强烈建议找出可行的最大 MTU 值!这样一来,在设定的时候,才可以达到最佳的网速!找出 MTU 值:利用上面这个方法找到的数值还不是 MTU 喔!由于一些封包上面的问题,上面这个值再加上 28 才是我们所需要的 MTU 值!所以,在上面的例子中,我们所需要的 MTU 值是 1464+28=1492!一般来讲,设计好本机的MTU值,可以解决部分网站打不开的情况,但是如果你的共享主机或路由器的MTU设置有问题,有时问题仍然存或,或者出现网速过慢的情况。合理的设置路由器与本机的MTU值,就可以完全解决上述问题,使上网速度达到最大化。1. 基础知识我们知道, 数据在网络上传输时, 要经过一段一段的链路。当数据从某一段链路的一端传到另一端的过程中, 需要考虑的是数据链路层协议, 在这一层, 我们观察到的数据包(PDU: Packet Data Unit)称为MAC帧(MAC Frame), 不同的数据链路层协议, MAC Frame的格式也不同, 但大致都会有目标MAC地址、源MAC地址、长度/类型、数据(有效载荷: Payload)这几个字段。对以太网而言, 采用的是数据链路层协议是基于IEEE 802.2/802.3, 但与IEEE 802.2/802.3略有区别.查一下802.3协议中MAC帧格式部分, 就会发现上面提到的MAC帧中的数据(有效)字段的长度范围是46-1500个字节. 那么, 当链路层的上一层-IP层所要传输的IP数据包(包括IP Header)大小超过这个长度范围时, IP数据包就必须分成多片传输, 这个过程就是分片(Fragmentating), 其中分割出来的每一个片断就是一个Fragment.2. MTU与Fragment上述链路层这种对超过其协议定义的最大数据字段长度时就进行分片的特性, 就称为MTU(Maximum Transmission Unit). 不同链路层协议, MTU值也不同, 我们已经知道, 对以太网, MTU是1500字节, 而对令牌环(Token Ring)网, MTU是4482字节.3. IP数据包中与分片相关的字段(Fragmentation Fields)IP数据包在封装时, 在IP头的第8-9个字节(16bit)中, 存放关于分片的信息. 其中前3个bit表示分片的状态, 后13个bit表示当前片断在分片之前的整块待封装的数据包中的偏移量(因为IP数据包的最大可能长度为16bit, 而这13bit无法表示16bit的范围, 故实际使用时, 偏移量的计算是用这13bit的值乘8(3bit), 以实现表示16bit的范围).3.1 不分片标记(Don’t Fragment Flag)IP头第8-9字节从左往右的第2bit表示当前IP数据包是(1)否(0)不分片, 缺省值为0, 就是不不分片, 即允许分片. 因为默认允许分片, 所以我们平常使用Ping命令时, 加参数-l 65500 Ping一台机器也不会有问题.3.2 是否有后续分片标记(More Fragments Flag)IP头第8-9字节从左往右的第3bit表示当前数据包里的数据是否为某块数据的最后一个分片,