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路由。
评论