问题描述:
在OpenStack平台上的64位Windows7虚拟机,可以ping通百度,但是却无法打开百度网页。
于是,笔者又对其它网址进行的测试,发现淘宝、京东、携程部分网页可以打开,而新浪等等网页依然打不开,瞬间郁闷了。
按照百度网上的搜索结果进行了各种尝试,包括重启路由、重装virtio驱动、重置winsoc文件(CMD命令:netsh winsock reset)、重装TCP/IP协议等各种方法,均不见效。
然后看到网上有说旗舰版windows7系统中有这样的问题存在,于是笔者对同一个平台上的windows2008、windows10系统均进行了测试,问题是一样的,排除了版本的可能性。
但是对同一个云平台下的centos系统,其可以正常访问百度网页,于是锁定windows系统本身的网络设置,甚至还有怀疑过是virtio驱动的版本问题,但是经过实际测试后均一一排除。
偶然间在网上百度到MTU,于是抱着尝试的心态试一下:
(1)打开“网络连接”(控制面板\网络和Internet\网络连接)
(2)鼠标右键->“属性”
(3)选择“配置”项
(4)“高级”->“Init MTUSize”,将其值该小,以前是“1500”,笔者暂改为“1450”
(5)确认以上更改操作。
再尝试打开百度网页,成功了!!!
于是,笔者接下来认真地学习了一下MTU,并做以下记录:
MTU(Maxinum Transmission Unit),最大传输单元,是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位),这个参数通常与通信接口有关。
因为协议数据单元的包头和包尾的长度是固定的,MTU越大,则一个协议数据单元承载的有效数据就越长,通信效率也越高。MTU越大,传送相同的用户数据所需的数据包个数也越低。
MTU也不是越大越好,因为MTU越大, 传送一个数据包的延迟也越大;并且MTU越大,数据包中 bit位发生错误的概率也越大。
也就是说,MTU越大,通信效率越高而传输延迟增大,所以要权衡通信效率和传输延迟选择合适的MTU。
设置合适的MTU值可以解决“部分网站打不开”、“上网速度慢”等问题,并且可以适当提升上网速度。
因为如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。
那么如何检测网关的MTU呢?
本机CMD命令行:ping -f -l 1500 192.168.1.1
其中,192.168.1.1是网关IP地址,1500是数据包长度
如果能ping通,表示数据包不需要被拆包,可以通过网关传输,如果出现“Packet needs to be fragmented but DF set.”,则表示数据包被拆包,需要降低数据包长度。
合理调整路由器和本机的MTU值,可以实现网速的最大化。
原文地址:https://www.cnblogs.com/yy20141204bb/p/8317423.html