openstack两个实例可以建立tcp连接,无法传输数据问题,解析。
现象:
两个实例,分别部署了tcp的client和server端。ps aux|grep name 查看正常运行。netstat -antl查看网络连接状态为建立连接,established状态。Send_Q不为空,且越来越大。两端网卡抓包,结果如下。
client端网卡抓包:
server端网卡抓包:
原因分析:
通过抓包结果,可以看到TCP的三次握手已经完成。传送数据在client端可以看到,server端未收到数据。Send_Q越来越大,也可以判断,数据在clinet端系统,未发出。
抓包文件中,可以看到MSS为1460,其实openstack的默认mtu为1450,已经超出范围。所以不能发到openstack的网络。
查找原因发现,ip a可以看到实例内网卡的mtu值为1500,和openstack的mtu值不相同。dhclient eth0可以重新分配网卡的mtu,变为1450。(我是因为,镜像中有ifcfg-eth0的配置文件,导致不能分到默认mtu值。)
解决方案:
删除镜像中ifcfg-eth0配置文件,重启网络,或者dhclient eth0。