LINUX MTU

最近在分析彩信发送速度方面的问题,因此对MTU值进行了进一步研究,以下是我个人对MTU的理解和总结:

 

1. MTU( maximum transmission unit )是设置在网卡上的配置值,它决定了经过网卡传输的数据包的最大尺寸。 

2. 数据包在网络上传输的时候,会经过许多的路由器和网关,这些设备上都有MTU设置,如果数据包太大,经过设备的时候还会被拆分。因此PMTU(路径最大传输单元, 它等于路径上每一跳的MTU之中的最小值)值对数据传输速度影响更大。Internet网中PMTU一般为 576B  

3. 在TCP建立的时候终端会与服务器协商MSS( maximum segment size ),它是TCP数据包每次能够传输的最大数据分段。它与MTU的关系是:MTU = MSS + 20 (TCP header length)+ 20 (IP header length)。MSS 协商结果(两端支持的MSS的最小值)才最终决定终端发出的数据包大小。 

4. 在现网中,经抓包发现WAP网关返回的MSS值为1410,所以为了追求最大的性能,我们设置的MTU值应当不小于1450 (1410 + 20 +20),所以当前我们建议的经验值为 1460 B 。 

5. 由于Internet网中PMTU一般为 576B, 所以终端设置的MTU应当不小于它,但是设置大了也不一定能够提升传输效率。 

以下链接供参考: 
http://en.wikipedia.org/wiki/Maximum_transmission_unit 
http://www.cnpaf.net/Class/RFC/200408/977.html


默认的ANDROID系统中不带BUSYBOX,所以无法用BUSYBOX IFCONFIG来查看修改MTU值。其实网卡的MTU值是保存在/sys/class/net/eth0/mtu文件中,所以可以通过查看和修改文件达到修改MTU的目的:

以下以查看和修改eth0为例:

1. 查看MTU值

# cat /sys/class/net/eth0/mtu

2.  修改MTU值

# echo "1460" > /sys/class/net/eth0/mtu 

顺便说一句,在/sys/class/net/eth0/目录中还有很多文件,对应了eth0的各个参数,可以手动的修改里面的值达到配置网卡参数的目的。

你可能感兴趣的:(linux,tcp,header,internet,终端,路由器)