拓扑图如下
我们首先分析一下,先看红色箭头的线路
- PC1发送untagged数据帧,交换机S1接收,因为0/0/2口时access类型,所以数据帧进入到S1交换机后被打上0/0/2口的pvid 20、
- 然后通过0/0/3口发出,因为0/0/3口是trunk类型,当数据帧的pvid和发出接口的pvid相同时,则会剥除tag,变成untagged帧,此时该接口的pvid为10,数据帧的pvid为10,所以执行此机制,此时变为untagged帧。然后交换机S2的001口接收此数据帧,打上此接口的pvid 10。
- 最后通过002口发出,此接口类型为access,当要发出的数据帧pvid和该口相同时,剥除tag标签,这样,PC3就接收到了同一个VLAN中的PC2的数据了
我们再看蓝色箭头的线路
- PC2发送untagged数据帧,交换机S1接收,因为0/0/1口时access类型,所以数据帧进入到S1交换机后被打上0/0/1口的pvid 20
- 然后通过0/0/3口发出,因为0/0/3口是trunk类型,当数据帧的pvid和发出接口的pvid相同时,则会剥除tag,变成untagged帧,此时该接口的pvid为10,数据帧的pvid为20,所以不会执行此机制,此时仍为pvid为20的tagged帧。然后交换机S2的001口接收此数据帧,此时它有tag,就不会打上此接口的pvid 10。
- 最后通过003口发出,此接口类型为access,当要发出的数据帧pvid和该口相同时,剥除tag标签,这样,PC4就接收到了同一个VLAN中的PC1的数据了
上图是使用PC2 ping PC3的抓取报文,可以看到红框里没有tag
上图是使用PC1 ping PC4的抓取报文,可以看到和上面的图中不一样,多的一层红框里的就是tag标记,里面有一项id:20,这就是它的pvid
使用下图中的命令可以看到出口通过方式,我这里查看的是S1交换机的003出口,该接口类型为trunk,pvid为10,U:10表示当通过该出口的数据帧pvid为10时,发出的为untagged帧,U:1 20表示当通过该出口的数据帧pvid为1或者20时,发出的为tag帧
下面是代码配置S1交换机
[S1]int g0/0/2
[S1-GigabitEthernet0/0/2]port link- a //设为access接口
[S1-GigabitEthernet0/0/2]p d v 10 //设置pvid值为10
[S1]int g0/0/1
[S1-GigabitEthernet0/0/1]port link- a
[S1-GigabitEthernet0/0/1]p d v 20
[S1]int g0/0/3
[S1-GigabitEthernet0/0/3]port link- t ////设为trunk接口
[S1-GigabitEthernet0/0/3]port trunk allow-pass vlan 10 20 //放行vlan10 vlan20
[S1-GigabitEthernet0/0/3]undo port trunk allow-pass vlan 1 //阻止vlan1
[S1-GigabitEthernet0/0/3]port trunk pvid vlan 10 //修改truck口pvid值为10,这样从此接口转出的数据就没有tag标记
交换机S2配置类似于交换机S1,不再赘述
图上还有PC6和PC7,当新加入PC6,PC7时,他们的默认pvid值为1,都设置为access口后,此时再取消阻止vlan1通行即可