一、背景介绍

实验室进了一批新设备,计划用vmware搭建集群,使用华为S5700三层交换机将管理与业务网分离,架构拓扑如下:
vmware虚拟交换机二层详解_第1张图片
物理交换机的1--12口为管理口,端口类型为access,pvid为10;物理交换机13--20口为业务口,端口类型为trunk,pvid为20;21--24口为物理交换机上联接口,网关位于三层交换机的vlanif接口上

二、问题描述

配置完成后,管理网络通信正常,但此时发现业务网络通信异常,问题如下:
规划业务口走vlan20,所以,在业务的虚拟交换机端口组上给的VID是20
vmware虚拟交换机二层详解_第2张图片
业务口上联至物理交换机的13口,链路状态是TRUNK,物理接口配置如下:
vmware虚拟交换机二层详解
业务网络的网关在物理交换机的vlanif20口上
vmware虚拟交换机二层详解
此时发现,这么配置后VM没法ping通网关,如果把虚拟交换机端口组的VID改成0或者4095,VM都可以ping通网关

三、问题定位

仔细观察虚拟交换机,发现数据包从vm出来后2次经过了虚拟交换机,并不是之前以为的1次,标记1处的vid可以在端口组上设置,标记2处的端口类型与pvid在vmware产品中有默认设置,不允许用户修改
vmware虚拟交换机二层详解_第3张图片
通过实践得出结论,标记处2的端口类型为trunk,且trunk pvid为1,此时的数据报文传输如下图所示:
vmware虚拟交换机二层详解_第4张图片
此时入方向的二层传输路径为:

  1. vm发出纯以太网帧
  2. 进入虚拟交换机时,打上tag20
  3. 离开虚拟交换机时,trunk允许报文带tag20通过
  4. 进入物理交换机时,trunk允许报文带tag20进入交换模块

此时报文已经进入物理交换机的内部,数据在返回时二层传输路径为:

  1. 此时报文在物理交换机内部tag为20,且物理交换机trunk口的pvid也为20,所以报文在离开物理交换机端口时剥离tag,以纯以太网帧离开物理交换机
  2. 进入虚拟交换机时,打上trunk口的pvid,此时tag为1
  3. 但vm连接虚拟交换机的端口组tag为20,所以不通

四、解决方法

在明白了问题点后,按照上面数据报文的流经过程,就能解释出为什么将虚拟交换机端口组(标签1)处的vid设置为0或者4095可以正常通信,而根据规划,业务网络的vid为20,此时只需要将物理交换机trunk口的pvid改为1,就可以正常通信,具体的通信过程为:
vmware虚拟交换机二层详解_第5张图片

  1. vm发出纯以太网帧
  2. 经过虚拟交换机端口组时,打上tag20
  3. 携带tag20离开虚拟交换机trunk端口
  4. 携带tag20进入物理交换机内部
  5. 携带tag20离开物理交换机trunk端口
  6. 携带tag20通过虚拟交换机trunk端口,进入交换模块
  7. 离开虚拟交换机access端口时,剥离tag20,以纯以太网帧送往vm

五、总结

通过上述特征,可以得出以下几个结论:

  1. 所有进入交换机内部的报文都是携带tag的
  2. vmware虚拟交换机的上行口尽管不能配置,端口类型为trunk,且pvid为1,允许所有vlan通过
  3. 虚拟交换机的端口组vid为0时,端口类型为access,pvid为1;vid为4095时,端口类型为trunk,pvid为1,且允许所有vlan通过(vid4095之前有文章介绍,此处不再赘述)

vmware虚拟交换机二层详解_第6张图片