一个因VLAN tag和MTU引发的线上故障

前段时间帮其他部门的同事排查了一个故障和MTU有点关系。同事找到我说线上的服务器访问有点问题,并直接给出了关键点:使用ping的时候 -s 1468能通,但是-s 1469就不通了。
简单看了一下是个虚拟机,再综合宿主机的情况看了下。就判断出是在虚拟机上的网卡加vlan tag引发的问题。因为我们习惯性的都是在宿主机上打vlan tag,单独建个网桥,并把虚拟机的网卡桥接到这个网桥上。让同事把对应的VM业务停掉后,按照我自己的方式重新修改了宿主机和VM的配置文件,启动后一切正常。

从原理上分析,vlan tag占用4个字节,以太网的MTU最大可以设置1500.当在VM内的包如果直接发了1469,那么就会造成1469+4(vlan tag)+20(ip头)+8(icmp头)>1500,就会被分片,可能在分配重组的时候丢掉了vlan 信息,造成通信异常。
解决方案无非2种。
1. 完全重新修改宿主机的配置,重新生成VM。vlan tag在宿主机上打.
2. 修改VM网卡的MTU设置,设置为1496.这样通过MSS协商,TCP的通信会协商MSS为1496-40=1456.可以保证TCP通信正常。

此条目发表在net分类目录。将固定链接加入收藏夹。

发表评论