1:什么是MTU
引用自百度百科:
最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。
是包或帧的最大长度,一般以字节记。如果MTU过大,在碰到路由器时会被拒绝转发,因为它不能处理过大的包。如果太小,因为协议一定要在包(或帧)上加上包头,那实际传送的数据量就会过小,这样也划不来。大部分操作系统会提供给用户一个默认值,该值一般对用户是比较合适的。
MTU 平时我们并不需要设置。数据太大,系统会自动帮你按照默认值分包发送,不需要手动设置。但你可以查询这个值。
UDP 包的大小就应该是 1500 – IP头(20) – UDP头(8) = 1472(BYTES)
TCP 包的大小就应该是 1500 – IP头(20) – TCP头(20) = 1460 (BYTES)
注:PPPoE所谓PPPoE就是在以太网上面跑“PPP”。随着宽带接入(这种宽带接入一般为Cable Modem或者xDSL或者以太网的接入),因为以太网缺乏认证计费机制而传统运营商是通过PPP协议来对拨号等接入服务进行认证计费的,所以引入PPPoE。PPPoE导致MTU变小了以太网的MTU是1500,再减去PPP的包头包尾的开销(8Bytes),就变成1492。不过目前大多数的路由设备的MTU都为1500。
2:Ping测试一下
命令:ping -f -l 1473 192.168.5.1
正在 Ping 192.168.5.1 具有 1473 字节的数据:
需要拆分数据包但是设置 DF。
需要拆分数据包但是设置 DF。
命令:ping -f -l 1472 192.168.5.1
正在 Ping 192.168.5.1 具有 1472 字节的数据:
来自 192.168.5.1 的回复: 字节=1472 时间=6ms TTL=64
来自 192.168.5.1 的回复: 字节=1472 时间=10ms TTL=64
ping 的参数
-f 在数据包中设置“不分段”标记(仅适用于 IPv4)。 //按照 -l 给的数值分包。
-l 发送缓冲区大小。 //设置数据包大小
第一次命令的意思是每个包 1473 大小,不分包。系统回复:最大1472,你这1473我发不了,拒绝
第二次则将 MTU 值设置为 1472 ,还是不分包,但是系统可以接受这个数值,就进行了数据传输。
此处说明系统能发送的最大数据包是 1472 (最后发送前,还要加上一些身份信息 28 byte,实际上应为 1500 )