openstack 网卡设置问题总结

303 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 ​

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