MTU 概念与设置

  最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据报大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。

因特网协议允许IP分片,这样就可以将数据报分成足够小的片段以通过那些最大传输单元小于该数据报原始大小的链路了。这一分片过程发生在IP层(OSI模型的第三层,即网络层),它使用的是将分组发送到链路上的网络接口的最大传输单元的值。原始分组的分片都被加上了标记,这样目的主机的IP层就能将分组重组成原始的数据报了。

在因特网协议中,一条因特网传输路径的“路径最大传输单元”被定义为从源地址到目的地址所经过“路径”上的所有IP跳的最大传输单元的最小值。或者从另外一个角度来看,就是无需进一步分片就能穿过这条“路径”的最大传输单元的最大值。

RFC 1191描述了“路径最大传输单元发现方法”,这是一种确定两个IP主机之间路径最大传输单元的技术,其目的是为了避免IP分片。在这项技术中,源地址将数据报的DF(Don't Fragment,不要分片)位置位,再逐渐增大发送的数据报的大小——路径上任何需要将分组进行分片的设备都会将这种数据报丢弃并返回一个“数据报过大”的ICMP响应到源地址——这样,源主机就“学习”到了不用进行分片就能通过这条路径的最大的最大传输单元了。

在网络介质的传输单位中,MTU即一个数据包的最大字节数是有限制的.如果单位超过了网络媒体所能负荷的大小,除非操作系统支持数据包分片,否则数据包无法传递.如果数据包的大小与最大传输单元无法配合,导致数据包传送时不停的进行分片,将导致网络传输效能下降.同时也造成了连接不上某些网站.

所以网卡的MTU设置最好能够针对网络接口进行最优化.

如果客户端无法浏榄某些网站或无法发送邮件,这样的问题常常与MTU的数值不正确有关.一般而言,MTU在网卡(ENTERNET)的默认值为1500,其它的接口如下所示:

PPPoE(ADSL):1492
Dial-up(model):576

默认的网络接口MTU是1500,而PPPoE使用的是1492,MTU的要求不同,所以有些数据无法正确传输.一般调整客户端MTU值,就可以解决这一问题,通过调整MTU,也可以提高网络网络效率.所以这个时候就要修改MTU值

找出MTU值

  由于MTU与Router具有很大的关系,通常在客户端对Router(就是NAT主机,可能是LINUX,也可能是WINDOWS)进行MTU的检测.

Windows系统上的检测
1.进入DOS命令提示符

2.输入ping -f -l <bytes> IP
如:ping -f -l 1500 192.168.1.2

bytes是本机送出去的数据包大小,IP是GateWay的IP,使用-f,所以数据包没有办法重新组合.

如果结果表明出现响应了,就表示这个MTU是可行的,不过建议找出可行的最大MTU值,就可以达到最优的网络传输.

3.MTU值的计算

如ping -f -l 1464 192.168.1.2,找到的数据是数据包的大小,但每个数据包都具有包头,这个包头部分占去28个字节,所以最终的MTU数值其实是:1464+28=1492.

Linux系统检测

在终端输入:ping -c <number> -M do -s <bytes> IP

如果发现数值为1472,那么MTU=1472+28=1500

修改MTU值

windows98

修改注册表:HKEY_Local_Macchine>System>CurrentControlSet>Services>Class>NetTrans>000n
最后一个n是数字,看看下面有没有网卡的相关信息,如果有,在选择的网卡接口后按下"编辑">"新建">"选择新增DWORD值",将新增的项命名为MaxMTM,并右击选择"修改",选中"十进制",输入找到的MTU值,如:1492.

windows 2000
  选择: HKEY_Local_Macchine>System>CurrentControlSet>Services>Tcpip>Parameters>interface
在下面有多个接口,会有一个与网卡设置相同的接口,在选择的网卡接口后按下"编辑">"新建">"选择新增DWORD值",将新增的项命名为MTU,并右击选择"修改",选中"十进制",输入找到的MTU值.

Linux

使用ifconfig加mtu参数即可:
ifconfig eth0 mtu 1500:就可以了

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据