1 前言
VLAN技术的出现不仅仅给我们在网络设计和规划上提供了更多的选择,也更为安全和方便的管理网络,同时由VLAN技术引出的各种相关应用也是层出不穷。可以说VLAN技术是以太网技术的一个革命性的变革,同时也是以太网中最为基础和关键的技术。
本文主要针对VLAN技术产生的背景、VLAN技术的原理、VLAN的相关应用等几个部分来逐一进行介绍。
为什么需要VLAN技术,它的优点在哪里呢?
在TCP/IP协议规范中,没有VLAN的定义。当第二层网络交换机发展到一定程度的时候,传统的路由器由于在性能上的不足,它作为网络节点的统治地位受到了很大的挑战。既然传统路由器是网络的瓶颈,而交换机又有如此优越的性能,为什么不用交换机取代传统路由器,来构造网络呢?我们都知道,位于协议第2层的交换机虽然能隔离冲突域,提高每一个端口的性能,但并不能隔离广播域,不能进行子网划分,不能层次化规划网络,更无法形成网络的管理策略,因为这些功能全都属于网络的第三层———网络层。因此,如果只用交换机来构造一个大型计算机网络,将会形成一个巨大的广播域,结果是,网络的性能反而降低以至无法工作,网络的管理束手无策,这样的网络是不可想象的。按照TCP/IP的原理,一般来说,广播域越小越好,一般不应超过200个站点。那么,如何在一个交换网络中划分广播域呢?交换机的设计者们借鉴了路由结构中子网的思路,得出了虚网的概念,即通过对网络中的IP地址或MAC地址或交换端口进行划分,使之分属于不同的部分,每一个部分形成一个虚拟的局域网络,共享一个单独的广播域。这样就可以把一个大型交换网络划分为许多个独立的广播域,即VLAN。
VLAN(Virtual LAN)中文叫做虚拟局域网,它的作用就是将物理上互连的网络在逻辑上划分为多个互不相干的网络,这些网络之间是无法通讯的,就好像互相之间没有连接一样,因此广播也就隔离开了。VLAN的实现原理非常简单,通过交换机的控制,某一VLAN成员发出的数据包交换机只发给同一VLAN的其它成员,而不会发给该VLAN成员以外的计算机。简言之,一个VLAN就是一个广播域。
VLAN的优点如下:
l 广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。
l 增强局域网的安全性:VLAN间不能直接通信,即一个VLAN内的用户不能和其它VLAN内的用户直接通信,而需要通过路由器或三层交换机等三层设备。
l 灵活构建虚拟工作组:用VLAN可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活。
VLAN技术最为显著的优点就是所有VLAN成员不用局限在一个物理范围之内,VLAN的划分可以跨越多个交换机,如图1所示,在网络规划时将VLAN 10和VLAN 20分别部署在两台不在同一地点的交换机上。这种跨设备的VLAN成员互连的组网,就必然涉及到不同VLAN流量识别的问题。
图1 跨设备的VLAN互连
那么如何解决这种跨设备的流量区分问题呢?其实解决办法也很简单,在跨设备转发时给报文打上VLAN信息,如打上VLAN标签,标识报文所属的VLAN,交换机通过对报文中VLAN信息的识别进行相应的转发。
IEEE 提出了802.1Q标准,这个标准也可以称为VLAN技术的标准,在这个标准中定义了上面提到的VLAN标签,同时吸纳了802.1P的成果,在以太网上引入了优先级的概念,并制定了VLAN标准在未来一段时间内的发展方向,形成的802.1Q标准在业界获得了广泛的推广,它成为VLAN史上的一块里程碑。802.1Q的出现打破了虚拟网依赖于单一厂商的僵局,从一个侧面推动了VLAN的迅速发展。
下面我们重点介绍一下802.1Q封装。
802.1Q定义了一个新的以太网帧字段,这个字段添加在以太网帧的源MAC之后,长度/类型字段之前。封装具体内容如图2所示:
图2 802.1Q封装
802.1Q封装共4个字节,包含2个部分:TPID(Etype),Tag Control Info;
l TPID:长度为2个字节,固定为0x8100,标识报文的封装类型为以太网的802.1Q封装;
l Tag Control Info:包含三个部分:802.1P优先级、CFI、VLAN-ID;
802.1P Priority:这3位指明帧的优先级。一共有8种优先级,取值范围为0~7,,主要用于当交换机出端口发生拥塞时,交换机通过识别该优先级,优先发送优先级高的数据包。
CFI:以太网交换机中,规范格式指示器总被设置为0。由于兼容特性,CFI常用于以太网类网络和令牌环类网络之间,如果在以太网端口接收的帧具有CFI,那么设置为1,表示该帧不进行转发,这是因为以太网端口是一个无标签端口。
VID:VLAN ID是对VLAN的识别字段,在标准802.1Q中常被使用。该字段为12位。支持4096(2^12)VLAN的识别。在4096可能的VID中,VID=0用于识别帧优先级,4095(FFF)作为预留值,所以VLAN配置的最大可能值为4094。
VLAN成员的连接方式分为三种:Access,Trunk,Hybrid;
l Access连接:报文不带tag标签,一般用于和tag-unaware(不支持802.1Q封装)设备相连,或者不需要区分不同VLAN成员时使用;
l Trunk连接:在PVID所属的VLAN不带tag标签转发,其他VLAN中的报文都必须带tag标签,用于tag-aware(支持802.1Q封装)设备相连,一般用于交换机之间的互连;
l Hybrid连接:可根据需要设置某些VLAN报文带tag,某些报文不带tag。与trunk连接最大的不同在于,trunk连接只有PVID所属的VLAN不带tag,其他VLAN都必须带tag,而Hybrid连接是可以设置多个VLAN不带tag;
实际应用中,根据设置设备端口的Access、Trunk、Hybrid属性来实现各种不同的连接方式。端口属性的应用也远远超出了简单的VLAN成员互连,特别是我司,用端口属性来实现了一些相对复杂的功能,比如isolated-user VLAN,组播VLAN。
为了理解VLAN内报文的转发,就必须要知道交换机对于不同VLAN报文的tag/untag的处理原则。
首先,需要明确一点就是,在交换机的内部,为了快速高效的处理,报文都是带tag转发的。其实,这点很好理解,因为交换机上很可能会配置多个VLAN,那不同VLAN流量区分只有依靠tag标签。
下面从报文入和报文出两个方向来介绍。
l 报文入方向:
在入方向上,交换机的根本任务就是决定该报文是否允许进入该端口,根据入报文的tag/untag的属性以及端口属性,细分为如下情况:
1) 报文为untag:允许报文进入该端口,并打上PVID的VLAN tag,与端口属性无关;
2) 报文为tag:在这种情况下,需要交换机来判断是否允许该报文进入端口;
Ø Access端口: PVID和报文中tag标明的VLAN一致,接收并处理报文;否则丢弃。
Ø Trunk/Hybrid端口:如果端口允许tag中标明的VLAN 通过,则接收并处理报文;否则丢弃。
l 报文出方向:
在出方向上,交换机已经完成对报文的转发,其根本任务就是在转发出端口时,是否携带tag转发出去,根据出端口属性,细分为如下情况:
1) Access端口:将标签剥掉,不带tag转发;
2) Trunk端口:报文所在VLAN和PVID相同,则报文不带tag;否则带tag;
3) Hybrid端口:报文所在VLAN配置为tag,则报文带tag;否则不带tag;
VLAN在交换机上的实现方式,主要有以下几种:
基于端口:
最为常用的划分方式,[lizhaohui1] 据以太网交换机的端口来划分。这种划分的方法的[lizhaohui2] 优点是定义VLAN成员时非常简单,只要将所有的端口都指定一下就可以了。它的缺点是,如果VLAN A的用户离开了原来的端口,到了一个新的交换机的某个端口,那么就必须重新定义。
基于子网:
这种划分VLAN的方法是根据每个主机的网络层地址划分的,虽然这种划分方法是根据网络地址,比如IP地址,但它不是路由,与网络层的路由毫无关系。这种方法的优点是用户的物理位置改变了,不需要重新配置所属的VLAN,还有,它不需要附加的帧标签来识别VLAN,这样可以减少网络的通信量。这种方法的缺点是效率低,因为检查每一个数据包的网络层地址是需要消耗处理时间的,一般的交换机芯片都可以自动检查网络上数据包的以太网帧头,但要让芯片能检查IP帧头,需要更高的技术,同时更费时。
基于MAC:
这种划分VLAN的方法是根据每个主机的MAC地址来划分,即对每个MAC地址的主机都配置它属于哪个组。这种划分VLAN的方法的最大优点就是当用户物理位置移动时,即从一个交换机换到其他的交换机时,VLAN不用重新配置,可以认为这种根据MAC地址的划分方法是基于用户的VLAN,这种方法的缺点是初始化时,所有的用户都必须进行配置,如果有几百个甚至上千个用户的话,配置量是很大的,而且这种划分的方法也导致了交换机执行效率的降低,因为在每一个交换机的端口都可能存在很多个VLAN组的成员,这样就无法限制广播包了。
我司的Voice VLAN也是基于MAC地址的一种应用,对于它的实现在本文的下一部分会重点介绍。CISCO有一个成熟的基于MAC地址的VLAN实现方式为VMPS,本文不再熬述。
基于协议:
协议VLAN与上面介绍的两种实现方式的原理类似,都是根据数据报文的某个特征进行VLAN的划分,只是关注的特征不同。基于协议的VLAN通过识别报文的协议类型和封装格式进行VLAN的划分,如IP、IPX、AppleTalk协议族;Ethernet II,802.3,802.3/802.2 LLC, 802.3/802.2 SNAP等封装格式。这种实现方式的优缺点与上面的实现方式类似,效率不高。目前,IEEE 802.1v规定了基于端口和协议(port-and-protocal based VLAN)的标准草案,我司的协议VLAN也是这种划分方式的完整实现,在本文的后面会对协议VLAN做一个详细的介绍。
其他划分:比如基于组播地址的VLAN,基于业务的VLAN,基于应用的VLAN。
动态VLAN配置技术,顾名思义,不需要网络管理员手工的在网络中各个设备上进行VLAN的配置,各个设备通过动态VLAN配置技术达到网络中VLAN的统一。
动态VLAN配置技术在用户接入的VLAN有不确定性和时效性时尤其有用,如图3所示的应用场景:
图3 动态VLAN配置应用
LSW5连接一个开放性区域,PC用户上线时通过802.1x或VMPS认证自动配置到不同的VLAN,从而连入不同的用户组。用户下线则在LSW5上删除对应的VLAN。
在图3中,如果采用静态配置,考虑到STP可能切换,则必须在LSW2/3/4上配置所有用到的VLAN,即使LSW5没有对应VLAN的接入用户,实际上无谓的扩大了广播域。如果采用动态VLAN配置技术,可以只在LSW5上有该用户时自动在LSW2/3/4上配置该VLAN,用户下线则自动删除。
可见,动态VLAN配置技术简化了VLAN配置管理,减少了因为配置不一致而导致的网络互通问题,而且能智能的根据用户需要,在一定网络范围内,动态配置VLAN并把相关端口加入动态VLAN中,保证VLAN在该网络范围内的连通性。
目前,有两种动态VLAN配置技术:
l GVRP:GARP VLAN Register Protocol,是GARP协议的一个应用,在IEEE802.1Q中定义
l VTP:VLAN Trunk Protocol,CISCO的私有协议。
GVRP是GARP的一种应用。它基于GARP的工作机制,维护设备中的VLAN动态注册信息,并传播该信息到其它的设备中。
GARP协议是通过声明/撤销声明(declaration/withdraw-declaration)来实现属性注册和注销的。当端口接收到一个属性声明时,该端口将注册属性,如果端口接收到撤销属性的声明,该端口将注销属性。很明显,GARP协议的属性注册和注销仅仅是对于接收到GARP BPDU的端口而言的。之所以采取这样的一种方式,优越性可以从图4中看出来。图中有两个属性声明的源,也就是说,只有这两台终端设备才需要属性A的相关内容。因为只有接收到BPDU的端口才注册该属性,那么当注册过程平衡以后,只能在这两台设备间建立必要的双向通路,而其他的都是单向通路,这样,与属性A相关的流量被限制在必要的双向图路上。另外一点就是,属性的声明注册过程是沿着STP树单向传播的。
图4 GARP工作机制
GVRP作为GARP的一个应用,协议机制和GARP完全一样,只是定义了自己独有的属性及其语义语法、报文封装等。GVRP中的属性是VLAN ID信息。
设备启动GVRP特性后,能够接收来自其它设备的VLAN注册信息,并动态更新本地的VLAN注册信息,包括当前的VLAN成员、这些VLAN成员可以通过哪个端口到达等。此外,设备能够将本地的VLAN注册信息向其它设备传播,以便使同一局域网内所有设备的VLAN信息达成一致。GVRP传播的VLAN注册信息既包括本地手工配置的静态注册信息,也包括来自其它设备的动态注册信息。
VLAN中继协议(VTP,VLAN TRUNKING PROTOCOL)是CISCO专用协议,只有CISCO的交换机支持该协议。VTP负责在VTP域内同步VLAN信息,这样就不必在每个交换机上配置相同的VLAN信息。VTP最重要的作用是,将进行变动时可能会出现的配置不一致的概率降至最低。
VTP是一种消息协议,使用第2层帧,通过在全网的基础上管理VLAN的添加、删除和重命名,以实现VLAN配置的一致性。有了VTP,就可以在一台交换机上集中的进行配置改变,所作的改变会被自动传播到网络中所有其他的交换机上。(前提是在同一个VTP域)
为了实现此功能,必须先建立一个VTP管理域,以使它能管理网络上当前的VLAN。在同一管理域中的交换机共享它们的VLAN信息,并且,一个交换机只能参加到一个VTP管理域,不同域中的交换机不能共享VTP信息。
要使用VTP,就必须为每台交换机指定VTP域名,VTP信息只能在VTP域内保持,一台交换机可属于并且只属于一个VTP域。缺省情况下,CATALYST交换机不属于任何管理域,直到交换机通过中继链路接收了关于一个域的通告,或者在交换机上配置了一个VLAN管理域,交换机才能在VTP服务器上把创建或者更改VLAN的消息通告给本管理域内的其他交换机。如果在VTP服务器上进行了VLAN配置变更,所做的修改会传播到VTP域内的所有交换机上。控制VTP功能的一项关键参数是VTP配置修改编号,这个32位的数字表明了VTP配置的特定修改版本,配置修改编号的取值从0开始,每修改一次,就增加1直到达到4294967295,然后循环归0,并重新开始增加,每个VTP设备会记录自己的VTP配置修改编号;VTP数据包会包含发送者的VTP配置修改编号,这一信息用于确定接收到的信息是否比当前的信息更新。要将交换机的配置修改号置为0,需要禁止中继,改变VTP的名称,并再次启用中继。
VTP工作模式有3种,分别是:
l 服务器模式(SERVER 缺省)
VTP服务器控制着它们所在域中VLAN的生成和修改,所有的VTP信息都被通告在本域中的其他交换机,而且所有这些VTP信息都是被其他交换机同步接收的。
l 客户机模式(CLIENT)
VTP客户机不允许管理员创建、修改或删除VLAN,它们监听本域中其他交换机的VTP通告,并相应修改它们的VTP配置情况。
l 透明模式(TRANSPARENT)
当交换机处于透明模式时,它不通告其VLAN配置信息,而且,它的VLAN数据库更新与收到的通告也不保持同步,但它可以创建和删除本地的VLAN。不过,这些VLAN的变更不会传播到其他任何交换机上。
VTP定义了4种消息类型:
l Summary advertisements:
在Server与Client之间周期性的通告VTP域名和当前的配置版本号:如果接收端的域名与发送者不同,接收者将忽略通告;如果域名相同,将比较配置的版本号;如果通告包含一个更大的版本号,则接收端将向发送者请求新的VLAN信息。
l Subnet advertisements:
用于向请求者发送新的VLAN信息。当Server端VLAN配置发生改变时,如创建或删除VLAN,修改VLAN的名字等,Server端将在Summary advertisement之后发送Subnet advertisements通告新的VLAN信息。
l Advertisement requests:
用于向邻居请求最新的VLAN配置信息。当交换机的域配置发生改变或者重起时,交换机发送该消息。
l VTP join messages:用于VTP Pruning功能中,缺省情况下不开启。
由上面的介绍,概括一下VTP工作流程:
1. VTP设备每5分钟发送一次Summary Advertisement,向相邻设备通告VTP域名和当前的配置版本号。
2. 邻接设备收到Summary Advertisement,检查域名,如果域名和自己的不一样,丢弃报文;域名相同则进一步比较配置版本号,如果版本号比自己的小或相当,丢弃;比自己的大,则从接收端口发送Advertisement request,请求更新的VLAN配置信息。
3. 设备收到Advertisement request后发送Subset Advertisement报文,其中包含最新的VLAN配置信息。
在本节中,主要介绍一下协议VLAN与Voice VLAN,这两种应用在我司的产品中均有比较完整的实现,且应用比较广泛。
基于协议的VLAN是根据端口接收到的报文所属的协议(族)类型及封装格式来给报文分配不同的VLAN ID。可用来划分VLAN的协议族有IP、IPX、AppleTalk(AT),封装格式有Ethernet II、802.3、802.3/802.2 LLC、802.3/802.2 SNAP等。
协议VLAN的实现原理如下:
用户配置协议VLAN,并指定归入本VLAN的报文的“协议模板”;设备上可配置一个端口属于一个或多个协议VLAN和普通VLAN。协议模板由报文的封装格式与协议类型共同确定。
设备端口收到untag报文,先识别报文的协议模板,接着确定报文所属的VLAN:
l 如果端口根本没有配置属于某个协议VLAN,则给报文打端口PVID的tag。
l 如果端口配置了属于某些协议VLAN,且报文的“协议模板”匹配其中某个协议VLAN,则给报文打上该协议VLAN的tag。
l 如果端口配置了属于某些协议VLAN,但报文的“协议模板”和所有协议VLAN不匹配 ,则给报文打端口PVID的tag。
设备端口接收到tag报文,处理方式和基于端口的VLAN一样:端口允许该tag标识的VLAN通过则作正常转发处理;不允许则丢弃报文。
介绍一下协议模板。
上面说过,协议模板由协议类型和封装格式共同确定。协议类型包括IP,IPX,AppleTalk,而封装格式包括Ethernet II,802.3raw,802.3/802.2 LLC,802.3/802.2 SNAP, 802.3/802.2 SNAP RFC1042 封装。具体封装格式结构如下图所示:
图5 封装格式
每一种协议类型所支持的封装格式不同,在自定义协议模板时,可以根据协议类型选择所支持的封装格式进行定义。比如定义NetBios的协议VLAN,其协议模板可以这样定义,使用802.3/802.2 LLC封装,DSAP/SSAP均为0xF0。
另外使用协议VLAN还有一些原则:
l 同一个协议VLAN下不能配置相同的“协议模板”
l 不同协议VLAN可配置相同的“协议模板”
l 不同协议VLAN配置相同的“协议模板”,不能下发到同一个端口
l 只有Hybrid端口支持协议VLAN。
Voice VLAN是为用户的语音数据流而专门划分的VLAN。通过划分Voice VLAN并将连接语音设备的端口加入Voice VLAN,可以为语音数据配置QoS参数,为网络中语音业务提供高优先级提高语音数据报文优先级、保证通话质量。
设备可以根据进入端口的数据报文中的源MAC地址字段来判断该数据流是否为语音数据流。源MAC地址符合系统设置的语音设备OUI(Organizationally Unique Identifier,全球统一标识符)地址的报文被认为是语音数据流,被划分到Voice VLAN中传输,并下发优先级规则,改变语音数据流的优先级。
从原理来讲,Voice VLAN为基于MAC划分VLAN的一种实现,但是在实现细节方面还有很多其实现的特殊之处。
图6 voice VLAN基本组网
交换机上预先配置Voice VLAN的网关,保证VOIP server system的连通性。VOIP phone发送出来的报文有untag和tag两种,untag报文为协议报文(交换机上需要保证这些untagged报文能转发到正确的服务器),tag报文为语音报文。以下从支持Voice VLAN的交换机的角度来描述一下Voice VLAN在交换机的实现。
Voice VLAN工作模式分为自动模式与手动模式;安全模式与普通模式;
自动模式时,用户使能Voice VLAN后,交换机和ip电话相连的端口,并不加入VLAN中,而是语音报文来了后,通过识别报文的源MAC是否为OUI地址来自动的把端口加入到VLAN中。自动模式下,需要作以下事情:
1. 用户首先要在交换机上指定一个VLAN为Voice VLAN ,并在端口下使能Voice VLAN。
2. 如果一个端口下使能Voice VLAN以后,该端口的mac地址学习就变为软件学习。
3. 使能Voice VLAN的端口收到一个mac地址匹配OUI地址的Untag报文(DHCP请求报文)时,交换机自动将该端口加入到第1步指定的Voice VLAN中,并下发ACL规则提高语音报文的优先级。
4. 这时用户可以正常使用VOIP电话。在使用时,VOIP电话发送的语音报文都应该打上这个VLAN的tag。
5. 如果电话的mac地址在交换机上老化后(比如:用户长期不用电话),交换机会启用一个定时器。当定时器超时以后,交换机软件将电话接入的端口从Voice VLAN中删除。定时器的间隔时间用户可以配置。
手动模式相对自动模式来说比较简单。在手动模式下必须手工将端口添加Voice VLAN中,交换机不会自动发现OUI报文和添加端口到Voice VLAN。手动模式相当于分配一个特殊的VLAN给语音报文来使用,同时下发ACL来提高此VLAN中,语音报文的优先级。下发ACL的时机是:当全局使能Voice VLAN的情况下,再在端口上使能Voice VLAN时;或者端口上已经使能了Voice VLAN,再在全局使能Voice VLAN时。
安全模式下,Voice VLAN中只能有语音流量。用户设置Voice VLAN为安全模式以后,这个VLAN的报文都经过软件过滤,交换机会根据报文的源mac地址是否匹配OUI来过滤所有非语音流量。
在普通模式下,Voice VLAN中允许有业务流量和语音流量并存。