早期上网的时候,当我们连上某些网站时总会连接超时而断线,然后某位大神说把MTU值改为1472就OK了!什么原因呢?
通过MAC封装的定义我们知道标准以太网数据帧所能传送的数据量最大是1500bytes,这个值就是所说的MTU(Maximun Transmission Unit最大传输单元)我们知道IP数据包最大可达65535byets,这可比MTU值大得多了,但数据包是可以拆解的,然后才能放到MAC去,最后数据包到目的地后再由主机组装回来就行了,所以说如果MTU值够大的话就可以减少IP数据包拆解的次数,从而数据包与数据包传送之间的等待时间(96bit time)就减少了!这时你会想那把MTU值尽可能改大不就行了么!如Gigabit以太网对Jumbo frame的支持,定义到9000bytes。MTU值也改成9000bytes,但事实上你无法确认所有的网络设备都是那么大啊!如果9000bytes数据包通过一个不支持Jumbo frame的网络设备时有些网络设备(如Switch/Router)会主动重组再进行传送,有些则可能直接回报这个数据包无效而丢弃,这就惨了!所以说这种情况仅能在内部网络环境中实现!
主机上打开命令窗口输入:ping -f -l 1472 网关
为啥是1472因为数据包头占28个字节,一般都是1472;你可以在1472左右试试看输出的结果。
如何修改本机的MTU
windows系统,打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces,对应有好几个子项一个个打开看找到对应的IPAddress是主机IP,然后右击该子项新建DWORD值输入名称为MTU,然后再双击打开写入MTU值就可以了,之后重启机器生效!
win7系统,管理员权限运行CMD然后使用netsh interface ipv4 show subinterfaces命令看看MTU;使用netsh interface ipv4 set subinterface "本地连接" mtu=1000 store=persistent来修改就可以了。
Linux系统,得root权限,ifconfig eth0 mtu 1472 这个命令就可以了。