【通信网络】二层基础: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字节。
字段 | 长度 | 含义 |
DMAC | 6字节 | 目的MAC地址 |
SMAC | 6字节 | 源MAC地址 |
802.1Q Tag | 4字节 | 802.1Q Tag |
TPID | 2字节 | 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 |
PRI | 3比特 | PRI(Priority)表示帧的QoS优先级,取值范围0~7,值越大优先级越高 阻塞时,优先发送优先级高的数据帧 如果设置优先级,但没有VLAN ID,则VID字段须设置为0x000 |
CFI | 1比特 | 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字段使用,共同指示帧的丢弃优先级,也就是系统发生了拥塞时,这些报文会被优先丢弃 |
VID | 12比特 | VID(VLAN ID)表示该帧所属的VLAN,可配置的VLAN ID取值范围是1~4094 协议中规定0和4095是保留的VLAN ID Priority-tagged帧的VID字段须设置为0x000 |
Length/Type | 2字节 | Length:如果该字段的值小于等于1500,指后续数据的字节长度,不包含FCS校验码的长度 Type:如果该字段的值大于等于1536,指链路直接封装的上层协议类型 |
Data | 42~1500字节 | 负载(可能包含填充位) IEEE 802.1Q和IEEE 802.1ad标准中并没有定义VLAN帧的最小长度和最大长度,这里是一般厂商的用法 |
FCS | 4字节 | 帧校验序列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。