折腾家里的路由器和交换机,VLAN 相关的概念看似容易,然而 pvid, vid, tag 啥的不太清楚具体作用,网上查的文章越看越一团粥。有些过于细节拉拉杂杂一堆,非专业的难于读懂;有些也许自己搞明白了文字表述不清;还有些也许写的人自己也搞不明白。拜读下来,这两篇算是讲得清楚一点的。
802.1Q VLAN 技术原理---理解 PVID 和 VID --注 1
转 Trunk、Hybrid、Access、Tag、Untag、Pvid 的关系
自己总结一下,希望能简单,通俗易懂,结果可能是又做了个混乱的解读。
VLAN,虚拟局域网络,是交换机一项功能,可以在逻辑上把交换机端口划分为不同的局域网,这些逻辑上的局域网就是 VLAN, 每个 VLAN 用唯一的标识数字 VID 来区分。
VLAN 的实现原理很简单,就是在原有的网络底层的的每个数据帧上附加一个 VID 的标记,这就是所谓的 Tag。交换机根据数据帧里的 VID,和端口属于哪个 VLAN,决定数据帧是否可以进出那个端口。
然而悲催的是,传统局域网先于 VLAN 出现。所以大量的设备不打 Tag。首先是所有终端设备,例如 PC, 移动设备等不会打 Tag ;其次交换机之间,有些交换机也不支持 VLAN。另外,交换机也需要一个机制管理端口和 VLAN 的关系。所以,问题就在于怎样打 Tag, 怎样移除 Tag。
数据帧上打过 VID 标记的,叫 TAGED 数据帧,携带有 VLAN 信息;没有 VID 的,叫 UNTAGED 数据帧,没有携带 VLAN 信息。正常和 PC 等终端设备通信的数据帧,都是 UNTAGED 的,没有 VLAN 信息。交换机内部、交换机之间、交换机和路由器之间,才会有 TAGED 的数据帧。交换机之间、交换机和路由器之间也可以用 UNTAGED 的数据帧。
交换机的端口可以分为内外两侧,对外侧,通过网线连接其他设备,收发外部的数据;对内侧,抛给交换机内部的处理芯片,把数据转发到目标端口。
一个端口可以归属多个不同的 VLAN,但是只能选一个做缺省 VLAN。端口在外部收发的 UNTAGED 的数据帧,没有 VLAN 信息,交换机自动分配到缺省 VLAN。因为缺省 VLAN 的设计,PC 电脑可以正常的和交换机通信,而不需要理解 VLAN 的存在。
对于缺省 VLAN,由于端口从外部接收的数据是没有 VID 信息,所以端口对内抛送数据帧到交换机内部电路时,需要添加一个 VID 后参与内部交换。这个 VID 就是缺省 VLAN 的 ID,通过端口的 PVID 属性来指定,也就是说端口的 PVID 属性要和端口的缺省 VLAN 的 ID 一致。
另一个方面,缺省 VLAN 数据帧,端口对外部发送出时都没有 VID 信息。而交换机内部数据帧都是有 TAG 的,所以端口往外部发送缺省 VLAN 的数据帧时,原有的 TAG 需要移除。端口另外有一个属性 TAGED/UNTAGED,端口可按 VLAN 控制某个 VLAN 的数据帧往外部发送时是否保留 TAG。端口在缺省 VLAN 上的属性值设为 UNTAGED,表示端口对外发送数据要移除 VID 信息。通常一个端口只能在缺省 VLAN 设置为 UNTAGED,其余 VLAN 设置为 TAGED。
另外有说法,端口往外部发送数据帧时,先判断数据帧的 VID 是否等于端口的 PVID,若 VID==PVID,则移除数据帧的 TAG 再发送。这并不矛盾,端口的 PVID 为缺省 VLAN 的 VID,缺省 VLAN 是 UNTAGED 的。某些设备支持 Hybrid 端口类型,允许多个 VLAN 外发数据帧不打 TAG,这种情况下多个 VLAN 设置了 UNTAGED。
综上:
最后,以上为仅为拉拉杂杂的学习后的纸面总结。因为 802.1Q 标准的存在,有了学习的方向。各设备厂商具体实现各显神通。没接触过专业设备,就家用和 Soho 级的交换机而言,能有几分按标准支持呢。譬如网件的这个说明《简单网管交换机的 VLAN 功能设置及应用》其中的“一、端口 VLAN ”, 我没法用上面理论解释。只能解释,他是另外一个机制 :joy:
注 1:许多内容来自这篇不知出处的文章《关于 VLAN-Tag 》
1
iwtbauh 2018-12-10 20:48:16 +08:00 via Android
其实 vlan 说白了就是将单一接口映射到多个网络。
|
2
goodryb 2018-12-11 08:34:51 +08:00 via iPhone
和终端没关系呀,为啥说手机电脑不支持 vlan,搞笑了
楼主可以先去了解下 osi 七层模型 vlan 简单来说就是通过逻辑划分来复用交换机 |
3
atuocn OP @goodryb 我说了终端不支持 vlan 了么?我说的是终端不会打 tag。 终端设备是 VLAN-unaware,不感知 vlan 存在的。如果你了解 osi 七层模型的精神的话,就会知道上层设备是不需要了解下层设备的实现细节。终端是不需要理解 vlan 的存在的,只需交换机提供链路服务就好了。
vlan 的的原理和概念是很简单。我只是读了一些文章,讲不清 pvid,vid, tag, untag,和为什么有这些东西存在。自行总结一下而已。 |
4
goodryb 2018-12-11 12:44:05 +08:00
@atuocn #3 看你这答复似乎是了解一些网络的知识,那强调终端不会打 tag 是什么意思? 这个难道不是 vlan 才需要的?
|
5
atuocn OP @goodryb 好吧。我只是总结一下,设计缺省网络的一个原因是有许多不打 tag 设备。毕竟大家都会打 tag 的话,就没有 tag, untag 之说了。就不会有 pvid, 端口的 untag 属性存在的必要了。我强调的是“因为缺省 VLAN 的设计,PC 电脑可以正常的和交换机通信,而不需要理解 VLAN 的存在”
我初次接触 pvid, untag 概念,读了几篇文章也没懂。我说过,这是我读了几篇文章总结。 也许你很强,也没有必要用“搞笑”,“似乎”这样的词汇来沟通吧。 |
6
benmaowang 2018-12-11 23:00:38 +08:00
终端也可以打 tag,但没有意义。因为 VLAN 是为了隔离二层广播域的,在交换机这种有多个端口用来二层交换的设备上才有意义。
其实除了 VLAN 和 VID,其它那一大堆名词都是设备厂商搞出来的。比如思科交换机只有 trunk 和 access 模式,而华为的就多了一个 hybrid 模式,大概算是那两个的混合体。 本质上,对交换芯片来说,从一个端口收到报文后,转发处理的逻辑很简单,同一 VLAN 的可转发,报文从端口发出去时,根据配置决定去不去 tag。 网件的“一、端口 VLAN ”就很好理解了。 端口 7 和 8 属于 VLAN 1、2、3。所有这三个 VLAN 的报文都可以从两个端口过。 端口 1~3 属于 VLAN 2,所以这三个端口之间可通信,也可与端口 7 和 8 通信(同属于 VLAN 2 )。 端口 4~6 属于 VLAN 3,所以这三个端口之间可通信,也可与端口 7 和 8 通信(同属于 VLAN 3 )。 这个场景中,交换机连接的都是终端,所以出去的报文肯定都是 untag 的。 如果按照思科的配法,那就是端口 1~3 是 access 模式,pvid 2。端口 4~6 也是 access 模式,pvid 3。端口 7 和 8 是 trunk 模式,允许 1、2、3,且 untag 1、2、3。 |
7
nfroot 2018-12-12 10:35:39 +08:00
最近接触了三层交换机,也看了下 Openwrt,虽然有图解,也有点难记。。不过慢慢也接受了。。。其实好简单的。。。
|
8
atuocn OP @nfroot 是的,我也是弄 Openwrt,再百度 pvid tag 啥意思。如果没有系统的学习,网上各种零散信息,难理解。弄清楚了是很简单的。
|
9
atuocn OP @benmaowang 感谢!
我的疑惑是,按网件手册解释: vlan id | 端口成员 ------------------------------------------ 01 | 07 08 02 | 01 02 03 07 08 03 | 04 05 07 08 就象你说的,所有端口,肯定出去的报文都是 untag 的。端口 07,08 的 pvid 应该是 1 吧,那么从 07,08 口流入的数据,就应该是 vlan 01 的,交换机为啥会把报文交换给属于 vlan 02 的 01 口呢?这边并没有明显的地方,暗示 01 端口允许 vlan 02 的数据。当然反过来,按上表的示意,01 口进入的数据,可以交换到 07,08 口。但是通信应该是双向的啊,不能单边嘛。 我注意到他的配置界面上,这种叫端口 VLAN ;另外有单独的 802.1Q VLAN 配置界面。所以猜测,它的端口 VLAN 是另一个机制。 |
10
benmaowang 2018-12-13 08:32:19 +08:00 1
@atuocn 端口 07 和 08 没有什么 pvid,它们相当于 trunk 口。假如这两个端口进来的一个广播或未知单播报文,会向所有 VLAN 1、2、3 的端口广播。
另外那个 802.1Q VLAN 配置界面,是指的交换机级联的应用场景,这时从端口 08 出去的报文是带 tag 的。 |
11
atuocn OP @benmaowang 感谢!
这可以解释结果。 但是我想,pvid 应该还是会有的吧。因为交换机内部,不会有的帧打 tag,有的帧不打 tag,这对内部交换逻辑太复杂了。可能在这里他特殊处理了,象你说的,这两个端口进来的一个广播或未知单播报文,会向所有 VLAN 1、2、3 的端口广播。 还有个可能性,毕竟是 soho 级的简单网管交换机。概念太复杂了不好用。也许他就是简单按端口分组,内部都没有 tag。然后,直接按端口分组,划在一组的就广播。 |