当前位置: 首页 > news >正文

【通信网络】二层基础:02 VLAN基础之一

 1. VLAN概述

VLAN(虚拟局域网,Virtual Local Area Network)是一种网络技术,由IEEE 802.1标准定义,用于在物理局域网(LAN)的基础上划分出逻辑上的子网,每一个VLAN都是一个广播域。

1.1 VLAN的起源

通过之前的文章,我们知道早期的局域网是共享型的网络,存在着冲突严重、广播泛滥、无任何安全性等问题。后来随着网桥和交换机的出现,这些问题得到了一定程度的缓解,但依然存在着一下些问题。

如上图的网络拓扑中,交换设备收到一个目的地址未知的数据帧,由于二层交换设备的所有端口在一个广播域,那么该设备就会将数据帧广播到除了远端口以外所有的端口上,等待目的地址匹配的端口回复,然后通过学习应答数据帧的源地址学习到新的MAC地址。不难想象,随着网络规模的不断扩大,这样的广播帧会越来越多,对带宽造成了一定的浪费。此外,由于整个局域网属于一个广播域,那么这些广播帧就会散步整个局域网,信息安全也受到了挑战。为了解决这些问题,VLAN技术应运而生。

VLAN技术可以将物理局域网划分为一个一个的逻辑子网,每个逻辑子网是一个广播域,解决了广播帧泛滥的问题,信息安全也得到了加强。此外,网络管理员通过更改设备的VLAN配置即可实现逻辑子网的变更,也简化了网络管理。不同广播域之间,二层是互相隔离的,需要通过三层实现通信,这些在后文中都会讲述。

1.2 VLAN帧

为了实现VLAN技术,IEEE 802.1Q标准对以太帧格式进行了修改,在源MAC地址字段和协议类型字段之间加入4字节的802.1Q Tag。这样的帧被称为VLAN帧,VLAN帧的最小长度为64字节。

字段

长度

含义
DMAC6字节目的MAC地址
SMAC6字节源MAC地址
802.1Q Tag4字节

802.1Q Tag

TPID2字节

TPID(标签协议标识,Tag Protocol Identifier)表示帧类型。根据IEEE 802.1Q标准的定义,值为0x8100时表示802.1Q Tag帧,如果设备不支持802.1Q,收到此类帧会丢弃

根据IEEE 802.1ad标准的定义,802.1Q Tag可以分为S-Tag和C-Tag两种,S-Tag用来标识业务,C-Tag用来标识用户。两种Tag的TPID值不同,S-Tag的TPID值是0x88a8,C-Tag的TPID值是0x8100

MEF 26.1(ENNI Specification)标准中规定出ENNI端口的VLAN帧的Tag可以是S-Tag,意味着此时VLAN帧的TPID值不是0x8100

PRI3比特

PRI(Priority)表示帧的QoS优先级,取值范围0~7,值越大优先级越高

阻塞时,优先发送优先级高的数据帧

如果设置优先级,但没有VLAN ID,则VID字段须设置为0x000

CFI1比特

CFI (标准格式指示,Canonical Format Indicator)表示MAC地址是否为标准格式

0:标准格式,以太网帧

1:非标准格式,FDDI(Fiber Distributed Digital Interface)帧、令牌环网帧

IEEE 802.1ad标准重新定义了CFI字段,规定S-Tag里面的是DEI,C-Tag里面的是CFI

DEI(Drop Eligible Indicator,丢弃优先级指示),配合PRI字段使用,共同指示帧的丢弃优先级,也就是系统发生了拥塞时,这些报文会被优先丢弃

VID12比特

VID(VLAN ID)表示该帧所属的VLAN,可配置的VLAN ID取值范围是1~4094

协议中规定0和4095是保留的VLAN ID

Priority-tagged帧的VID字段须设置为0x000

Length/Type2字节

Length:如果该字段的值小于等于1500,指后续数据的字节长度,不包含FCS校验码的长度

Type:如果该字段的值大于等于1536,指链路直接封装的上层协议类型

Data42~1500字节

负载(可能包含填充位)

IEEE 802.1Q和IEEE 802.1ad标准中并没有定义VLAN帧的最小长度和最大长度,这里是一般厂商的用法

FCS4字节

帧校验序列FCS(Frame Check Sequence)是为接收者提供判断是否传输错误的一种方法,如果发现错误,丢弃此帧。 FCS只是通用叫法,具体的FCS还可以细分多种校验方法。在以太帧中,FCS通常采用循环冗余码校验CRC(Cyclical Redundancy Check)。

2. VLAN的端口类型

交换设备可以通过用户配置,将二层端口配置成不同类型的端口(Access/Trunk/Hybrid),并且可以配置端口所属的VLAN。那么,不同类型的端口分别有什么特点呢?端口的转发行为又是什么样呢?下面对其进行简要的介绍。

2.1 Access口

Access口只能属于一个VLAN,即Access VLAN(接入VLAN),也称为PVID缺省VLAN),一般用于连接计算机的端口,因为计算机之类的终端一般不能识别带802.1Q Tag的帧。下面,我们简单讲述一下Access口的转发过程。

(1)Access口收到数据帧

当Access口收到Untagged帧时,在数据帧中加一层802.1Q Tag后,再进行转发(场景①),Tag中的VID值填的就是Access口的PVID。

当Access口收到Tagged帧时,会检查Tag中的VID是否是Access口的PVID。如果是PVID,接收并转发(场景②);如果不是PVID,丢弃(场景③)。

(2)Access口发送数据帧

当Access口发送数据帧时,需要先检查数据帧中802.1Q Tag的VID是否是Access口的PVID,如果是PVID,剥除802.1Q Tag之后再发出(场景①);如果不是PVID,不发出(场景②)。

说明:Untagged帧指的是没有带802.1Q Tag的数据帧,Tagged帧指的是带了802.1Q Tag的数据帧,即VLAN帧。下文均是这样,不在赘述。

2.2 Trunk口

Trunk口可以属于多个VLAN,但其中只能配置一个PVID(缺省VLAN)。此外,可以配置多个Allowed VLAN许可VLAN,PVID广义上也属于许可VLAN,我们这里分开描述),一般用于交换机互连的端口。下面,我们简单讲述一下Trunk口的转发过程。

(1)Trunk口收到数据帧

当Trunk口收到Untagged帧时,在数据帧中加一层802.1Q Tag后,再进行转发(场景①),Tag中的VID值填的就是Trunk口的PVID。

当Trunk口收到Tagged帧时,会检查Tag中的VID是否在Trunk口的许可VLAN列表里。如果在许可VLAN列表,接收并转发(场景②);如果不在许可VLAN列表,丢弃(场景③)。(如果Tag中的VID是PVID,属于在许可列表里的逻辑。 )

(2)Trunk口发送数据帧

当Trunk口发送数据帧时,需要先检查数据帧的802.1Q Tag中的VID值,是否是Trunk口的PVID或者是否在Trunk口的许可VLAN列表里。如果是PVID,剥除802.1Q Tag之后再发出(场景①);如果不是PVID,但是在Trunk口的许可VLAN列表里,直接发出(场景②);如果既不是PVID,也不在Trunk口的许可VLAN列表里,不发出(场景③)。

2.3 Hybrid口

Hybrid口可以属于多个VLAN,但其中只能配置一个PVID(缺省VLAN)。此外,可以配置多个Allowed VLAN(许可VLAN,PVID广义上也属于许可VLAN,我们这里分开描述)。与Trunk口不同之处在于,Trunk口的带许可VLAN的帧发出时不会剥除Tag,而Hybrid口可以手动配置许可列表中哪些VLAN不剥除Tag(Tagged VLAN),哪些VLAN要剥除Tag(Untagged VLAN)。所以,相对于Trunk口,Hybrid口更加灵活,一般用于交换机互连的端口。下面,我们简单讲述一下Hybrid口的转发过程。

(1)Hybrid口收到数据帧

当Hybrid口收到Untagged帧时,在数据帧中加一层802.1Q Tag后,再进行转发(场景①),Tag中的VID值填的就是Hybrid口的PVID。

当Hybrid口收到Tagged帧时,会检查Tag中的VID是否在Hybrid口的许可VLAN列表里。如果在许可VLAN列表,接收并转发(场景②);如果不在许可VLAN列表,丢弃(场景③)。(如果Tag中的VID是PVID,属于在许可列表里的逻辑。 )

(2)Hybrid口发送数据帧

当Hybrid口发送数据帧时,需要先检查数据帧的802.1Q Tag中的VID值,是否是Hybrid口的PVID或者是否在Hybrid口的许可VLAN列表里。如果是PVID,剥除802.1Q Tag之后再发出(场景①);如果不是PVID,但是在Hybrid口的Untagged VLAN列表里,剥除802.1Q Tag之后再发出(场景①);如果不是PVID,在Hybrid口的Tagged VLAN列表里,直接发出(场景②);如果既不是PVID,也不在Hybrid口的许可VLAN列表里,不发出(场景③)。

2.4 三种端口转发行为比较

综前文所述,三种端口的特点比较如下表。

端口

类型

作用端口收到帧端口发送帧

Untagged帧

Tagged帧

Access

只属于一个VLAN,即PVID,一般用于连接终端的端口

加PVID Tag,接收

1. Tag中VID是PVID,接收

2. Tag中VID不是PVID,丢弃

1. Tag中VID不是PVID,丢弃

2. Tag中VID是PVID,剥Tag发出

Trunk

可以属于一个PVID和多个许可VLAN(均为Tagged VLAN),一般用于交换机互连的端口

加PVID Tag,接收

1. Tag中VID在许可列表,接收

2. Tag中VID不在许可列表,丢弃

1. Tag中VID不是PVID,也不在许可列表,丢弃

2. Tag中VID是PVID,剥Tag发出

3. Tag中VID在许可列表,发出

Hybrid可以属于一个PVID和多个许可VLAN(分为Untagged VLAN和Tagged VLAN),一般用于交换机互连的端口加PVID Tag,接收

1. Tag中VID在许可列表,接收

2. Tag中VID不在许可列表,丢弃

1. Tag中VID不是PVID,也不在许可列表,丢弃

2. Tag中VID是PVID,剥Tag发出

3. Tag中VID为Untagged,剥Tag发出

4. Tag中VID为为Tagged,发出

3. VLAN通信

上文中,我们介绍了VLAN技术的起源、VLAN域的端口类型以及不同类型的端口的转发行为。那么,知道了这些,我们需要回到根本的问题上,就是VLAN内用户之间的通信。

如图所示,有A~D四个用户,被划分到两个VLAN中,A~C在VLAN 10中,D在VLAN 20中,那么他们之间怎么互相通信呢?可以分为三种场景,即VLAN内不跨设备通信(A和B之间)、VLAN内跨设备通信(A和C之间)以及VLAN间通信(C和D之间)三种场景。VLAN间通信属于三层,在后续的文章中会介绍,这里只讲前面两种场景。(较为详细的二层转发后面也会有文章讲解。)

3.1 ICMP协议和ARP协议

下文讲述的通信过程中会涉及到ARP地址解析协议,Address Resolution Protocol)协议和ICMP因特网控制报文协议,nternet Control Message Protocol),它们属于网络层的协议。在此我们简单讲述下其工作原理,不展开详细的阐述。

3.1.1 ICMP协议

我们知道,终端设备有一个IP地址(比如我们的电脑),两台终端(A和B)是否能通信可以使用ICMP协议去简单的验证。如A向B发送ICMP请求报文,如果A最终收到了B发送的ICMP应答报文,那么意味着A和B之间是可达的;如果A未收到B发送的ICMP应答报文,那么意味着A和B之间是不可达的。ICMP是网络层的协议,报文在数据链路层,同样是用以太帧去承载的,即数据帧中包含了DMAC和SMAC。

3.1.2 ARP协议

那么根据前文我们了解到,ICMP报文中使用以太帧去承载,那么就需要DMAC,但是如果我们不知道DMAC怎么办呢?这时候就需要ARP协议登场了。A可以先发送一个ARP请求报文,交换设备会将该报文会在广播域广播,B收到后会发送ARP应答报文(ARP报文中包含了DMAC和SMAC、源设备IP和目的设备IP,所以B能知道报文是发给自己的,也会将自己的MAC地址应答回去)。这样A就知道了B的MAC地址,后续发送ICMP报文就可以填DMAC了。(注意,这里指的是纯二层的场景,在包含三层的场景中,会更换二层头,后面的文章会详细介绍,这里不再赘述。)

3.2 VLAN内不跨设备通信

A、B都属于VLAN 10,而且与一台交换机互连,我们分析下这种场景A和B之间的通信如何实现。

因为A和B被划分到VLAN 10里,所以SW1的PORT 2和PORT 3端口需要被设置成Access口,并且PVID配置成10。假设A的IP地址是IP A,B的地址是IP B,我们分析下A和B之间的通信过程。(交换设备收到数据帧时,会学习MAC表。)

3.3 VLAN内跨设备通信

A、C都属于VLAN 10,但连接的交换机是两台,我们分析下这种场景A和C之间的通信如何实现。

因为C也被划分到VLAN 10里,所以SW2的PORT 2端口需要被设置成Access口,并且PVID配置成10。SW1和SW2的PORT 1端口配置成Trunk口,许可VLAN列表包含10。假设A的IP地址是IP A,C的地址是IP C,我们分析下A和C之间的通信过程。(交换设备收到数据帧时,会学习MAC表。)

4. VLAN的划分方式(扩展介绍)

在网络上划分VLAN,对网络管理员是一项很重要的工作。那么,有哪些VLAN的划分方式呢?下文我们对此进行简单的分析。

4.1 基于端口划分

基于交换机端口分配VLAN,这种划分方式很简单,但是一旦网络物理拓扑变更,就需要重新分配VLAN。基于端口划分VLAN是在物理层上的划分动作。

4.2 基于MAC地址划分

基于帧的源MAC地址分配VLAN,即使用户物理位置移动了,也不需要重新分配VLAN。但是这样也带来了另一个问题,就是在网络初始化配置的时候,就要将所有用户都配置一遍,如果用户量很大的话,显然会极大的增加配置的复杂度。另外,这种方法也会带来交换机执行效率的降低。因为这样可能会出现一个端口加入大量VLAN的场景,这样针对广播帧的限制就显得很有限。而且,如果网络设备的网卡发生了更换(即MAC地址发生了变更),VLAN就需要重新配置。基于MAC地址划分VLAN是在数据链路层上的划分动作。

4.3 基于子网划分

基于报文的源IP地址分配VLAN,这样可以实现对同一网段的用户进行统一的管理。这样做的好处是,用户物理位置变化了,不需要重新分配VLAN。而且可以根据协议类型去划分VLAN,这对于网络管理者也很重要。基于子网划分VLAN是在网络层上的划分动作。

4.4 基于用户划分

通过上面的三种划分方式,我们可以发现,随着VLAN划分的基础层级越来越高(从物理层到数据链路层,再到网络层),划分变得越来越灵活,对网络管理员也越来越方便。此外,我们还可以基于用户定义、非用户授权来划分VLAN,根据具体的网络用户的特别要求来设计和划分VLAN。非VLAN的用户想要访问VLAN时,需要提供用户密码,得到VLAN的管理认证后才能加入VLAN。


http://www.mrgr.cn/news/80201.html

相关文章:

  • 数据可视化的Python实现
  • debian12学习笔记
  • Hi3559AV100新版
  • Flink keyBy算子的分区规则
  • 深入解析 JavaScript 中的 Blob 对象:二进制数据处理的核心
  • spring boot之@Import注解的应用
  • 深入理解RSA算法:核心概念与原理详解
  • Linux shell的七大功能 --- history
  • 测试工程师八股文04|计算机网络 和 其他
  • MySQL 存储过程与函数:增强数据库功能
  • Quad Remesher使用教程
  • 区间和并—acwing
  • backtesting.py介绍和相关资料
  • 29.在Vue 3中使用OpenLayers读取WKB数据并显示图形
  • 学习笔记069——Java集合框架
  • 理解数据结构 hashtable的简易理解思路
  • 米哈游前端面试题及参考答案
  • [OpenGL] Transform feedback 介绍以及使用示例
  • More Effective C++之操作符operators
  • gpu硬件架构
  • 《拉依达的嵌入式\驱动面试宝典》—前言目录篇
  • 操作系统内存管理
  • c语言数据结构与算法--简单实现线性表(顺序表+链表)的插入与删除
  • Leetcode二叉树部分笔记
  • 单片机最小系统
  • Vue 组件化开发:构建高质量应用的核心