VLAN&Trunk

一、概述

1、交换机基本通信原理

回顾交换机基本通信原理前,首先需要了解帧的类型。帧是数据链路层的协议数据单元(Protocol Data Unit,PDU)。帧的种类是对于交换机而言的,交换机根据其dst MAC来区分。一般分为Known-unicast Frame(已知单播帧)、Unknown-unicast Frame(未知单播帧)、Multicast Frame(组播帧)、Broadcast Frame(广播帧):

  • Known-unicast Frame:帧的dst MAC可以在CAM表中查询到。

  • Unknown-unicast Frame:帧的dst MAC无法在CAM表中查询到。

  • Multicast Frame:帧的dst MAC是组播MAC。

  • Broadcast Frame:帧的dst MAC是FF.FF.FF.FF.FF.FF。

泛洪(Flood)是指将数据帧发送到除该帧接收接口之外的所有接口。BUM三种帧会触发交换机泛洪行为。通常一台初始交换机所有接口处于同一个广播域,如果划分了VLAN,则变相的将大的广播域拆分成多个广播域,泛洪行为也会仅限制在对应的广播域内。

图1-1

如图1-1,此时A需要访问C,A知道C的IP地址(通过查询DNS得知),但是A不知道C的MAC,A启用ARP进程,A发送了一个广播包(想查询C的MAC)。广播包首先到达交换机,交换机拿到数据帧后发现是广播帧,先记录了src MAC、G0/0/1、VLAN 1到自己的CAM表中然后泛洪。

查找CAM表:根据以太网帧中的dst MAC,比对CAM表中的MAC

  • 未匹配中:

    • dst MAC是广播帧:学习src MAC,然后泛洪;

    • dst MAC是未知单播帧:学习src MAC,然后泛洪;

  • 匹配中:学习src MAC,则查询对应的接口,并转发;

泛洪的广播包到达B和C,B和C均对其解封装,此时B发现IP首部的目的IP不是自己,于是不予理会。C发现IP首部的目的IP是自己,开始回单播包。回包内容:

交换机拿到单播数据帧后,发现CAM表中匹配中了,于是先记录src MAC、G0/0/3、VLAN 1到自己的CAM表中,然后转发到G0/0/1口出去。A拿到数据包后解封装即可获得C的MAC地址,随后开始正式通信。

2、VLAN&Trunk技术背景

随着公司交换机接入的设备越来越多,公司对安全性也提出了新的要求,多个部门在同一台交换机上交换数据,这必然会带来安全隐患(被窃听),也没有更多的预算去为每个部门单独配备一台交换机,为了满足该需求,VLAN技术诞生。VLAN技术通过将交换机上的端口绑定进端口组中实现端口隔离。相同端口组中的接入设备能够通信,不同端口组中的接入设备不能够通信。VLAN技术带来的不仅仅是隔离能力,还能够控制广播流量

后来公司因为业务扩张购入了第二台交换机,为业务部门VLAN扩容了10台PC,但是这10台PC是在SW2上面划分的端口组,这就是端到端VLAN。那么业务VLAN分布在两台交换机上如何通信?可以在两台交换机之间连线,而链路的两端都属于业务VLAN就能够通信了,但是会造成一个问题,端到端VLAN的VLAN数目越多,所需要的连接两台交换机的端口就越多,这会导致扩展性差、端口利用率低的缺点。为了满足高扩展性和提升端口利用率,Trunk技术诞生。Trunk使得某个端口可以传递多个VLAN的流量,这样端到端VLAN的部署将会非常灵活,多台交换机之间仅需要一条链路即可传递多个VLAN的流量,提高了端口利用率。

VLAN是一个单独的广播域,交换机的access模式的接口只能承载单个VLAN的流量,trunk模式的接口可以承载多个VLAN的流量

二、VLAN

1、VLAN概述

广播域是一个区域,区域中的所有设备都能接收到域内任何一台设备发出的广播帧(注意如果是泛洪行为,那么广播域内的任何一台设备都会收到BUM)广播帧的边界通常是路由器,这是因为路由器不转发广播数据帧。VLAN是广播域的一个实例,一个广播域通常是一个只包含单个IP子网的2层网络

VLAN(Virtual LAN,虚拟局域网)是将交换机的多个物理端口划分成不同的逻辑端口组交换机可以确保来自组内某个端口的流量不会发送到其他端口组中(否则属于路由功能)。VLAN可以看作是独立的LAN网段。每个VLAN也是一个独立的广播域广播帧将发送给相同端口组内的其他所有端口,处于相同VLAN的所有端口同处在同一个广播域下

图2-1

如图2-1,原本未划分VLAN的时候,四台主机属于同一个交换机的VLAN 1下(即同一个局域网)相互之间可以通信。划分VLAN后,橙色VLAN的主机内部可以通信,但是不能和绿色VLAN中的主机通信。

VLAN的优点就是增加分段性灵活性安全性。VLAN的特点就是默认情况下,所有接口处于同一个广播域,同一个广播域下的所有主机都能通过二层通信,广播不能跨VLAN传递,VLAN之间无法通信。

2、VLAN部署方式

部署方式一般有两种:本地VLAN部署端到端VLAN部署。本地VLAN部署是指一台交换机使用一个VLAN;而端到端VLAN部署是指同一个VLAN分布在不同交换机上。对比来看端到端VLAN灵活性更高,也是最广泛应用的VLAN部署方式

图2-2

本地VLAN通信时就是交换机基本通信原理,而端到端VLAN通信时则不太同于本地VLAN通信过程。逻辑端口组中的物理端口一般都是L2的access模式,而交换机互联端口一般都是L2的trunk模式。

3、Access模式标签行为

图2-3

接入PC/裸金属的端口一般划分为access模式,access处理帧的原则就是无论是收到帧还是发送帧,都不会执行任何tag和untag行为。

理解图2-3,以太帧A进入SW1,A将以纯净帧的方式进行泛洪,A到达连接SW2的交换机链路上,仍然是纯净以太帧,类似的,A会经过SW2的泛洪抵达192.168.176.2(也可以理解为SW2将SW1+176.1看作是一台PC,也就是一个局域网)。该配置只有在面临特殊割接场景(VLAN Translation时使用的,正常配置不允许这样。

4、Vioce VLAN

Voice VLAN可以实现在数据网络中部署语音技术。用户可以将IP电话放置在不同的逻辑网络中,尽管数据和语音实际上使用的是同一个物理网络。语音VLAN的特性可以将电话放入到各自的VLAN中,而不需要终端用户在IP电话上进行任何配置。即使用户将电话移动到其他的位置,电话也会无缝地分配到之前的VLAN中。

配置Voice VLAN#
interface GigbitEthernet0/0/1
 switchport mode access
 switchport access vlan 10
 switchport voice vlan 10

5、VLAN配置

1)VLAN id范围

VLAN id是唯一标识VLAN的,802.1q支持VLAN id范围1-4094,802.1q默认允许所有标准扩展VLAN通过trunk链路。部分VLAN id是用于系统使用,VLAN id根据用途分为:

  • 默认VLAN:1

  • 正常VLAN:2~1001、1002~1005

1002~1005用于令牌环网、FDDI的VLAN,用户无法删除

  • 扩展(仅用于ethernet VLAN):1025~4094

  • 保留:0、4095、1006~1024

1006~1024仅限系统使用,用户无法查看和使用

2)手动配置-Static

思科VLAN配置

创建VLAN#
vlan 2-31,33,34-40
  exit    #退出VLAN配置模式才能成功创建VLAN
vlan 2
  name 192.168.2.0/24 #VLAN命名

物理接口划入VLAN#
int GigbitEthernet1/0
  switchport mode access   #接口为Access模式
  switchport access vlan 10  #接口划入VLAN 10(如果先前未创建VLAN10,该命令敲完后自动创建VLAN10)

相关查看命令#
show vlan
show vlan brief
show run interface GigbitEthernet1/0

华为VLAN配置

创建VLAN#
vlan batch 10 to 20 30 40 to 50
vlan 10
name 192.168.10.0/24

物理接口划入VLAN#
interface XGigbitEthernet1/1
port link-type access #接口为Access模式
port default vlan 10  #接口划入VLAN 10(如果先前未创建VLAN10,该命令敲完后报错)

相关查看命令#
display vlan brief
display current interface XGigbitEthernet1/1

3)自动配置-VTP

VTP通过Trunk链路自动将server模式的交换机VLAN信息推送到client模式的交换机上。VTP一般适用于新建网络时简化配置的场景,VTP一旦推送完成数据库后,就需要将所有设备的VTP模式改成Transparent。因为今后如果一旦有新的具有更高修订号的交换机加入后,无论是server还是client模式都会导致现网交换机的VTP配置被覆盖,这会导致重大的网络故障。

Warning: 强烈建议禁用VTP。

三、Trunk

1、Trunk概述

端到端VLAN部署时,需要使用多台交换机,而交换机之间仅使用一条链路来传递多个VLAN的数据Trunk链路就是这样一条可以承载多个VLAN流量的点到点的物理链路。Trunk链路的使用可以将2层操作扩展到整个网络中,提高了端口利用率。

图3-1

准确认识access和trunk:access模式的端口只能承载任一某一个VLAN的流量,trunk模式的端口能够同时承载所有VLAN的流量

2、Trunk协议

实现单个物理链路承载多个VLAN流量的trunk协议有ISL和802.1q/dot1q两种。因为ISL是思科私有的,在多厂商设备的应用场景下很少使用,所以公有标准802.1q是目前使用最广泛的trunk协议标准

1)802.1q帧格式

为了支持承载多VLAN,trunk链路使用了802.1q帧格式。802.1q帧格式在原有的ethernet帧格式基础上增加了4bytes tag字段,该字段中包括了ethertype、PRI、VLAN id等更加细微的字段。

图3-2

  • ethertype(2bytes):表示802.1q标签

  • PRI(3bits):VLAN优先级;

  • VLAN id(12bits):即VID,表示该802.1q帧所属的VLAN,支持最多4096个VID,最大支持可配置的VID为4094,VID=0表示优先级帧

图3-3

802.1q帧长度达到1522 bytes,交换机需要支持该帧。普通帧(即ethernet帧)存在于access链路上,进入access端口后不会打上tag,本地VLAN的数据帧交换无需tag字段,而端到端VLAN的数据帧交换则需要tag字段,但是端到端VLAN交换只有跨交换机时才需要,让对端交换机知道从trunk链路上传递过来的每个数据帧属于哪个VLAN,这就必须要查看tag字段中的值才行。所以如果有帧(本征VLAN的数据帧除外)需要发送到trunk链路上时才会打tag。到达对端交换机后,立刻剔除tag,根据帧的dst MAC查看CAM表,比对后发送到access端口。这点和华为的tag和untag处理不太一样,思科交换机的802.1q帧的生存周期在于是否需要进行端到端的VLAN传递,端到端的VLAN传递一旦结束,那么802.1q帧就会被转换成普通ethernet帧。而CAM表中表项的VLAN则是交换机根据端口组划分时就生成的,而不是帧转发的依据。

2)Native VLAN

native VLAN(本征VLAN)/PVID(缺省VLAN)是指在trunk链路上传递,但是不打tag的数据帧。也就是说trunk链路可以发送802.1q帧,也可以发送不带tag的帧(可以理解为纯净以太网帧)。设置native VLAN的目的就是兼容部分不支持VLAN的设备,比如一些早期的设备或者无线AP,或者无法打tag的协议(如stp)等等。

图3-4

配置802.1q标准的trunk时,必须在trunk链路两端定义一个native VLAN。正常情况下,除了native VLAN外的所有数据帧在trunk链路传输时都会插入一个包含VID的tag来标识所属VLAN。

Note:

  • 默认本征VLAN为VLAN 1。

  • native VLAN在trunk链路两端交换机上配置,且需要一致。

图3-5

如果存在trunk链路两端交换机native VLAN不同,那么就会造成VLAN流量互串、VLAN跳转攻击等问题,所以建议设置一个偏僻的VLAN为native vlan。所谓的VLAN跳转攻击就是trunk链路两端native VLAN没配置成一样的VID,导致的不同VLAN互通情况。

3)VLAN Pruning

802.1q可以控制端到端VLAN的通信,通常这种行为业内称之为VLAN裁剪/VLAN修剪。例如两台交换机之间的Trunk链路上仅允许VLAN 10~99通过,VLAN 100被拒绝,理论上在Trunk链路一端执行VLAN裁剪即可,但是考虑到Trunk链路的负载,建议在Trunk链路两端执行VLAN裁剪。

3、VLAN通信原理

图3-6

讨论以下两种场景的VLAN通信时,native VLAN设置为VLAN 1。

1)本地VLAN通信

A需要和B通信,去掉ARP通信过程,只关注帧的tag和untag。A发送ethernet帧到access链路上,到达SW1 G1后,交换机需要根据“交换机基本通信原理”执行:查看帧首部的dst MAC和CAM表中的表项进行比对,查找到后根据表项后的port = G2,将帧从G2口发送出去。

本地VLAN通信的过程中,没有涉及到任何的tag和untag。因为数据帧进行本地VLAN通信时的转发依据无需tag中的信息。

2)端到端VLAN通信

802.1q封装

A需要和C通信,去掉ARP通信过程,只关注帧的tag和untag。A发送ethernet帧到access链路上,到达SW1 G1后,交换机根据CAM表中的表项信息,查找到需要扔到trunk链路上执行端到端的VLAN通信,于是交给802.1q进行数据封装:802.1q封装ethernet帧为802.1q帧,判断是否为native vlan:

  • 是,判断是否允许通过trunk链路

    • 允许,则802.1q不打tag,直接扔到trunk链路上

    • 不允许,则丢弃

  • 不是,判断是否允许通过trunk链路

    • 允许,则802.1q打上对应VLAN的tag(根据src MAC判断在CAM表项中的VLAN号),重新计算FCS后扔到trunk链路上

    • 不允许,则丢弃

Note:

  • trunk端口运行的802.1q协议负责802.1q帧封装。

  • access端口收到802.1q帧,会将tag忽略并当作普通ethernet帧处理。

802.1q解封装

SW2 G1收到802.1q帧后,判断是否允许通过trunk链路:

  • 允许,判断是否有tag:

    • 有,则根据tag字段中的VLAN值,去掉tag后,根据“交换机基本通信原理”的步骤扔到对应的出接口上

    • 无,则直接扔到本机所配置的native VLAN上,根据“交换机基本通信原理”扔到对应的出接口上

  • 不允许,则丢弃数据帧

总结:access不会对tag做任何处理(包括tag和untag),当端到端VLAN通信时,才会涉及到对tag处理,本地VLAN通信仅会执行查表转发,而与tag无关!802.1q帧的封装工作由802.1q协议来完成。

4、Trunk配置

1)DTP

Catalyst交换机会在trunk端口上使用动态trunk协议(即DTP),用于和对端自动协商trunk状态。DTP会进行trunk链路的邻居端口协商,包括工作模式、trunk协议等。工作模式包括:

  • access:永久access模式,端口忽略DTP协商结果。

  • trunk:永久trunk模式,端口忽略DTP协商结果。

  • auto:默认ethernet为auto,被动接收,如果邻居端口工作模式是trunk/desirable,那么就协商成trunk链路。

  • nonegotiate:阻止端口发送DTP帧,适合本地/邻居端口手动配置为trunk模式。

  • desirable:主动尝试建立trunk链路,如果邻居端口工作模式是trunk/desirable/auto,那么就协商成trunk链路。

图3-7

2)Trunk配置

思科Trunk配置

IOS配置#
int GigbitEthernet1/0
 switchport trunk en dot1q   #封装协议为802.1q
 switchport mode trunk      #端口模式为trunk
 switchport nonegotiate      #关闭DTP,接口设置为nonegotiate(即非协商)后,不会发送DTP帧,如果配置为非协商后,就必须使用手动配置接口为trunk或者access
 switchport trunk native vlan x  #设置本征VLAN,trunk链路两端交换机接口都需要修改
 switchport trunk allowed vlan { add | except | all | remove } x #VLAN裁剪

NXOS配置#
int Ethernet1/0
 switchport mode trunk      #端口模式为trunk
 switchport nonegotiate      #关闭DTP
#NX-OS默认敲完端口模式为trunk后,封装协议采用Dot1q。#

相关查看命令#
show int trunk

华为Trunk配置

int GigbitEthernet1/0
 port link-type trunk   #端口模式为trunk
 port trunk pvid vlan 99 #设置本征VLAN
 port trunk allow-pass vlan 10 20 30 #VLAN裁剪

四、常规部署建议

层次化设计方案中,二层和三层边界应当是汇聚层交换机。汇聚层交换机对上连接核心层交换机,采用L3互联;汇聚层交换机对下连接接入层交换机,采用L2互联。L2技术则主要采用VLAN、Trunk、Spanning-tree(为了防止二层网络出现环路,引发广播风暴)。VLAN应当配置在接入和汇聚交换机上,VLAN的网关一般采用SVI(因所有的二层网络都位于汇聚交换机,其SVI也位于汇聚交换机,业内称此类网关部署方式为集中式网关部署),也位于汇聚交换机。部署VLAN和Trunk时应当注意设计原则:

  • 未使用的物理接口划入黑洞VLAN(黑洞VLAN不是默认的VLAN 1)。

  • VLAN隔离:将语音VLAN、数据VLAN、管理VLAN、native VLAN、黑洞VLAN保持隔离。

  • 管理VLAN:将交换机管理网段单独规划且采用单独VLAN。启用SSH协议,不要使用telnet协议。

  • Trunk链路:关闭DTP、手动配置为trunk模式、将无需透传的VLAN执行裁剪(有效限制生成树震荡带来的影响)。

五、VLAN划分&子网划分

VLAN划分基于数据链路层,而子网划分基于网络层。在实际运用时,需要将两种东西结合起来才可以组网。通常情况下,规划了VLAN就必须要为每个VLAN规划相应的子网。VLAN划分和子网划分通常有四种组合:

Case1:相同VLAN,相同子网:标准设计(同一广播域);单播、广播能正常交互。

Case2:相同VLAN,不同子网:不推荐;

  • 广播通信正常:广播帧直接广播域泛洪,会干扰两个子网,广播帧无法隔离。

  • 单播通信正常(不同子网):首先主机会判断不处于同一子网,直接请求网关的MAC,将数据帧发送至网关,网关进行IP寻址,扔给目标主机的网关,再由该网关扔给目标主机。

Case3:不同VLAN,相同子网:不推荐;采用特殊方法可以通信。

  • 广播通信无法进行;源主机和目标主机不在同一个广播域,广播帧无法送达目标主机。

  • 单播通信无法进行;首先判断为同一子网,直接请求目标主机的MAC,但是因为广播通信无法进行,因此单播通信也无法进行。

  • 特殊方式:VLAN Translation、Native VLAN

Case4:不同VLAN,不同子网:标准设计(不同广播域);

  • 广播通信正常;广播帧仅在各自的广播域内泛洪,无法跨子网(即跨广播域)。

  • 单播通信正常;首先主机判断为不同子网,直接请求网关的MAC,将后续数据提交至网关,如果网关有目标主机所在的目标网络,那么就可以执行IP路由。