您的位置:首页 > 理论基础 > 计算机网络

Linux 网络协议栈开发基础篇(九)—— VID与PVID

2018-01-27 15:41 302 查看
一、PVID的作用及和VID的区别

       PVID和VID经常出现于二、三层交换机里,由于PVID和VID的设置不合理,造成VLAN划分变得混乱。

       PVID是交换机上的概念,说的是进入该端口的报文如果没有打vlan id就按PVID的值打上,VID是报文上的vlan tag的意思。

1、什么是PVID

       PVID英文解释为Port-base VLAN ID,是基于端口的VLAN ID,一个端口可以属于多个vlan,但是只能有一个PVID,收到一个不带tag头的数据包时,会打上PVID所表示的vlan号,视同该vlan的数据包处理,所以也有人说PVID就是某个端口默认的vlan ID号。 

       一个物理端口只能拥有一个PVID,当一个物理端口拥有了一个PVID的时候,必定会拥有和PVID相等的VID,而且在这个VID上,这个物理端口必定是Untagged Port。 

  PVID的作用只是在交换机从外部接受到可以接受Untagged 数据帧的时候给数据帧添加TAG标记用的,在交换机内部转发数据的时候PVID不起任何作用

2、什么是VID

  VID(VLAN ID)是VLAN的标识,在交换机里面用来划分端口。比如一个交换机有8个端口,现在将port1,port2,port5三个端口的VID设置成1111,那么这三个端口就能接收vlantag=1111的数据包。 

  拥有和数据帧TAG标记一致的VID的物理端口,不论是否在这个VID上是Untagged Port或者tagged Port,都可以接受来自交换机内部的标记了这个TAG标记的tagged 数据帧。 

  拥有和数据帧TAG标记一致的VID的物理端口,只有在这个VID上是tagged Port,才可以接受来自交换机外部的标记了这个TAG标记的tagged 数据帧。

      

默认情况下,简单的理解为:

ACCESS端口接PC,VID=PVID

TRUNK端口级联,VID=全部,PVID=1

       简单的说,VID(VLAN ID)是VLAN的标识,定义其中的端口可以接收发自这个VLAN的包;而PVID(Port VLAN ID)定义这个untag端口可以转发哪个VLAN的包。比如,当端口1同时属于VLAN1、VLAN2和VLAN3时,而它的PVID为1,那么端口1可以接收到VLAN1,2,3的数据,但发出的包只能发到VLAN1中

     在网上发现一个比较好的解释是:PVID并不是加在帧头的标记,而是端口的属性,用来标识端口接收到的未标记的帧。也就是说,当端口收到一个未标记的帧时,则把该帧转发到VID和本端口PVID相等的VLAN中去。

      当所有VLAN都在一个交换机里时,确实只需要一个标识就够了,但跨设备的VLAN就需要另一种标识,这就是802.1Q的VLAN ID,即VID。

      我们知道802.1Q的VLAN是在二层帧里加进VLAN标识,俗称打tag,而计算机不能解析这种二层的帧,所以交换机的一个端口在分到一个VLAN时有tag和untag属性,tag端口用来连接设备,untag端口用来连接计算机。Tag端口出去的帧一般都打上了tag,tag中的VID有的来自PVID,有的则来自其它tag端口中本身就含有tag的帧

      设备互连时,由tag中的VID决定了一个二层帧属于哪个VLAN,而计算机不具备打tag的功能,所以只有给连接计算机的端口添加一个属性,用来决定计算机发出的未标记的帧属于哪个VLAN,这个属性就是PVID

     我们来总结一下:在一个端口接收到一个无标记帧时,仅仅由该端口的PVID决定该帧转发到哪个VLAN中,即转发到VID=PVID的VLAN中

    到此我们理解了PVID的含义和作用,但似乎只有untag端口下的PVID才具有意义,而实际上tag端口也有PVID属性,PVID对tag端口会造成什么影响呢?

二、PVID值对TAG端口影响

     我们将用到3个端口:Port 1、2、3,各端口PVID设置如下:

Port 1:PVID = n

Port 2:PVID = 2
Port 3:PVID = 3

创建2个VLAN:

vlan2:VID = 2,包含Port 1 (tag)、Port 2 (untag)
vlan3:VID = 3,包含Port 1 (tag)、Port 3 (untag)

将3台主机A、B、C分别接在Port 1、2、3上,

分别用主机B、C去ping主机A,在主机A上抓包。

      实际上tag端口接计算机是没有意义的,因为计算机无法解析打了tag的二层包文,但通过抓包软件可以抓到这种二层报文,通过这种方法可以进行分析。

      实验时主机B和C可以是同一台计算机,只不过接到不通端口上,为了方便说明,将它们分开表示。

实验结果如下:

当n = 1时,可以看到来自B和C的包头前都含有802.1Q的Packet,B、C都不能ping通A(ping不通的由于主机A无法解析打了tag的二层包);

当n = 2时,可以看到来自B的包头前不含有802.1Q的Packet,而来自C的有,仅B可ping通A;;
当n = 3时,可以看到来自C的包头前不含有802.1Q的Packet,而来自B的有,仅C可ping通A;;

通过分析,得出S3026转发机制大致如下:

1、由主机B发出的包到接口2(由于此时B不知道A的MAC地址,会发出arp广播包)

2、根据接口2的PVID的值(PVID=2),发往VID=2的VLAN中的所有接口

3、接口1属于VLAN 2,所以接口1能收到此包
4、此时如果VLAN 2中接口1是tag端口,则将接口1的PVID值和VID进行比较:

      如果PVID=VID则从接口1出去的包不打tag

      如果PVID!=VID则从接口1出去的包打tag

      由此可见,以前设为tag端口的PVID不起作用的说法在S3026上并不适用,正确的说法应该是:S3026上的某个VLAN中的tag端口,在转发在此VLAN中包时出去前,先检查该tag端口的PVID是否等于VID(untagged端口,连接PC,需要剥离tag),若相等则发出的包不打tag,若不等则打上tag

还是用这张图理解:



我们来总结一下,交换机的PVID和VID给VLAN配置带来了灵活性,同时也带来了一些麻烦,配置的不好可能带来问题很隐蔽。所以我们以后在配置VLAN时要注意以下几点:

1、 对于untag端口,PVID要和所属VLAN的VID一致;

2、 对于tag端口,PVID要不同于所有所属VLAN的VID
3、 两台设备互联时,两端接口的PVID保持一致时,有弊也有利;

定理总结:

1 、下面是定义的各种端口类型对各种数据帧的处理方法 



2、所谓的Untagged Port和tagged Port不是讲述物理端口的状态,而是将是物理端口所拥有的某一个VID的状态,所以一个物理端口可以在某一个VID上是Untagged Port,在另一个VID上是tagged Port;

3、一个物理端口只能拥有一个PVID,当一个物理端口拥有了一个PVID的时候,必定会拥有和PVID的TAG等同的VID,而且在这个VID上,这个物理端口必定是Untagged Port;

4、PVID的作用只是在交换机从外部接受到可以接受Untagged 数据帧的时候给数据帧添加TAG标记用的,在交换机内部转发数据的时候PVID不起任何作用;

5 、拥有和TAG标记一致的VID的物理端口,不论是否在这个VID上是Untagged Port或者tagged Port,都可以接受来自交换机内部的标记了这个TAG标记的tagged 数据帧;

6、拥有和TAG标记一致的VID的物理端口,只有在这个VID上是tagged Port,才可以接受来自交换机外部的标记了这个TAG标记的tagged 数据帧;

下面通过一个实例来巩固一下:



一个数据包从PC机发出经过ACCESS端口->TRUNK端口->TRunk->ACCESS->PC数据包发生了怎么样的变化?

我们先把上述的描述变换为IEEE802.1Q的标准描述:

一个数据包从PC机发出经过(Untagged 数据帧)

     ACCESS端口(PVID定义为100,VID=100=Untagged Port)->

          TRUNK端口(PVID定义为1〈出厂配置,没有更改〉,VID=1=Untagged Port,VID=100=tagged Port)->

                 另一个交换机的Trunk端口(PVID定义为1〈出厂配置,没有更改〉,VID=1=Untagged Port,VID=100=tagged Port)->

                        另一个交换机的ACCESS端口(PVID定义为100,VID=100=Untagged Port)->

                              PC数据包

发生了怎么样的变化?(Untagged 数据帧)

       首先假设两台交换机刚刚开机(MAC地址表为空)从PC机发出的数据帧进入交换机的ACCESS端口以后,会按照这个端口的PVID打100的Tag标记,根据交换机的转发原理,交换机会把这个数据帧转发给VID=100的所有端口(除了进口以外),这个过程叫做VLAN Flood; (定理1)

       由于Trunk端口拥有VID=100,所以才可接受这个标记Tag为100的tagged数据帧; (定理5)

       由于Trunk端口在VID=100上为tagged Port,所以在发送数据帧出交换机的时候,不改变Tagged数据帧的结构; (定理1)

      到了另一个交换机的Trunk端口的时候,由于Trunk端口拥有VID=100,所以才可接受这个标记Tag为100的tagged数据帧; (定理6)

      另一个交换机的Trunk端口,接收到标记tag为100的tagged数据帧,并不作任何的更改; (定理1)

      另一个交换机收到到标记tag为100的tagged数据帧,根据交换机的转发原理,交换机会把这个数据帧转发给VID=100的所有端口(除了进口以外);参照交换机交换原理(受到一个未知目的MAC数据帧);

     这样另一个交换机的ACCESS端口就可以收到标记tag为100的tagged数据帧; (定理5);

      另一个交换机的ACCESS端口在发出标记tag为100的tagged数据帧的时候,会去掉TAG标记,转发untagged数据帧给PC;(定理1);这样PC机就收到了这个数据.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐