目录
一、VLAN 设备内核实现的关键原理
在计算机网络的领域中,VLAN(Virtual Local Area Network,虚拟局域网)是一项极为重要的技术,它能够在逻辑层面将一个物理局域网划分成多个广播域 ,实现网络的隔离与优化。
为什么要划分广播域呢?在传统的局域网中,所有设备处于同一个广播域,当一台设备发送广播消息时,整个网络中的设备都能收到,这不仅消耗大量带宽,还存在安全隐患。比如在一个大型企业网络中,如果不进行广播域划分,一个部门的广播消息会传遍整个公司网络,占用其他部门的网络资源,甚至可能泄露敏感信息。而 VLAN 技术的出现,完美地解决了这个问题,不同 VLAN 之间的设备就像处于不同的物理网络,广播消息被限制在各自的 VLAN 内,大大提高了网络的性能和安全性。
VLAN 的实现离不开 802.1Q 协议,这是一种在以太网数据帧中插入 VLAN 标签的方法。在以太网数据帧中,VLAN 标签字段由 4 个字节组成,插入到源地址和类型字段之间。具体来说,这个标签包含了几个关键部分:
-
TPID(Tag Protocol Identifier,标签协议标识符):长度为 16 位,固定值为 0x8100,它就像一个独特的 “身份证”,用于标识该帧是一个带有 802.1Q 标签的帧,让接收设备知道这是一个特殊的 VLAN 帧,需要特殊处理。
-
TCI(Tag Control Information,标签控制信息):长度为 16 位,又包含了多个子字段。其中,PCP(Priority Code Point,优先级代码点)长度为 3 位,用于定义帧的优先级,比如对于实时性要求高的视频会议数据,可以设置较高优先级,确保其在网络拥塞时优先传输;DEI(Drop Eligible Indicator,可丢弃指示符)长度为 1 位,用于指示帧是否可以被丢弃;VID(VLAN Identifier,VLAN 标识符)长度为 12 位,用于标识帧所属的 VLAN,范围从 0 到 4095 ,但通常 0 和 4095 保留不可用,实际可用的 VLAN 范围为 1 到 4094,这 12 位 VID 就像房间号,每个 VLAN 都有自己独特的 “房间号”,数据帧根据这个 “房间号” 找到对应的 VLAN。
在 Linux 内核中,VLAN 设备是以母子关系成对出现的。主设备类似于现实世界中的交换机 TRUNK 口,负责连接上级网络,子设备则如同普通接口,用于连接下级网络 。这种关系就好比一个公司的部门架构,主设备是部门主管,统筹全局,子设备是各个员工,负责具体事务。一个主设备可以有多个子设备,而一个子设备只有一个母设备。当子设备有数据需要发送时,数据会被加入 VLAN Tag,然后从主设备发送出去;当主设备收到数据时,会分析其中的 VLAN Tag,如果有对应的子设备存在,就把数据转发到那个子设备上,并根据设置移除 VLAN Tag,否则丢弃该数据 。比如,在一个校园网络中,主设备连接着校园的核心网络,多个子设备分别连接着不同的教学楼网络,子设备将本教学楼的数据加上 VLAN 标签发送给主设备,主设备根据标签将数据准确地转发到对应的教学楼子设备上。