VLAN简介
定义
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内。
图1 VLAN示意图
图1是一个典型的VLAN应用组网图。两台交换机放置在不同的地点,比如写字楼的不同楼层。每台交换机分别连接两台计算机,他们分别属于两个不同的VLAN,比如不同的企业客户。
说人话:就是如果一台8口交换机划分了两个VLAN,1-4口加入一个VLAN,5-8口加入另一个VLAN,那个我们就得到了两台逻辑上独立的交换机。如图1,当VLAN跨交换机配置时就需要配置VLAN透传。
优点
- 限制广播域:广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。
- 增强局域网的安全性:不同VLAN内的报文在传输时是相互隔离的,即一个VLAN内的用户不能和其它VLAN内的用户直接通信。
- 提高了网络的健壮性:故障被限制在一个VLAN内,本VLAN内的故障不会影响其他VLAN的正常工作。
- 灵活构建虚拟工作组:用VLAN可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活。
VLAN原理描述
VLAN标签定义和作用
要使交换机能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag),用以标识VLAN信息。如图2所示。
图2 IEEE 802.1Q封装的VLAN数据帧格式
VLAN标签包含4个字段,各字段含义如表1所示:
表1 VLAN标签各字段含义
字段 | 长度 | 含义 | 取值 |
TPID | 2Byte | Tag Protocol Identifier(标签协议标识符),表示数据帧类型。 | 表示帧类型,取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。 各设备厂商可以自定义该字段的值。当邻居设备将TPID值配置为非0x8100时, 为了能够识别这样的报文,实现互通,必须在本设备上修改TPID值,确保和邻居设备的TPID值配置一致。 |
PRI | 3bit | Priority,表示数据帧的802.1p优先级。 | 取值范围为0~7,值越大优先级越高。当网络阻塞时,交换机优先发送优先级高的数据帧。 |
CFI | 1bit | Canonical Format Indicator(标准格式指示位),表示MAC地址在不同的传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。 | CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0。 |
VID | 12bit | VLAN ID,表示该数据帧所属VLAN的编号 | VLAN ID取值范围是0~4095。由于0和4095为协议保留取值,所以VLAN ID的有效取值范围是1~4094. |
交换机利用VLAN标签中的VID来识别数据帧所属的VLAN,广播帧只在同一VLAN内转发,这就将广播域限制在一个VLAN内。
常用设备收发数据帧的VLAN标签情况
在一个VLAN交换网络中,以太网帧主要有以下两种形式:
- 有标记帧(Tagged帧):加入了4字节VLAN标签的帧。
- 无标记帧(Untagged帧):原始的、未加入4字节VLAN标签的帧。
常用设备中:
- 用户主机、服务器、Hub、傻瓜交换机只能收发Untagged帧。
- 交换机、路由器和AC既能收发Tagged帧,也能收发Untagged帧。
- 语音终端、AP等设备可以同时收发一个Tagged帧和一个Untagged帧。
为了提高处理效率,交换机内部处理的数据帧一律都是Tagged帧。
链路类型和接口类型
交换机内部处理的数据帧一律都带有VLAN标签,而现网中交换机连接的设备有些只会收发Untagged帧,要与这些设备交互,就需要接口能够识别Untagged帧并在收发时给帧添加、剥除VLAN标签。同时,现网中属于同一个VLAN的用户可能会被连接在不同的交换机上,且跨越交换机的VLAN可能不止一个,如果需要用户间的互通,就需要交换机间的接口能够同时识别和发送多个VLAN的数据帧。
以华为交换机为例,华为定义了Access接口、Trunk接口、Hybrid接口和QinQ接口4种接口类型其中Access接口、Trunk接口和Hybrid接口如图3所示
图3 链路类型和接口类型示意图
接口类型
如图3所示,根据接口连接对象以及对收发数据帧处理的不同,以太网接口分为:
- Access接口一般用于和不能识别Tag的用户终端(如用户主机、服务器等)相连,或者不需要区分不同VLAN成员时使用。它只能收发Untagged帧,且只能为Untagged帧添加唯一VLAN的Tag。
- Trunk接口一般用于连接交换机、路由器、AP以及可同时收发Tagged帧和Untagged帧的语音终端。它可以允许多个VLAN的帧带Tag通过,但只允许一个VLAN的帧从该类接口上发出时不带Tag(即剥除Tag)。
- Hybrid接口既可以用于连接不能识别Tag的用户终端(如用户主机、服务器等)和网络设备(如Hub、傻瓜交换机),也可以用于连接交换机、路由器以及可同时收发Tagged帧和Untagged帧的语音终端、AP。它可以允许多个VLAN的帧带Tag通过,且允许从该类接口发出的帧根据需要配置某些VLAN的帧带Tag(即不剥除Tag)、某些VLAN的帧不带Tag(即剥除Tag)。Hybrid接口和Trunk接口在很多应用场景下可以通用,但在某些应用场景下,必须使用Hybrid接口。比如在2:1 VLAN映射中,服务提供商网络的多个VLAN的报文在进入用户网络前,需要剥离外层VLAN Tag,此时Trunk接口不能实现该功能,因为Trunk接口只能使该接口缺省VLAN的报文不带VLAN Tag通过。
缺省VLAN
缺省VLAN又称PVID(Port Default VLAN ID)。前面提到,交换机处理的数据帧都带Tag,当交换机收到Untagged帧时,就需要给该帧添加Tag,添加什么Tag,就由接口上的缺省VLAN决定。它的具体作用是:
- 当接口接收数据帧时,如果接口收到一个Untagged帧,交换机会根据PVID给此数据帧添加等于PVID的Tag,然后再交给交换机内部处理;如果接口收到一个Tagged帧,交换机则不会再给该帧添加接口上PVID对应的Tag。
- 当接口发送数据帧时,如果发现此数据帧的Tag的VID值与PVID相同,则交换机会将Tag去掉,然后再从此接口发送出去。
每个接口都有一个缺省VLAN。缺省情况下,所有接口的缺省VLAN均为VLAN1,但用户可以根据需要进行配置:
- 对于Access接口,缺省VLAN就是它允许通过的VLAN,修改接口允许通过的VLAN即可更改接口的缺省VLAN。
- 对于Trunk接口和Hybrid接口,一个接口可以允许多个VLAN通过,但是只能有一个缺省VLAN,修改接口允许通过的VLAN不会更改接口的缺省VLAN。
不同类型接口添加或剥除VLAN标签的比较
接口类型 | 对接收不带Tag的报文处理 | 对接收带Tag的报文处理 | 发送帧处理过程 |
Access接口 | 接收该报文,并打上缺省的VLAN ID | 当VLAN ID与缺省VLAN ID相同时,接收该报文。 当VLAN ID与缺省VLAN ID不同时,丢弃该报文。 | 先剥离帧的PVID Tag,然后再发送。 |
Trunk接口 | 打上缺省的VLAN ID,当缺省VLAN ID在允许通过的VLAN ID列表里时,接收该报文。 打上缺省的VLAN ID,当缺省VLAN ID不在允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID在接口允许通过的VLAN ID列表里时,接收该报文。 当VLAN ID不在接口允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID与缺省VLAN ID相同,且是该接口允许通过的VLAN ID时,去掉Tag,发送该报文。 当VLAN ID与缺省VLAN ID不同,且是该接口允许通过的VLAN ID时,保持原有Tag,发送该报文。 |
Hybrid接口 | 打上缺省的VLAN ID,当缺省VLAN ID在允许通过的VLAN ID列表里时,接收该报文。 打上缺省的VLAN ID,当缺省VLAN ID不在允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID在接口允许通过的VLAN ID列表里时,接收该报文。 当VLAN ID不在接口允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID是该接口允许通过的VLAN ID时,发送该报文。可以通过命令设置发送时是否携带Tag。 |
由上面各类接口添加或剥除VLAN标签的处理过程可见:
当接收数据帧时:
- 当接收到不带VLAN标签的数据帧时,Access接口、Trunk接口、Hybrid接口都会给数据帧打上VLAN标签,但Trunk接口、Hybrid接口会根据数据帧的VID是否为其允许通过的VLAN来判断是否接收,而Access接口则无条件接收。
- 当接收到带VLAN标签的数据帧时,Access接口、Trunk接口、Hybrid接口都会根据数据帧的VID是否为其允许通过的VLAN(Access接口允许通过的VLAN就是缺省VLAN)来判断是否接收。
当发送数据帧时:
- Access接口直接剥离数据帧中的VLAN标签。
- Trunk接口只有在数据帧中的VID与接口的PVID相等时才会剥离数据帧中的VLAN标签。
- Hybrid接口会根据接口上的配置判断是否剥离数据帧中的VLAN标签。
因此,Access接口发出的数据帧肯定不带Tag,Trunk接口发出的数据帧只有一个VLAN的数据帧不带Tag,其他都带VLAN标签,Hybrid接口发出的数据帧可根据需要设置某些VLAN的数据帧带Tag,某些VLAN的数据帧不带Tag。
VLAN通讯
VLAN内互访
同一VLAN内用户互访(简称VLAN内互访)会经过如下三个环节。
1,用户主机的报文转发
源主机在发起通信之前,会将自己的IP与目的主机的IP进行比较,如果两者位于同一网段,会获取目的主机的MAC地址,并将其作为目的MAC地址封装进报文;如果两者位于不同网段,源主机会将报文递交给网关,获取网关的MAC地址,并将其作为目的MAC地址封装进报文。
2,交换机内部的以太网交换
交换机会根据接收报文的目的MAC地址+VID以及三层转发标志位来判断是进行二层交换还是进行三层交换:
- 如果目的MAC地址+VID匹配自己的MAC表且三层转发标志置位,则进行三层交换,会根据报文的目的IP地址查找三层转发表项,如果没有找到会将报文上送CPU,由CPU查找路由表实现三层转发。
- 如果目的MAC地址+VID匹配自己的MAC表但三层转发标志未置位,则进行二层交换,会直接将报文根据MAC表的出接口发出去。
- 如果目的MAC地址+VID没有匹配自己的MAC表,则进行二层交换,此时会向所有允许VID通过的接口广播该报文,以获取目的主机的MAC地址。
3,设备之间(包括交换机与用户主机、交换机与交换机、交换机与其他网络设备)交互时,VLAN标签的添加和剥离交换机内部的以太网交换都是带Tag的,为了与不同设备进行成功交互,交换机需要根据接口的设置添加或剥除Tag。不同接口VLAN标签添加和剥离情况不同。
同设备VLAN内互访
如图4所示,用户主机Host_1和Host_2连接在同台交换机上,属于同一VLAN2,且位于相同网段,连接接口均设置为Access接口。(假设Router上还未建立任何转发表项)。
图4 同设备VLAN内互访
当用户主机Host_1发送报文给用户主机Host_2时,报文的发送过程如下(假设交换机Switch上还未建立任何转发表项)。
- Host_1判断目的IP地址跟自己的IP地址在同一网段,于是发送ARP广播请求报文获取目的主机Host_2的MAC地址,报文目的MAC填写全F,目的IP为Host_2的IP地址10.1.1.3。
- 报文到达Switch的接口IF_1,发现是Untagged帧,给报文添加VID=2的Tag(Tag的VID=接口的PVID),然后将报文的源MAC地址+VID与接口的对应关系(1-1-1, 2, IF_1)添加进MAC表。
- 根据报文目的MAC地址+VID查找Switch的MAC表,没有找到,于是在所有允许VLAN2通过的接口(本例中接口为IF_2)广播该报文。
- Switch的接口IF_2在发出ARP请求报文前,根据接口配置,剥离VID=2的Tag。
- Host_2收到该ARP请求报文,将Host_1的MAC地址和IP地址对应关系记录ARP表。然后比较目的IP与自己的IP,发现跟自己的相同,就发送ARP响应报文,报文中封装自己的MAC地址2-2-2,目的IP为Host_1的IP地址10.1.1.2。
- Switch的接口IF_2收到ARP响应报文后,同样给报文添加VID=2的Tag。
- Switch将报文的源MAC地址+VID与接口的对应关系(2-2-2, 2, IF_2)添加进MAC表,然后根据报文的目的MAC地址+VID(1-1-1, 2)查找MAC地址表,由于前面已记录,查找成功,向出接口IF_1转发该ARP响应报文。
- Switch向出接口IF_1转发前,同样根据接口配置剥离VID=2的Tag。
- Host_1收到Host_2的ARP响应报文,将Host_2的MAC地址和IP地址对应关系记录ARP表。
后续Host_1与Host_2的互访,由于彼此已学习到对方的MAC地址,报文中的目的MAC地址直接填写对方的MAC地址。此组网场景下,当同一VLAN的用户处于不同网段时,主机将在报文中封装网关的MAC地址,若Switch为二层交换机,用户将不能互访;若Switch为三层交换机,可借助VLANIF技术(需配置主从IP地址)实现互访,其互访原理与“同设备VLAN间互访”原理类似,不再赘述。
跨设备VLAN内互访
如图5所示,用户主机Host_1和Host_2连接在不同的交换机上,属于同一个VLAN2,且位于相同网段。为了识别和发送跨越交换机的数据帧,交换机与交换机间通过干道链路连接。
图5 跨设备VLAN内互访示意图
当用户主机Host_1发送报文给用户主机Host_2时,报文的发送过程如下(假设交换机Switch_1和Switch_2上还未建立任何转发表项)。
- 经过与同设备VLAN内互访的步骤1~2一样的过程后,报文被广播到Switch_1的IF_2接口。
- Switch_1的IF_2接口在发出ARP请求报文前,因为接口的PVID=1(缺省值),与报文的VID不相等,直接透传该报文到Switch_2的IF_2接口,不剥除报文的Tag。
- Switch_2的IF_2接口收到该报文后,判断报文的Tag中的VID=2是接口允许通过的VLAN,接收该报文。
- 经过与同设备VLAN内互访的步骤3~6一样的过程后,Switch_2将向其出接口IF_2转发Host_2的ARP响应报文,转发前,因为接口IF_2为Trunk接口且PVID=1(缺省值),与报文的VID不相等,直接透传报文到Switch_1的IF_2接口。
- Switch_1的IF_2接口收到Host_2的ARP响应报文后,判断报文的Tag中的VID=2是接口允许通过的VLAN,接收该报文。后续处理同同设备VLAN内互访的步骤7~9一样。
可见,干道链路除可传输多个VLAN的数据帧外,还起到透传VLAN的作用,即干道链路上,数据帧只会转发,不会发生Tag的添加或剥离。此组网场景下,当同一VLAN的用户处于不同网段时,若Switch_1或Switch_2为二层交换机,用户不能互访;若Switch_1或Switch_2为三层交换机,可借助VLANIF技术实现互访,其互访原理与“跨设备VLAN间互访”原理类似,不再赘述。