关于一个MSS值引发的疑案的思考
2011-10-21 18:33
459 查看
virtualadc在《负载均衡故障诊断:一个MSS值引发的疑案》中写到的这个故障现象引发了我的思考,我接触的很多项目中也都有负载均衡,但是却没有遇到过这个故障。现针对作者提到的故障,我在自己的实验环境中抓包测试了一下。对此提出自己的两点思考,仅此交流。
网络环境拓扑:
抓包截图:
172.29.141.150为客户端地址
172.29.141.100为真实服务器地址
172.29.141.159为负载均衡上的VIP地址
[align=left]负载均衡以旁路方式部署,但是没有做CLIENT NAT(网关是实网关没有设在负载均衡上)。[/align]
[align=left]访问流程:[/align]
1) 172.29.141.150访问172.29.141.100
2) 负载均衡设备与客户端完成三次握手
[align=left]3)然后负载均衡设备向服务器172.29.141.100发起连接[/align]
4)服务器与负载均衡设备完成三次握手。
我们发现两端的MSS值都是1440,没有出现差异,当然也没有发生原作者提到的故障现象。
补充:MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。
[align=left] [/align]
思考一:网络设备上的MTU影响
当两台远程PC互联的时候,它们的数据需要穿过很多的路由器和各种各样的网络媒介才能到达对端,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同 )通过这段水管最大水量就要由中间最细的水管决定。网络通信中由于各家网络设备厂商提供的网络设备占用的MTU值不同,也会进一步减小MSS值。如果网络中有中低端路由器就需要在内网口和外网口都要配置tcp mss 值来保持传输的数据包大小统一,以避免某段网络因使用了PPPoE或NAT那些导致某些不能分片的应用而无法正常通讯。
[align=left]注:NAT转换有时容易造成两端MTU值不一致。 [/align]
[align=left] [/align]
[align=left] [/align]
思考二、服务器或系统自身的MTU影响
网络层的IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小来决定是否作“分片”处理。操作系统也会根据本机MTU值自动将大小不符合要求的数据进行分包处理再进行传输,所以针对这些问题可以修改相应主机的MTU值:
windows下修改方法:
打开注册表找到如下位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 在Interfaces下有多个子项,每个子项对应一个网卡,确定本机用来连接Internet的网卡,点击Interfaces上的子项,查看键值列表中的IPAddress项,如果IPAddress的键值就是你要找的IP,则该子项就是要找的网卡,然后进入该子项,在右边的窗口里按鼠标右键,选择“新建”->“双字节值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口在里面填入MTU的值,填写前请先把基数设为十进制。 设置好后,需要重启机器才能生效。
linux下修改方法:
# ifconfig eth0 mtu number
其中“number”为MTU的数值。修改完成后,可以用“ifconfig”命令来查看修改的结果。为了不必每次都修改,我们可以在网卡配置文件中修改:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
MTU=1000
然后保存退出。
还有其他可能引起这个故障的原因,暂未研究。欢迎大家指正交流!本文出自 “滴水穿石孙杰” 博客,谢绝转载!
网络环境拓扑:
抓包截图:
172.29.141.150为客户端地址
172.29.141.100为真实服务器地址
172.29.141.159为负载均衡上的VIP地址
[align=left]负载均衡以旁路方式部署,但是没有做CLIENT NAT(网关是实网关没有设在负载均衡上)。[/align]
[align=left]访问流程:[/align]
1) 172.29.141.150访问172.29.141.100
2) 负载均衡设备与客户端完成三次握手
[align=left]3)然后负载均衡设备向服务器172.29.141.100发起连接[/align]
4)服务器与负载均衡设备完成三次握手。
我们发现两端的MSS值都是1440,没有出现差异,当然也没有发生原作者提到的故障现象。
补充:MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。
[align=left] [/align]
思考一:网络设备上的MTU影响
当两台远程PC互联的时候,它们的数据需要穿过很多的路由器和各种各样的网络媒介才能到达对端,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同 )通过这段水管最大水量就要由中间最细的水管决定。网络通信中由于各家网络设备厂商提供的网络设备占用的MTU值不同,也会进一步减小MSS值。如果网络中有中低端路由器就需要在内网口和外网口都要配置tcp mss 值来保持传输的数据包大小统一,以避免某段网络因使用了PPPoE或NAT那些导致某些不能分片的应用而无法正常通讯。
[align=left]注:NAT转换有时容易造成两端MTU值不一致。 [/align]
[align=left] [/align]
[align=left] [/align]
思考二、服务器或系统自身的MTU影响
网络层的IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小来决定是否作“分片”处理。操作系统也会根据本机MTU值自动将大小不符合要求的数据进行分包处理再进行传输,所以针对这些问题可以修改相应主机的MTU值:
windows下修改方法:
打开注册表找到如下位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 在Interfaces下有多个子项,每个子项对应一个网卡,确定本机用来连接Internet的网卡,点击Interfaces上的子项,查看键值列表中的IPAddress项,如果IPAddress的键值就是你要找的IP,则该子项就是要找的网卡,然后进入该子项,在右边的窗口里按鼠标右键,选择“新建”->“双字节值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口在里面填入MTU的值,填写前请先把基数设为十进制。 设置好后,需要重启机器才能生效。
linux下修改方法:
# ifconfig eth0 mtu number
其中“number”为MTU的数值。修改完成后,可以用“ifconfig”命令来查看修改的结果。为了不必每次都修改,我们可以在网卡配置文件中修改:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
MTU=1000
然后保存退出。
还有其他可能引起这个故障的原因,暂未研究。欢迎大家指正交流!本文出自 “滴水穿石孙杰” 博客,谢绝转载!
相关文章推荐
- 四极管:一个需求引发的关于平板电脑的思考
- 关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。
- 关于中国产品的质量问题-一个暖水袋引发的思考
- 一个窗帘引发的——关于测试及测试活动的思考(一)
- 一个Tahoma字体bug引发的思考—关于样式bug的分析流程
- 由一个问题引发的思考——关于数据库的外键约束
- 一个批量更新的sql语句引发的关于创业者心态的思考
- 一个需求引发的关于平板电脑的思考
- 一个需求引发的关于平板电脑的思考
- 一个关于NHiberante,Linq数据源与UI交互引发的思考
- 关于一个S5pv210 HDMI调试帖子引发对方案以及开发板公司技术支持的思考
- 由一个简单的客户端间TCP/UDP通信程序引发的关于设计模式的思考
- 关于一个小学算数引发的思考
- 一个关于字典查找引发的思考——BinarySearch
- 一个关于发送topic引发的production issue问题的思考
- 一个关于jvm堆溢出引发的思考
- for语句引起一个死循环而引发的思考!!!
- 关于char字符引发的一个问题
- 一个JDK版本问题引发的思考--Java环境配置 && Eclipse的JDK配置