VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接互通,从而将广播报文限制在一个VLAN内。
目的
以太网是一种基于CSMA/CD(Carrier Sense Multiple Access/Collision Detection)的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。通过交换机实现LAN互连虽然可以解决冲突严重的问题,但仍然不能隔离广播报文和提升网络质量。
在这种情况下出现了VLAN技术,这种技术可以把一个LAN划分成多个逻辑的VLAN,每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,这样,广播报文就被限制在一个VLAN内。
图5-1 VLAN示意图
是一个典型的VLAN应用组网图。两台交换机放置在不同的地点,比如写字楼的不同楼层。每台交换机分别连接两台服务器,这四台服务器分别属于两个不同的VLAN。
受益
使用VLAN能给用户带来以下受益:
· 限制广播域:广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。
· 增强局域网的安全性:不同VLAN内的报文在传输时是相互隔离的,即一个VLAN内的用户不能和其它VLAN内的用户直接通信。
· 提高了网络的健壮性:故障被限制在一个VLAN内,本VLAN内的故障不会影响其他VLAN的正常工作。
· 灵活构建虚拟工作组:用VLAN可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活。
5.2 原理描述
介绍VLAN的实现原理。
5.2.1 VLAN基本概念
VLAN的帧格式
传统的以太网数据帧在目的mac地址和源MAC地址之后封装的是上层协议的类型字段,如图5-2所示。
图5-2 传统的以太网数据帧格式
IEEE 802.1Q是虚拟桥接局域网的正式标准,对Ethernet帧格式进行了修改,在源MAC地址字段和协议类型字段之间加入4字节的802.1Q Tag,如图5-3所示。
图5-3 802.1Q帧格式
802.1Q Tag包含4个字段,各字段解释如表5-1所示:
表5-1 802.1Q Tag各字段含义介绍
每台支持802.1Q协议的交换机发送的数据包都会包含VLAN ID,以指明交换机属于哪一个VLAN。因此,在一个VLAN交换网络中,以太网帧有以下两种形式:
· 有标记帧(tagged frame):加入了4字节802.1Q Tag的帧
· 无标记帧(untagged frame):原始的、未加入4字节802.1Q Tag的帧
链路类型
如图5-4所示,VLAN中有以下两种链路类型:
· 接入链路(Access Link):用于连接用户主机和交换机的链路。通常情况下,主机并不需要知道自己属于哪个VLAN,主机硬件通常也不能识别带有VLAN标记的帧。因此,主机发送和接收的帧都是untagged帧。
· 干道链路(Trunk Link):用于交换机间的互连或交换机与路由器之间的连接。干道链路可以承载多个不同VLAN数据,数据帧在干道链路传输时,干道链路的两端设备需要能够识别数据帧属于哪个VLAN,所以在干道链路上传输的帧都是Tagged帧。
图5-4 链路类型示意图
说明:
· 对于主机来说,它不需要知道VLAN的存在。主机发出的是untagged报文。
· 交换设备接收到报文后,根据配置规则(如接口信息)判断出报文所属的VLAN后,再进行处理。
· 如果报文需要通过另一台交换机转发,则该报文必须通过干道链路透传到对端交换设备上。为了保证其它交换设备能够正确处理报文中的VLAN信息,在干道链路上传输的报文必须都打上了VLAN标记。
· 当交换设备最终确定报文出接口后,将报文发送给主机前,需要将VLAN标记从帧中删除,这样主机接收到的报文都是不带VLAN标记的以太网帧。
所以,一般情况下,干道链路上传输的都是tagged帧,接入链路上传送到的都是untagged帧。这样处理的好处是:网络中配置的VLAN信息可以被所有交换设备正确处理,而主机不需要了解VLAN信息。
接口类型
在802.1Q中定义VLAN帧后,将接口分为4类:
· Access接口
如所示,Access接口是交换机上用来连接用户主机的接口,它只能连接接入链路。仅仅允许唯一的VLAN ID通过本接口,这个VLAN ID与接口的缺省VLAN ID相同,Access接口发往对端设备的以太网帧永远是不带标签的帧。
· Trunk接口
如所示,Trunk接口是交换机上用来和其他交换机连接的接口,它只能连接干道链路,允许多个VLAN的帧(带Tag标记)通过。
· Hybrid接口
如所示,Hybrid接口是交换机上既可以连接用户主机,又可以连接其他交换机的接口。Hybrid接口既可以连接接入链路又可以连接干道链路。Hybrid接口允许多个VLAN的帧通过,并可以在出接口方向将某些VLAN帧的Tag剥掉。
图5-5 接口示意图
· QinQ接口
QinQ(802.1Q-in-802.1Q)接口是使用QinQ协议的接口。QinQ接口可以给帧加上双重Tag,即在原来Tag的基础上,给帧加上一个新的Tag,从而可以支持多达4094×4094个VLAN,满足网络对VLAN数量的需求。
QinQ帧的格式如图5-6所示。外层的标签通常被称作公网Tag,用来存放公网的VLAN ID。内层标签通常被称作私网Tag,用来存放私网的VLAN ID。
图5-6 QinQ帧格式
QinQ协议的详细描述,请参见QinQ。
缺省VLAN
每种类型的接口都可以配置一个缺省VLAN,对应的VLAN ID为PVID(Port Default VLAN ID)。接口类型不同,缺省VLAN的含义也有所不同。
关于不同类型接口的PVID以及对以太网帧的处理方式请参见各类型接口对数据帧的处理方式。
VLAN的划分
划分VLAN是VLAN的基本配置,VLAN划分成功后,即可实现同一VLAN中的用户可以互相通信。不同的场景采用不同的划分方式,如表5-2所示。
表5-2 VLAN划分方式差异表
设备同时支持多种方式划分VLAN,规定的优先使用顺序是(优先级高低顺序从左至右):基于MAC地址划分VLAN或基于子网划分VLAN->基于协议划分VLAN->基于接口划分VLAN。
· 如果报文同时匹配了基于MAC地址划分VLAN和基于子网划分VLAN,缺省情况下,优先基于MAC地址划分VLAN。但是可以通过命令改变基于MAC地址划分VLAN和基于子网划分VLAN的优先级,从而决定优先划分VLAN的方式。
· 基于接口划分VLAN的优先级最低,但却是最常用的VLAN划分方式。
5.2.2 VLAN通信原理
VLAN基本通信原理
为了提高处理效率,交换机内部的数据帧一律都带有VLAN Tag,以统一方式处理。当一个数据帧进入交换机接口时,如果没有带VLAN Tag,且该接口上配置了PVID(Port Default VLAN ID),那么,该数据帧就会被标记上接口的PVID。如果数据帧已经带有VLAN Tag,那么,即使接口已经配置了PVID,交换机不会再给数据帧标记VLAN Tag。
由于接口类型不同,交换机对数据帧的处理过程也不同。下面根据不同的接口类型分别介绍。
表5-3 各类型接口对数据帧的处理方式
说明:
由于设备所有的接口都默认加入VLAN1,因此当网络中存在VLAN1的未知单播、组播或者广播报文时,可能会引起广播风暴。对于不需要加入VLAN1的接口及时退出VLAN1,避免环路。
VLAN内跨越交换机通信原理
有时属于同一个VLAN的用户被连接在不同的交换机上。当VLAN跨越交换机时,就需要交换机间的接口能够同时识别和发送跨越交换机的VLAN报文。这时,需要用到Trunk Link技术。
Trunk Link有两个作用:
· 中继作用
把VLAN报文透传到互联的交换机。
· 干线作用
一条Trunk Link上可以传输多个VLAN的报文。
图5-7 Trunk Link通信方式示意图
例如在图5-7所示的网络中,为了让DeviceA和DeviceB之间的链路既支持VLAN2内的用户通讯又支持VLAN3内的用户通讯,需要配置连接接口同时加入两个VLAN。即应配置DeviceA的以太网接口Port2和DeviceB的以太网接口Port1同时加入VLAN2和VLAN3。
当用户UserA发送数据给用户UserB时,数据帧的发送过程如下:
1. 数据帧首先到达DeviceA的接口Port4。
2. 接口Port4给数据帧加上Tag,Tag的VID字段填入该接口所属的VLAN的编号2。
3. DeviceA查询自己的MAC地址表中是否存在目的地址为DeviceB的MAC地址的转发表项。
· 如果存在,DeviceA将数据帧转发给接口Port2。
· 如果不存在,DeviceA会将数据帧发送到本设备上除port4接口外的所有属于VLAN2的接口。
4. 接口Port2将帧转发到DeviceB上。
5. DeviceB收到数据帧后,会查询自己的MAC地址表中是否存在目的地址为UserB的MAC地址的转发表项。
· 如果存在,DeviceB会将数据帧发送给出接口Port3。
· 如果不存在,DeviceB会将数据帧发送到本设备上除port1接口外的所有属于VLAN2的接口。
6. 接口Port3将数据帧发送给UserB。
VLAN间通信原理
划分VLAN后,不同VLAN之间不能直接通信。如果要实现VLAN间通信,可以采取以下方案:
· 子接口
如图5-8所示,DeviceA为支持配置子接口的三层设备,DeviceB为二层交换设备。LAN通过DeviceB的以太网接口(交换式以太网接口)与DeviceA的以太网接口(路由式以太网接口)相连。用户主机被划分到两个VLAN:VLAN2和VLAN3。可通过如下配置实现VLAN间互通。
· 在DeviceA的以太网接口(与DeviceB相连的以太网接口)上创建2个子接口Port1.1和Port2.1,并配置802.1Q封装与VLAN2和VLAN3分别对应。
· 配置子接口的IP地址,保证两个子接口对应的IP地址路由可通。
· 将DeviceB与DeviceA相连的以太网接口类型配置为Trunk或Hybrid类型,允许VLAN2和VLAN3的帧通过。
· 将用户设备的缺省网关设置为所属VLAN对应子接口的IP地址。
图5-8 通过子接口实现VLAN间的通信
主机A和C的通信过程如下:
1. 主机A将主机C的IP地址和自己所在网段进行比较,发现主机C和自己不在同一个子网。
1. 主机A发送ARP请求给自己的网关DeviceA,请求网关的MAC地址。
1. DeviceA收到该ARP请求后,返回ARP应答报文,报文中源MAC地址为VLAN2对应子接口的MAC地址。
1. 主机A学习到网关的MAC地址。
1. 主机A向网关发送目的MAC为子接口MAC地址、目的IP为主机C的IP地址的报文。
1. DeviceA收到该报文后进行三层转发,发现主机C的IP地址为直连路由,报文将通过VLAN3关联的子接口进行转发。
1. DeviceA作为VLAN3内主机的网关,向VLAN3内发送一个ARP广播,请求主机C的MAC地址。
1. 主机C收到网关发送的ARP广播后,对此请求进行ARP应答。
1. 网关收到主机C的应答后,就把主机A的报文发送给主机C。主机A之后要发给C的报文都先发送给网关,由网关做三层转发。
1. VLANIF接口
三层交换技术是将路由技术与交换技术合二为一的技术,在交换机内部实现了路由,提高了网络的整体性能。三层交换机通过路由表传输第一个数据流后,会产生一个MAC地址与IP地址的映射表。当同样的数据流再次通过时,将根据此表直接从二层通过而不是通过三层,从而消除了路由器进行路由选择而造成的网络延迟,提高了数据包转发效率。
为了保证第一次数据流通过路由表正常转发,路由表中必须有正确的路由表项。因此必须在三层交换机上部署三层接口并部署路由协议,实现三层路由可达。VLANIF接口由此而产生。
VLANIF接口是三层逻辑接口,可以部署在三层交换机上,也可以部署在路由器上。
在所示的网络中,交换机上划分了2个VLAN:VLAN2和VLAN3。可通过如下配置实现VLAN间互通。
. 在Device上创建2个VLANIF接口并配置VLANIF接口的IP地址,保证两个VLANIF接口对应的IP地址路由可通。
. 将用户设备的缺省网关设置为所属VLAN对应VLANIF接口的IP地址。
图5-9 通过VLANIF接口实现VLAN间的通信
主机A和C的通信过程如下:
2. 主机A将主机C的IP地址和自己所在网段进行比较,发现主机C和自己不在同一个子网。
2. 主机A发送ARP请求给自己的网关Device,请求网关的MAC地址。
2. Device收到该ARP请求后,返回ARP应答报文,报文中源MAC地址为VLANIF2的MAC地址。
2. 主机A学习到网关的MAC地址。
2. 主机A向网关发送目的MAC为VLANIF接口MAC地址、目的IP为主机C的IP地址的报文。
2. Device收到该报文后进行三层转发,发现主机C的IP地址为直连路由,报文将通过VLANIF3接口进行转发。
2. Device作为VLAN3内主机的网关,向VLAN3内发送一个ARP广播,请求主机C的MAC地址。
2. 主机C收到网关发送的ARP广播后,对此请求进行ARP应答。
2. 网关收到主机C的应答后,就把主机A的报文发送给主机C。主机A之后要发给C的报文都先发送给网关,由网关做三层转发。
5.2.3 VLAN Aggregation
产生背景
交换网络中,VLAN技术以其对广播域的灵活控制和部署方便而得到了广泛的应用。但是在一般的三层交换机中,通常是采用一个VLAN对应一个三层逻辑接口的方式实现广播域之间的互通,这样导致了IP地址的浪费。例如,设备内VLAN划分如图5-10所示。
图5-10 普通VLAN网络示意图
表5-4 普通VLAN服务器地址划分示例
如表5-4所示,VLAN2预计未来有10个服务器地址的需求,给其分配一个掩码长度是28的子网10.1.1.0/28,其中10.1.1.0为子网号,10.1.1.15为子网定向广播地址,这两个地址都不能用作服务器地址,此外,10.1.1.1作为子网缺省网关地址也不可作为服务器地址,剩下范围在10.1.1.2~10.1.1.14的地址可以被服务器使用,共13个。这样,尽管VLAN2只需要10个地址,但是按照子网划分却要分给它13个地址。
同理,VLAN3预计未来有5个服务器地址的需求,至少需要分配一个掩码长度是29的子网10.1.1.16/29。VLAN4预计未来只有1个服务器,则分配一个掩码长度是30的子网10.1.1.24/30。
上述VLAN一共需要10+5+1=16个地址,但是按照普通VLAN的编址方式,即使最优化的方案也需要占用16+8+4=28个地址,浪费了将近一半的地址。而且,如果VLAN2后来并没有10台服务器,而实际只接入了3台服务器,那么多出来的地址也会因不能再被其他VLAN使用而被浪费掉。
同时,这种划分也给后续的网络升级和扩展带来了很大不便。假设VLAN4今后需要再增加2台服务器,而又不愿意改变已经分配的IP地址。并且在10.1.1.24后面的地址已经分配给了其他人的情况下,只能再给VLAN4的新用户重新分配一个的29位掩码的子网和一个新的VLAN。这样VLAN4中的客户虽然只有3台服务器,但是却被分配在两个子网中,并且也不在同一个VLAN内,不利于网络管理。
综上所述,很多IP地址被子网号、子网定向广播地址、子网缺省网关地址消耗掉,而不能用于VLAN内的服务器地址。同时,这种地址分配的约束也降低了编址的灵活性,使许多闲置地址也被浪费掉。为了解决这一问题VLAN Aggregation就应运而生。
实现原理
VLAN Aggregation(VLAN聚合,也称Super VLAN)技术就是在一个物理网络内,用多个VLAN隔离广播域,使不同的VLAN属于同一个子网。它引入了Super-VLAN和Sub-VLAN的概念。
· Super-VLAN:和通常意义上的VLAN不同,它只建立三层接口,与该子网对应,而且不包含物理接口。可以把它看作一个逻辑的三层概念—若干Sub-VLAN的集合。
· Sub-VLAN:只包含物理接口,用于隔离广播域的VLAN,不能建立三层VLANIF接口。它与外部的三层交换是靠Super-VLAN的三层接口来实现的。
一个Super-VLAN可以包含一个或多个保持着不同广播域的Sub-VLAN。Sub-VLAN不再占用一个独立的子网网段。在同一个Super-VLAN中,无论服务器属于哪一个Sub-VLAN,它的IP地址都在Super-VLAN对应的子网网段内。
这样,Sub-VLAN间共用同一个三层接口,既减少了一部分子网号、子网缺省网关地址和子网定向广播地址的消耗,又实现了不同广播域使用同一子网网段地址的目的。消除了子网差异,增加了编址的灵活性,减少了闲置地址浪费。
仍以所示例子进行说明。用户需求不变。仍旧是VLAN2预计未来有10个服务器地址的需求,VLAN3预计未来有5个服务器地址的需求,VLAN4预计未来有1个服务器地址的需求。
按照VLAN Aggregation的实现方式,新建VLAN10并配置为Super-VLAN,给其分配一个掩码长度是24的子网10.1.1.0/24,其中10.1.1.0为子网号,10.1.1.1为子网网关地址如图5-11所示。Sub-VLAN(VLAN2、VLAN3、VLAN4)的地址划分如表5-5所示。
图5-11 VLAN Aggregation网络示意图
表5-5 VLAN Aggregation服务器地址划分示例
VLAN Aggregation的实现中,各Sub-VLAN间的界线也不再是从前的子网界线了,它们可以根据其各自服务器的需求数目在Super-VLAN对应子网内灵活的划分地址范围。
从中可以看到,VLAN2、VLAN3和VLAN4共用同一个子网(10.1.1.0/24)、子网缺省网关地址(10.1.1.1)和子网定向广播地址(10.1.1.255)。这样,普通VLAN实现方式中用到的其他子网号(10.1.1.16、10.1.1.24)和子网缺省网关(10.1.1.17、10.1.1.25),以及子网定向广播地址(10.1.1.15、10.1.1.23、10.1.1.27)就都可以用来作为服务器IP地址使用。
这样,3个VLAN一共需要10+5+1=16个地址,实际上在这个子网里就刚好分配了16个地址(10.1.1.2~10.1.1.17)。这16个服务器地址加上子网号(10.1.1.0)、子网缺省网关(10.1.1.1)和子网定向广播地址(10.1.1.255),一共用去了19个IP地址,网段内仍剩余255-19=236的地址可以被任意Sub-VLAN内的服务器使用。
VLAN间通信
· 概述
VLAN Aggregation在实现不同VLAN间共用同一子网网段地址的同时也带来了Sub-VLAN间的三层转发问题。
普通VLAN实现方式中,VLAN间的服务器可以通过各自不同的网关进行三层转发来达到互通的目的。但是VLAN Aggregation方式下,同一个Super-VLAN内的服务器使用的是同一个网段的地址和共用同一个网关地址。即使是属于不同的Sub-VLAN的服务器,由于它们同属一个子网,彼此通信时只会做二层转发,而不会通过网关进行三层转发。而实际上不同的Sub-VLAN的服务器在二层是相互隔离的,这就造成了Sub-VLAN间无法通信的问题。
解决这一问题的方法就是使用Proxy ARP。
说明:
关于Proxy ARP的原理,请参见《IP业务》中的"ARP"。
· 不同Sub-VLAN间的三层互通
例如,Super-VLAN(VLAN10)包含Sub-VLAN(VLAN2和VLAN3),具体组网如图5-12所示。
图5-12 Proxy ARP实现不同Sub-VLAN间的三层互通组网图
VLAN2内的服务器A与VLAN3内的服务器B的通信过程如下:(假设服务器A的ARP表中无服务器B的对应表项并且网关上使能了Sub-VLAN间的Proxy ARP)。
1. 服务器A将服务器B的IP地址(10.1.1.3)和自己所在网段10.1.1.0/24进行比较,发现服务器B和自己在同一个子网,但是服务器A的ARP表中无服务器B的对应表项。
2. 服务器A发送ARP广播,请求服务器B的MAC地址。
3. 服务器B并不在VLAN2的广播域内,无法接收到服务器A的这个ARP请求。
4. 由于网关上使能Sub-VLAN间的Proxy ARP,当网关收到服务器A的ARP请求后,开始在路由表中查找,发现ARP请求中的服务器B的IP地址(10.1.1.3)为直连接口路由,则网关向所有其他Sub-VLAN接口发送一个ARP广播,请求服务器B的MAC地址。
5. 服务器B收到网关发送的ARP广播后,对此请求进行ARP应答。
6. 网关收到服务器B的应答后,就把自己的MAC地址当作B的MAC地址回应给服务器A。
7. 网关的ARP表项中存在服务器B的对应表项。
8. 服务器A之后要发给B的报文都先发送给网关,由网关做三层转发。
服务器B发送报文给服务器A的过程和上述的A到B的报文流程类似,不再赘述。
· Sub-VLAN与外部网络的二层通信
在基于接口的VLAN二层通信中,无论是数据帧进入接口还是从接口发出都不会有针对Super-VLAN的报文。如图5-13所示。
图5-13 Sub-VLAN与外部网络的二层通信组网图
从ServerA侧Port1进入设备Switch1的帧会被打上VLAN2的Tag,在设备Switch1中这个Tag不会因为VLAN2是VLAN10的Sub-VLAN而变为VLAN10的Tag。该数据帧从Trunk类型的接口Port3出去时,依然是携带VLAN2的Tag。
也就是说,设备Switch1本身不会发出VLAN10的报文。就算其他设备有VLAN10的报文发送到该设备上,这些报文也会因为设备Switch1上没有VLAN10对应物理接口而被丢弃。
Super-VLAN中是不存在物理接口的,这种限制是强制的,表现在:
. 如果先配置了Super-VLAN,再配置Trunk接口时,Trunk的VLAN allowed表项里就自动滤除了Super VLAN。
如所示,虽然Switch1的Port3允许所有的VLAN通过,但是也不会有做为Super-VLAN的VLAN10的报文从该接口进出。
. 如果先配好了Trunk接口,并允许所有VLAN通过,则在此设备上将无法配置Super VLAN。本质原因是有物理接口的VLAN都不能被配置为Super VLAN。而允许所有VLAN通过的Trunk接口是所有VLAN的tagged接口,当然任何VLAN都不能被配置为Super VLAN。
对于设备Switch1而言,有效的VLAN只有VLAN2和VLAN3,所有的数据帧都在这两个VLAN中转发的。
· Sub-VLAN与外部网络的三层通信
图5-14 Sub-VLAN与外部网络的三层通信组网图
如所示,Switch1上配置了Super-VLAN 4,Sub-VLAN 2和Sub-VLAN 3,并配置一个普通的VLAN10;Switch2上配置两个普通的VLAN 10和VLAN 20。假设Super-VLAN 4中的Sub-VLAN 2下的服务器A想访问与Switch2相连的服务器C,通信过程如下:(假设Switch1上已配置了去往10.1.3.0/24网段的路由,Switch2上已配置了去往10.1.1.0/24网段的路由)
4. 服务器A将服务器C的IP地址(10.1.3.2)和自己所在网段10.1.1.0/24进行比较,发现服务器C和自己不在同一个子网。
4. 服务器A发送ARP请求给自己的网关,请求网关的MAC地址。
4. Switch1收到该ARP请求后,查找Sub-VLAN和Super-VLAN的对应关系,从Sub-VLAN 2发送ARP应答给服务器A。ARP应答报文中的源MAC地址为Super-VLAN 4对应的VLANIF4的MAC地址。
4. 服务器A学习到网关的MAC地址。
4. 服务器A向网关发送目的MAC为Super-VLAN 4对应的VLANIF4的MAC、目的IP为10.1.3.2的报文。
4. Switch1收到该报文后进行三层转发,下一跳地址为10.1.2.2,出接口为VLANIF10,把报文发送给Switch2。
4. Switch2收到该报文后进行三层转发,通过直连出接口VLANIF20,把报文发送给服务器C。
4. 服务器C的回应报文,在Switch2上进行三层转发到达Switch1。
4. Switch1收到该报文后进行三层转发,通过Super-VLAN,把报文发送给服务器A。
5.2.4 VLAN Damping