折腾家里的路由器和交换机,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 》
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.