深入理解VLAN 工作机制

2022-10-14 02:01廖继东伍琰
网络安全技术与应用 2022年9期
关键词:本征交换机报文

◆廖继东 伍琰

(河南省总工会干部学校 河南 45002)

VLAN 是一种依赖于交换技术之上的,基于协议的虚拟网络技术[1]。每个 VLAN 都由一组相同需求的计算机组成,并且这些计算机可以来自不同的物理空间,VLAN 内的主机间通信就和在一个LAN 内一样;而VLAN 之间则不能直接互通,每个VLAN 是一个广播域,广播报文就被限制在一个VLAN 内[2]。

初学者对VLAN 的划分比较容易掌握,但是对VLAN 的工作机制、相关协议并不是很清楚。作者以思科Packet Tracer 为实验平台,搭建VLAN 的网络拓扑,如图1,通过抓取协议包来分析VLAN 的工作机制,以提供对VLAN 技术更清晰的认识。

图1 实验拓扑

其中PC0、PC2、PC4 划到VLAN 10,PC1 和PC3 划到VLAN 20,两台交换机之间使用trunk 链路。

1 不同的VLAN 如何被识别

通过PC0(192.168.1.10)PING PC2(192.168.1.20),我们发现尽管这两台PC 不属于一台交换机,但是属同一VLAN,他们可以PING 通。通过PC0(192.168.1.10)PING PC1(192.168.1.100),我们发现尽管这两台PC 同属于一台交换机,一个网段,但是由于分属不同VLAN,他们不能PING 通。

那么交换机是如何来识别数据帧是否属于不同的VLAN 呢?

IEEE 于1999 年颁布了用以标准化VLAN 实现方案的IEEE 802.1Q 协议标准草案。思科还可以使用私有协议ISL 进行封装[3],由于很少使用这里不作讨论。802.1Q VLAN 只定义了数据帧的封装格式,即,在以太网帧头中插入了4 个字节的VLAN 字段。

我们通过交换机1 的VLAN10 的PC0(192.168.1.10)PING 交换机2 的VLAN10 的PC2(192.168.1.20),两台交换机连接端口设置为trunk,可以PING 通。通过抓取协议包,我们可以看到,ICMP 包在Trunk 链路上被封装为802.1q 数据帧。

如图2 所示,IEEE802.1Q 就是在帧中插入了一个四个字节的TAG 标签[3]:

图2 802.1Q 的帧结构

(1)标记协议标致(TPID):固定值0x8100,标识该帧载有802.1Q标记信息

(2)标记控制信息(TCI):

Priority:优先级,3 比特。

Canonical Format Indicator:1 比特,表示总线型以太网,FDDI,令牌环网。

VLANID:12 比特,表示VID,范围1~4094。

从图2 也可以看出PC0 发往PC2 的数据包携带的VLANID 是10,这就表明它的VLAN 信息。

2 VLAN 标签是如何被添加

2.1 谁来添加VLAN 标签

在PC0 PING PC2 的时候,通过抓取数据包,可以看到PC0 发出的数据包不是802.1Q 数据帧,如图3 所示,但是在两台交换机的trunk链路上被封装为802.1Q 数据帧,如图4 所示,这说明是交换机对PC发送的数据重新进行封装,添加VLAN 标签。

图3 PC0 发出的数据包

图4 PC0 PING PC3 的数据在交换机0 中的变化

添加VLAN 标签,是由交换机的端口所属的VLAN ID 决定的。思科交换机端口支持三种常用模式,接入模式(access)、中继模式(trunk)、动态模式(dynamic)[4]。在同一端口上,access 模式与trunk模式只能选择其一。配置成access 模式的端口通常连接终端设备,配置成trunk 模式的端口通常用来连接网络设备。access 模式下端口只能划分给某一个 VLAN,而trunk 模式则是为了允许多个 VLAN通过而设计的,思科默认容许所有VLAN。

2.2 何时添加VLAN 标签

我们通过交换机1 的VLAN10 的PC0(192.168.1.10)PING 同一交换机1 的VLAN10 的PC4(192.168.1.30),可以PING 通,但是发现数据包在交换机中并没有被封装为802.1Q,如图5 所示。

图5 PC0 PING PC4 的数据在交换机0 中没有变化

为什么同一个VLAN 之间的PC 是可以通信,但是数据包却有的被封装为802.1Q,有的却没有?

是因为access 端口和trunk 端口对报文不同的处理方式。

(1)access 端口

接收报文:对不带VLAN 标签的报文,接收该报文。对带VLAN标签的报文,当VLAN 标签与端口VLAN 标签相同时,接收该报文;否则,丢弃该报文。

发送报文:发送无VLAN 标签的报文。

因为PC0 和PC4 都是在同一个交换机的access 口,PC0 发出的数据是不带VLAN 标签的,而PC0 和PC4 所处的交换机端口属于同样的VLAN ID,所以可以直接转发。

(2)trunk 端口

接收报文:对不带VLAN 标签的报文,打上本征 VLAN ID。对带VLAN 标签的报文,当VLAN ID 在接口允许通过的VLAN ID列表里时,接收该报文。

发送报文:当VLAN ID 与本征VLAN ID 相同,且是该接口允许通过的VLAN ID 时,去掉VLAN 标签并发送该报文;当VLAN ID与本征VLAN ID 不同,且是该接口允许通过的VLAN ID 时,保持原有VLAN 标签,发送该报文。

因为PC0 和PC2 之间需要通过trunk 链路,所以数据被打上PC0所接入的交换机端口的VLAN ID(VLAN 10),封装为802.1Q 数据帧,由交换机0 通过trunk 链路传输到交换机1。

2.3 VLAN 数据在交换机内部是否携带标签

很多书上解释:为了提高处理效率,交换机内部的数据帧一律都带有VLAN 标签,已统一方式处理。当一个数据进入交换机接口时,如果没有带VLAN 标签,该数据帧就会被标记上默认VLAN。

作者对这样的理解不认同,因为如果这样做的话,多此一举。我们来看刚才PC0 与PC4 通信,同属一台交换机,一个VLAN,他们之间通信经过交换机如果需要打标签的话,那岂不是加重交换机的计算负载吗?所以作者认为,像这样的两个主机在相互通信的时候,仅仅是查看CAM 表,而不需要执行打标签和剥离标签的动作。

3 本征VLAN

本征VLAN,本征 VLAN 常出现在trunk 类型端口的配置中,也称为Native VLAN。下面我们搭建一个网络拓扑,如图6,来理解本征VLAN。

图6 PC0 PING PC3 的数据包

PC0(192.168.1.10)属于VLAN10,PC0(192.168.1.20)属于VLAN10,PC2 和PC3 没有加入任何VLAN,也就属于默认VLAN1。交换机之间使用Trunk 链路。这时,PC2 和PC0 不能通信,这很容易理解,因为它们分属VLAN10 和VLAN1。

但是当PC0 PING PC1,可以通信,ICMP 包在trunk 链路上被封装为802.1Q。PC2 PING PC3,可以通信,但ICMP 包在trunk链路上没有被封装为802.1Q。

这就是本征VLAN 的作用,Native VLAN(本征VLAN)和其他VLAN 的另外一个区别在于:非Native VLAN 在trunk 中传输数据时要被添加VLAN 标记的(如dot1q 或者isl),但是native VLAN 在trunk中传输数据时是不进行标记的。当前的本征VLAN 是缺省VLAN,也就是VLAN1,所以属于VLAN1 的数据在通过trunk 链路,是不带VLAN 标签的。

但是我们把交换机的trunk 链路的本征VLAN 改为VLAN 10:

Switch(config)#int gigabitEthernet 0/1

Switch(config-if)#switchport trunk native VLAN 10

在这里注意,两个交换机都要配置本征VLAN,而且要一致。

这时候,PC0 PING PC1,发现ICMP 包在trunk 链路上没有被封装为802.1Q,如图7 所示。这是因为本征VLAN 已经改为PC0所处的VLAN10 了。

图7 PC0 PING PC1 的数据包

但是,PC2 PING PC3,发现ICMP 包在trunk 链路上被封装为802.1Q,其中携带的VLANID 是1,正是PC2 和PC3 所处的VLAN1,如图8 所示。

图8 PC2 PING PC3 的数据包

本征VLAN,可以理解为是不打标签的VLAN,对于在局域网中数据报文量大的VLAN,在经过交换设备老是打标签tag,然后再去标签,很浪费计算资源,指定这种VLAN 在通过trunk 链路时不加标签。另外如果帧在进入trunk 时是没有标记的,那么trunk 就会给他打上native VLAN 的标记,该帧在trunk 中就以native VLAN 的身份传输,native VLAN 是用于trunk 口的,在access 口没有native VLAN 的概念。

4 结束语

VLAN 的本质就是数据包进入VLAN 环境中,通过增加标签对数据帧进行隔离。初学者对VLAN 的划分比较容易掌握,但是对VLAN 的工作机制、相关协议并不是很清楚。作者以思科Packet Tracer 为实验平台,通过抓取协议包来分析VLAN 的工作机制,分析了数据在传输中如何表明所属VLAN,如何添加VLAN 标签以及什么是本征VLAN,以提供对VLAN 技术更清晰的认识。

猜你喜欢
本征交换机报文
基于J1939 协议多包报文的时序研究及应用
基于本征正交分解的水平轴风力机非定常尾迹特性分析
一类4×4无界算子矩阵的本征向量组的块状基性质及其在弹性力学中的应用
基于APDL 语言的本征应变法重构激光冲击强化后的残余应力场
CTCS-2级报文数据管理需求分析和实现
KP和mKP可积系列的平方本征对称和Miura变换
浅析反驳类报文要点
更换汇聚交换机遇到的问题
基于地铁交换机电源设计思考
缔造工业级的强悍——评测三旺通信IPS7110-2GC-8PoE工业交换机