openstack实例tcp连接,无法传输数据

271 阅读2分钟

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

 openstack两个实例可以建立tcp连接,无法传输数据问题,解析。

现象:

 两个实例,分别部署了tcp的client和server端。ps aux|grep name 查看正常运行。netstat -antl查看网络连接状态为建立连接,established状态。Send_Q不为空,且越来越大。两端网卡抓包,结果如下。

client端网卡抓包:

​编辑

server端网卡抓包:

原因分析:

       通过抓包结果,可以看到TCP的三次握手已经完成。传送数据在client端可以看到,server端未收到数据。Send_Q越来越大,也可以判断,数据在clinet端系统,未发出。Send_Q越来越大可以判断消息都堆积在本机,服务端抓包,未收到传数据这个包。证明只有传数据库的包被拦截。比较抓包文件中,数据包和tcp三次握手的数据包区别。

      通过比较分析,抓包文件中,可以看到MSS为1460,其实openstack的默认mtu为1450,已经超出范围。所以不能发到openstack的网络。通过抓包中mtu为1460可以推断,网卡设置的mtu大于1460,所以报文的MSS才有可能为1460。

      查找原因发现,ip a可以看到实例内网卡的mtu值为1500,和openstack的mtu值不相同。系统网卡的mtu和openstack网络的网络mtu值不同,导致系统的网络数据,不能发到openstack网络中。dhclient eth0可以重新分配网卡的mtu,变为1450,确认里外一样之后,数据才能继续走通。数据包的mtu才能计算正确,开始正确分包,传输。(我是因为,镜像中有ifcfg-eth0的配置文件,导致不能分到默认mtu值。)

解决方案:

       删除镜像中ifcfg-eth0配置文件,重启网络,或者dhclient eth0。