vlan中的pvid其实就是处理标签的一种方式,在端口为access模式的时候pvid=access端口本身的vlan,也无法单独配置
在端口为trunk的时候pvid是可以根据需求配置的,默认的pvid=vlan1,而在trunk端口模式中,pvid影响的是trunk端口双向的数据帧。在接收方向上trunk端口是对于没有标签的数据帧打上配置的pvid号(vlan号),至于有vlan标签的数据帧不归pvid管,归port trunk-allow vlan x管。在发送方向上trunk端口是对于vlan号和配置的pvid号相同的数据帧进行untag去掉vlan标签的操作(将之变为vlan1的数据帧,也就是没有vlan标签的普通的以太网数据帧)。
在理解了以上的基础上,进行一个pvid功能的验证试验,topology如下:
基础配置如下:
sysname SW1
#
vlan batch 10
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10
#
interface GigabitEthernet0/0/2
port link-type access
#
interface GigabitEthernet0/0/3
port link-type access
port default vlan 10
#
===============================
sysname SW2
#
vlan batch 10
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10
#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 10
#
在PC1上分别ping PC2 PC3
PC1>ipconfig
IPv4 address......................: 192.168.1.1
Subnet mask.......................: 255.255.255.0
Gateway...........................: 0.0.0.0
PC1>ping 192.168.1.2
Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
From 192.168.1.1: Destination host unreachable
From 192.168.1.1: Destination host unreachable
PC1>ping 192.168.1.3
Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
From 192.168.1.1: Destination host unreachable
From 192.168.1.1: Destination host unreachable
此时PC1无法与PC2 PC3通信,但是PC2和PC3在同一个vlan是可以通信
PC2>ipconfig
IPv4 address......................: 192.168.1.2
Subnet mask.......................: 255.255.255.0
Gateway...........................: 0.0.0.0
PC2>ping 192.168.1.1
Ping 192.168.1.1: 32 data bytes, Press Ctrl_C to break
From 192.168.1.2: Destination host unreachable
From 192.168.1.2: Destination host unreachable
PC2>ping 192.168.1.3
Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
From 192.168.1.3: bytes=32 seq=1 ttl=128 time=62 ms
下面我们以PC3通信为参照,分别修改sw1的pvid=10,sw2的pvid=1不变
[SW1-GigabitEthernet0/0/1]display this
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk pvid vlan 10
port trunk allow-pass vlan 10
#
PC3分别pingPC1和PC2
PC3>ping 192.168.1.1
Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
From 192.168.1.3: Destination host unreachable
PC3>ping 192.168.1.2
Ping 192.168.1.1: 32 data bytes, Press Ctrl_C to break
From 192.168.1.3: Destination host unreachable
这时候发现都不通了,可以分析一下PC3数据帧转发的过程,首先PC3发送arp给pc1、pc2,arp报文到了sw1后,sw1发现pc3过来的帧是携带vlan10的arp广播,于是只向vlan10内的所有端口发送(包括允许vlan10的trunk口),此时pc1的端口是vlan1,自然无法收到vlan10的arp广播因此不通,而vlan10的arp在经过sw1的trunk时在出去的方向被pvid=10的trunk端口untag掉了vlan10变成vlan1的普通以太网数据帧传到了sw2,sw2发现是vlan1的帧,就只向vlan1内的所有端口发送,而pc3是属于vlan10的自然无法收到vlan1的数据帧。
而后我们保持sw1的pvid=10,将sw2修改pvid=10,再看PC3的通信状况
[SW2-GigabitEthernet0/0/1]disp th
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk pvid vlan 10
port trunk allow-pass vlan 10
#
PC3>ping 192.168.1.1
Ping 192.168.1.1: 32 data bytes, Press Ctrl_C to break
From 192.168.1.3: Destination host unreachable
PC3>ping 192.168.1.2
Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
From 192.168.1.2: bytes=32 seq=1 ttl=128 time=62 ms
可以看到pc3能够ping通pc2,分析如下,pc3的vlan10的arp经过sw1的pvid10的untag变成vlan1转发给sw2后,sw2发现入向的arp是个vlan1的普通帧,而自己trunk的pvid=10,于是给这个没有tag的帧打上vlan10的标签,在广播到所有vlan10的端口中,这时身在vlan10中的pc2就可以收到了,pc2回包也是将自己的vlan10的arp应答消息发给sw2,sw2在出方向(由于pvid=10)将pc2发来的vlan10的帧untag变成vlan1的帧发给sw1,sw1发现入向的帧没有tag(自己的pvid又=10)于是给没有tag的帧打上vlan10的tag,并在vlan10内的所有端口下查找pc3的mac地址,发现pc3的mac地址在G0/0/3端口下,于是将帧通过G0/0/3口发给pc3,这样pc3就完成了一次和pc2的双向通信
=======================================================================
现在,我们将sw1的pvid=1,sw2的pvid=10看看,用pc3都无法ping通pc1和pc2,与之前的pc无法通信原理是一样的,但是不在同一个vlan的pc1却能和pc2通信,这里我们来看一下pc1和pc3的通信过程
[SW1-GigabitEthernet0/0/1]display this
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10
#
[SW2-GigabitEthernet0/0/1]disp th
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk pvid vlan 10
port trunk allow-pass vlan 10
#
PC1>ping 192.168.1.3
Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
From 192.168.1.1: Destination host unreachable
PC1>ping 192.168.1.2
Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
From 192.168.1.2: bytes=32 seq=1 ttl=128 time=62 ms
pc1发送vlan1的arp到sw1,sw1广播所有允许vlan1的端口中(包括允许vlan1的trunk中),于是arp到sw2,sw2发现是个没有tag的数据帧(自己的pvid=10)于是打上vlan10的标签,广播到vlan10的所有端口中被pc2收到,pc2回帧携带vlan10的帧给sw2,sw2在帧出方向的时候(由于pvid=10)untag掉vlan10的标签,变成vlan1的普通帧转发到sw1,sw1发现是vlan1的普通帧(自己的pvid=1)于是在vlan1的所有端口中查找pc1的mac,发现pc1的mac在g/0/0/2端口下,于是将帧转发给了pc1完成了一次双向的数据帧转发,所以pc1与pc3虽然不在一个vlan但是依然可以通信。
到这里都能理解的话,对于pvid就已经完全掌握了。总结一句话,pvid只在trunk中有用,并且在入向只管没有tag的帧,在出向只管与pvid相同vlan-id的帧。