实验室进了一批新设备,计划用vmware搭建集群,使用华为S5700三层交换机将管理与业务网分离,架构拓扑如下:
物理交换机的1--12口为管理口,端口类型为access,pvid为10;物理交换机13--20口为业务口,端口类型为trunk,pvid为20;21--24口为物理交换机上联接口,网关位于三层交换机的vlanif接口上
二、问题描述
配置完成后,管理网络通信正常,但此时发现业务网络通信异常,问题如下:
规划业务口走vlan20,所以,在业务的虚拟交换机端口组上给的VID是20
业务口上联至物理交换机的13口,链路状态是TRUNK,物理接口配置如下:
业务网络的网关在物理交换机的vlanif20口上
此时发现,这么配置后VM没法ping通网关,如果把虚拟交换机端口组的VID改成0或者4095,VM都可以ping通网关
三、问题定位
仔细观察虚拟交换机,发现数据包从vm出来后2次经过了虚拟交换机,并不是之前以为的1次,标记1处的vid可以在端口组上设置,标记2处的端口类型与pvid在vmware产品中有默认设置,不允许用户修改
通过实践得出结论,标记处2的端口类型为trunk,且trunk pvid为1,此时的数据报文传输如下图所示:
此时入方向的二层传输路径为:
- vm发出纯以太网帧
- 进入虚拟交换机时,打上tag20
- 离开虚拟交换机时,trunk允许报文带tag20通过
- 进入物理交换机时,trunk允许报文带tag20进入交换模块
此时报文已经进入物理交换机的内部,数据在返回时二层传输路径为:
- 此时报文在物理交换机内部tag为20,且物理交换机trunk口的pvid也为20,所以报文在离开物理交换机端口时剥离tag,以纯以太网帧离开物理交换机
- 进入虚拟交换机时,打上trunk口的pvid,此时tag为1
- 但vm连接虚拟交换机的端口组tag为20,所以不通
四、解决方法
在明白了问题点后,按照上面数据报文的流经过程,就能解释出为什么将虚拟交换机端口组(标签1)处的vid设置为0或者4095可以正常通信,而根据规划,业务网络的vid为20,此时只需要将物理交换机trunk口的pvid改为1,就可以正常通信,具体的通信过程为:
- vm发出纯以太网帧
- 经过虚拟交换机端口组时,打上tag20
- 携带tag20离开虚拟交换机trunk端口
- 携带tag20进入物理交换机内部
- 携带tag20离开物理交换机trunk端口
- 携带tag20通过虚拟交换机trunk端口,进入交换模块
- 离开虚拟交换机access端口时,剥离tag20,以纯以太网帧送往vm
五、总结
通过上述特征,可以得出以下几个结论:
- 所有进入交换机内部的报文都是携带tag的
- vmware虚拟交换机的上行口尽管不能配置,端口类型为trunk,且pvid为1,允许所有vlan通过
- 虚拟交换机的端口组vid为0时,端口类型为access,pvid为1;vid为4095时,端口类型为trunk,pvid为1,且允许所有vlan通过(vid4095之前有文章介绍,此处不再赘述)