一、什么是vlan
VLAN是Virtual Local Area Network(虚拟局域网)的缩写,是一种将物理网络划分为逻辑网络的技术。它通过软件的方式就可以将一个物理局域网(LAN)划分为多个虚拟局域网,每个虚拟局域网相互独立,互不干扰。其最大特点是在组成逻辑网络时无需考虑用户或者设备在网络中的物理位置。
1.1 为什么要划分vlan—分割广播域
交换机能够隔离冲突域,但不能隔离广播域,通过多个交换机连接在一起的所有计算机都在一个广播域中,任何一台计算机发送广播包,其他计算机都会受到。
如图2所示,在一个5台交换机连接大量计算机的网络中。假设计算机A需要与计算机B通信,在基于以太网的通信中,计算机A必须通过发送ARP请求来尝试获得计算机B的MAC地址。因此计算机A必须先广播“ARP请求信息”。交换机1收到广播帧(ARP请求)后,会将它转发给除接收端口外的其他所有端口,也就是广播帧泛洪(Flooding)。接着,交换机2收到广播帧后也会泛洪;交换机3、4、5也同样会泛洪。最终ARP请求会被转发到同一网络中的所有计算机上。
计算机A发出ARP请求的目的只是为了获取计算机B的MAC地址,可是数据帧却传遍整个网络,导致所有的计算机都收到了它。而这个广播消息的传播必然会消耗大量的网络带宽并且收到广播消息的计算机还要使用一部分CPU时间来处理它。这时问题体现出来了:缺少转发的控制手段,于是VLAN就应运而生了。
1.2 什么时候使用广播信息?
利用TCP/IP协议栈通信时,除了前面出现的ARP外,还有DHCP、RIP等很多协议是基于广播或者组播方式工作的,也存在广播帧泛洪的情况。
- ARP请求:建立IP地址和MAC地址的映射关系。ARP广播,是在需要与其他主机通信时发出的。
- RIP:一种路由协议。使用RIP作为路由协议时,每隔30秒路由器都会对邻近的其他路由器广播一次路由信息。
- DHCP:用于自动设定IP地址的协议。当客户机请求DHCP服务器分配IP地址时,就必须发出DHCP的广播。
可以看到广播帧会非常频繁地出现。因此,在设计LAN时,如何有效地分割广播域非常重要,而vlan技术是一种隔离广播域的重要手段。
1.3 vlan用途以及优势
- 控制不必要广播报文的扩散,有效防止广播风暴。将网络划分为多个VLAN可减少参与广播风暴的设备数量。每一个VLAN是一个广播域,这样每一个广播域中的计算机数量就大为减少。提高了网络带宽的利用率,也减少了主机接收不必要的广播造成资源浪费。
- 增强网络安全。VLAN间的所有数据包是相互隔离的,利用VLAN技术将含有敏感数据的用户组与网络的其他部分隔离,限制不同工作组之间用户的互访,降低私密信息泄露的可能性。
- 简化网络管理。可以不受网络用户的物理位置限制而根据用户的需求进行逻辑组网。管理员可以很容易地修改配置VLAN,而不需要改变物理拓扑,大大提高了管理效率。例如,当增加用户时只要将其所连接的交换机端口指定到所属的vlan中即可。
二、实现VLAN的机制
前面介绍了,在不使用VLAN技术的情况下,广播帧都会被转发给除接收端口外的所有其他端口。下面来看交换机如何使用VLAN分割广播域的。
2.1 单交换机上多个VLAN
假设交换机上连接了两个部门的计算机,A、B、C、D是销售部的计算机,E、F、G、H是研究部的计算机。现在根据安全性要求创建不同的VLAN,将安全性要求一致的计算机放到同一个VLAN中,即销售部的计算机划分到VLAN 1,将研发部的计算机划分到VLAN 2。如下图所示。
如果现在A发出广播帧的话,交换机就只会把它转发给同属于VLAN 1的其他端口。这样,VLAN通过限制广播帧转发的范围分割了广播域。
如果计算机A给计算机D发送一个帧,那么它的流向是:帧进入1端口,加上VLAN 1的标记,从2端口出去时,去掉VLAN 1的标记。计算机发送和接收的帧是不带VLAN 标记的。
也就是说,通过VLAN技术将不同的设备置于同一个广播域之内,就可以减少不必要的广播信息。不同的广播域之间如果没有路由器或三层交换机是没有办法互访的。通过划分VLAN也就实现了广播流量的控制、信息传递的控制。
2.2跨交换机上的多个VLAN将在下面的Trunk技术中介绍
三、交换机的端口类型
交换机的端口类型或者说接口模式一般有Access和Trunk两种,不同的端口具有不同的使用场景。
相关定义:
- VLAN ID:虚拟局域网ID,主要用来标识不同的VLAN。
- 交换机各端口的缺省VLAN ID
1.在思科交换机上称为Native VLAN,即本征VLAN。
2.在华为交换机上称为Port VLAN ID,即端口VLAN ID,简记为PVID。每个端口有且只有一个PVID,默认情况下端口的PVID都为1(即端口属于VLAN 1)。对于Access接口,接口所属VLAN就是该接口的PVID;对于Trunk接口,默认的PVID是 1(VLAN 1),用户可更改。 - VLAN Tag:带标签数据帧,将一个VLAN标签加入到以太网帧中,这个标签标识了该帧所属vlan的相关信息。
- VLAN Untag:无标签数据帧,不携带 tag 的数据帧,其不属于任何vlan,没有vlan标记。
3.1 Access
特点:
- 接入端口一般用于连接主机、路由器及其他终端设备,也就是用于对接处理不了tag数据的这种终端;
- 接入端口只能属于一个VLAN,仅向该VLAN转发数据帧;
- 接入端口的PVID值与端口所属VLAN的ID相同(默认为1)。
既然Access接口一般用于连接主机,那么就要决定与之相连接的交换机端口属于哪一个VLAN,也就是如何划分VLAN。
3.1.1 基于端口的VLAN
基于端口的VLAN属于静态VLAN,是一种最简单、最有效且使用最广泛的划分vlan的方法。管理员以手动的方式把交换机的某一端口指定为某一VLAN的成员。如图3所示,通过网络管理员手动配置,交换机1、3端口属于VLAN 1,交换机2、4端口属于VLAN 2。
基于端口划分VLAN的缺点是当用户从一个端口移动到另一个端口时,网络管理员需要重新配置。
3.1.2 基于MAC地址的VLAN
该方法使用VLAN成员策略服务器(VMPS)根据连接到交换机端口的设备的源MAC地址,动态地将端口分配给VLAN。当设备移动时,交换机能够自动识别其MAC地址并将其所连端口配置到相应VLAN。
基于MAC地址的VLAN是一种动态划分VLAN的方法。动态VLAN可以根据每个端口所连的计算机,随时改变端口所属的VLAN。
划分VLAN的方法可以是灵活多变的,就目前来看,基于端口的VLAN划分方法在实际的网络中应用较为广泛。下面总结了常见的VLAN划分方法。
3.2、Trunk
上面介绍过连接在单个交换机上的计算机设置VLAN时的情况。假设有下图所示的网络,且需要将不同楼层的A、C和B、D设置为同一个VLAN。那么,当一个VLAN跨过不同的交换机时,属于同一VLAN的计算机如何实现通信?
-
方法一:最简单的方法就是在交换机之间为每一个VLAN都单独设置一条连线,如下图。
显然这个方法在有多个VLAN时会占用交换机太多的端口,而且扩展性很差。交换机端口的利用效率低是对资源的一种浪费、也限制了网络的扩展。为了避免这种低效率的连接方式,人们希望不管有多少个VLAN ,都可以汇聚到一根网线上传输过来。这就是下面所要介绍的Trunk技术。 -
方法二:Trunk
特点:- Trunk端口是指能够转发多个vlan的端口,即Trunk可以属于多个VLAN;
- Trunk端口常用于干道(中继)链路,也就是两台交换机相连的链路 / 单臂路由场景 / 连接服务器的链路(现在的服务器大多具备处理标记的能力);
- 用户可以设置干道端口的PVID值,默认情况下,干道端口PVID值为1
- 交换机之间通过Trunk端口直接相连的链路称为Trunk链路。它可以实现在一条物理线路上传送多个VLAN的信息。
有时候同一个部门的计算机需要连接到不同的交换机,那么Trunk链路是如何实现跨交换机VLAN的。
如下图所示的网络中,计算机连接交换机的链路称为Access链路,其链路上的帧不带VLAN标签。Trunk链路上的帧带VLAN 标签,因此,通过Trunk链路传递帧,VLAN信息不会丢失。比如主机A给主机C发送一个帧,那么帧传递的大致过程是:
- ① A发送的数据帧在到达交换机1时,在数据帧中插入了表示属于红色VLAN的标签。
- ② 带标签的VLAN通过Trunk链路到达交换机2,交换机2收到数据帧后,经过检查VLAN标签发现这个数据帧是属于红色VLAN的。
- ③ 因此剥离插入的VLAN标签,然后根据需要将复原的数据帧只转发给其他属于红色VLAN的端口
这时的转发,是指将数据帧中的目标MAC地址与MAC地址表匹配后,只转发给目标MAC地址所连的端口。只有当数据帧是一个广播帧、多播帧或是目标不明的帧时,它才会被转发到所有属于红色VLAN的端口。
四、Access和Trunk端口处理帧的规则
接下来看当一个VLAN帧出入交换机Access、Trunk端口时详细的数据处理规则。Access和Trunk是标准技术,不管思科、华为、华三的设备都是可以通用的,因为实现的机制一样,大家都遵循一样的协议。
4.1 Access端口
在交Access接收端口:
- 当Access接口从链路上收到一个Untagged帧后,它会在这个帧中添加VID为PVID的Tag,然后对得到的Tagged帧进行转发(泛洪、点到点转发、丢弃)。
- 当Access接口从链路上收到一个Tagged帧后,交换机会检查这个帧中的Tag(标签)中的VID是否与本端口的PVID相同:
如果相同,则接收这个Tagged帧
如果不同:直接丢弃这个Tagged帧
在Access送出端口:
- 当一个Tagged帧从交换机的其他端口到达Access端口后,交换机会检查这个帧的Tag中的VID是否与PVID相同。
如果相同,则将这个Tagged帧中的Tag进行剥离,然后将得到的Untagged帧转发出去
如果不同,则直接丢弃这个Tagged帧
4.2 Trunk端口
对于Trunk端口来说,除了配置PVID(默认PVID是1)外,还必须配置允许通过的VLAN ID列表
(思科交换机的trunk默认是允许所有VLAN通过的,华为、H3C交换机的trunk默认只允许vlan1的数据通过。)
在Trunk接收端口:
-
当从链路上收到一个无标签的帧,为这个帧打上VID为PVID的标签,然后查看PVID是否在允许通过的VLAN ID列表
如果在,则对这个带标签的帧进行转发操作
如果不在,丢弃这个带标签的帧 -
当从链路上收到一个带标签的帧,交换机检查这个帧的标签中的VID是否在允许通过的VLAN ID列表
如果在,则对这个帧进行转发操作
如果不在,丢弃该帧
在Trunk送出端口
- 当一个带标签的帧从交换机的其他端口到达Trunk端口后,检查这个帧的标签中的VID是否在允许通过的VLAN ID列表:
如果在,则检查这个帧的VID是否与PVID相同:
如果VID与PVID相同,则剥离数据帧的标记并从这个接口发送出去(到链路上)
如果VID与PVID不同,则保持原有的标签,直接将它发送出去(到链路上)
如果不在,丢弃该帧
或者看下图总结:
4.3 一类特殊的VLAN:默认VLAN
Trunk端口送出数据帧时,当VID=PVID时要剥离帧中的标签,这是因为使用Trunk帧标记技术重新封装原始帧,将直接导致帧头变大,从而会影响链路的传输效率。因此可以在Trunk链路上指定一个默认VLAN 或者是本征VLAN(默认是VLAN 1),来自本征VLAN 的数据帧通过Trunk链路时不再打入标签,即不再重新封装,以原有的帧格式传输。
每个交换机都会有一个默认的VLAN,这个VLAN是不会打标签的,并且有且只能有一个默认的VLAN。这是因为:假设有两个默认VLAN,那么这两个默认VLAN都不打标签,而trunk链路就是为了区分VLAN的,如果有两个没打标签的帧交换机就无法区分。
五、Trunk帧标记技术
有两种常见的Trunk帧标记技术:ISL和IEEE802.1Q
5.1 ISL
ISL技术为Cisco专有,它在原有帧上重新加了一个26字节的帧头,并且重新生成了4字节的帧校验序列。封装帧格式如下图。ISL实际使用很少,Cisco低端交换机也不支持。
#pic_center
5.2 IEEE802.1Q
IEEE802.1Q技术是国际标准,得到所有厂家的支持。该技术在以太网帧的帧格式中插入了一个4字节的标识符,称为VLAN 标签(Tag),如下图。插入VLAN标签后,帧最后的帧校验序列FCS需要重新计算。
当数据链路层检测到源MAC地址字段后面的两个字节的值是0x8100时,就知道该帧是一个插入了4字节VLAN标签的802.1Q帧。
VLAN标签各字段解释:
不同VLAN之间如何通信
如果两个相同VLAN之间需要通信,可以直接进行通信;如果不同VLAN之间需要通信,需要通过路由器或者三层交换机进行转发。在进行VLAN之间的通信时,需要对路由器或者三层交换机进行配置,将不同的VLAN划分到不同的子网,并进行路由器配置,以实现不同子网之间的通信。
六、总结
- 在 VLAN 技术中,通过给以太网帧附加一个标签(Tag)来标记这个以太网帧能够在哪个VLAN 中传播。这样,交换机在转发数据帧时,不仅要查找 MAC 地址来决定转发到哪个端口,还要检查端口上的 VLAN 标签是否匹配。
- 利用VLAN后,我们可以在免于改动任何物理布线的前提下,自由进行网络的逻辑设计。如果所处的工作环境恰恰需要经常改变网络布局,那么利用VLAN的优势就非常明显了。
- 链路上传输的帧,可能是带标签的Tagged帧,也可能是不带标签的Untagged帧。但一个交换机内部不同接口之间传输的帧一定是Tagged帧。
- Trunk端口与Access端口有相似的地方:当Trunk端口收到一个不带Tag报文的数据,会打上PVID,前提是该PVID在允许通过的列表里面。当帧从Trunk端口发出去的时候,如果该数据带有Tag,与PVID相同,且在允许列表里面,会执行一个动作,剥离Tag发送出去。是不是与Access的规则很相似。
- Access模式下,一个接口只能加入一个VLAN,适合对接处理不了Tag帧的设备,这样在进入的时候打上对应的Tag,出来的时候,剥离Tag交给终端设备,既可以完成通信,又实现了VLAN带来的效果。
- Trunk模式下,一个接口可以传递多个VLAN,可以理解属于多个VLAN下,适合用于交换机之间对接,只要列表允许通过,Tag保持不变(只有untag的数据会打上PVID的报文进入,以及出去的时候数据VLAN ID=PVID会剥离)。