本文已参与「新人创作礼」活动,一起开启掘金创作之路。
openstack实例间无法建立tcp连接问题排查
使用openstack创建两个windows实例
两个实例,经过报文转发平台相连,在两个windows实例中,使用tcp工具建立tcp连接失败。
现象具体描述:
三个实例:
实例A和实例B
报文转发实例C
在实例A上ping实例B,可以ping通。
使用网络助手建立tcp连接时,不成功。
在实例B上使用wireshark抓包,发现B上可以收到A发出的tcp syn连接请求,但是不响应。
wireshark打开checksum校验:发现checksum校验失败
原因:
网卡在开启Checksum Offload之后,会把计算checksum的工作交给网卡去做,网卡会计算出正确的checksum并且发出去的。CheckSumOffload实际上是将传输层的一部分工作交给了硬件完成,以节约系统的CPU资源。
打开CheckSumOffload发现B收到syn包未响应,应该是虚拟网卡,不支持计算checksum。设置为disabled,改为tcp协议栈计算checksum。
解决方案:
配置两业务机,网络连接中本地连接。点击属性按钮。
弹出窗口中点击配置按钮
弹出窗口中点击高级,找到TCP Checksum Offload (Ipv4)选项。选择Disabled选项。
openstack实例之间大报文分片不生效
现象:
openstack实例之间报文大小超出MTU设置的值
查看openstack配置正确,控制节点网卡的MTU设置正确
实例内的网卡查看MTU设置正确。
原因:
网卡在开启tso之后,会把报文分片的工作交给网卡去做,网卡会把报文分片后再发出去的。tso实际上是将传输层的一部分工作交给了硬件完成,以节约系统的CPU资源。
大报文未分片,应该是虚拟网卡,不支持分片。将tso设置为disabled,改为tcp协议栈分片。
解决方案:
windows和linux系统两种方法如下:
windows关闭tso:
配置两业务机,网络连接中本地连接。点击属性按钮。
弹出窗口中点击配置按钮
弹出窗口中点击高级,找到tso选项。选择Disabled选项。
linux系统关闭tso:
ethtool -K eth0 tx off 关闭linux checksum
ethtool -K eth5 tso off 关闭网卡tso