VLAN
- LAN:一般指局域网,VLAN中就是虚拟局域网,通过VLAN将一个局域网逻辑的划分为多个局域网
- 在企业网中,通常会为不同部门分配不同的局域网,但我们一般使用路由器划分局域网,如果想增加局域网的数量,就需要增加路由器的接口数,而路由器增加接口是需要成本,所以为了实现既能划分广播域,又不需增加路由器的接口数,就出现了VLAN (虚拟局域网)
- VLAN:交换机和路由器协同合作后,将原来的一个局域网逻辑上划分为多个。实现方法为:为交换机的每个接口分配一个标签(pvid),当有数据包从某个交换机接口进入交换机时,交换机首先会将该数据包的源MAC与pvid绑定,添加到MAC表中;然后查看目标MAC,在MAC地址表中查找目标端口,如果有记录则单播转发,如果无,将该数据包想具有相同VID的接口洪泛。
VLAN不仅可以根据接口划分,可以根据MAC地址、IP地址进行划分,甚至可以根据策略进行VLAN划分
VID配置映射到交换机的接口,实现VLAN的划分:一层VLAN/物理VLAN
VID配置映射到数据中的MAC地址,实现VLAN的划分 : 二层VLAN
VID配置映射到数据中的类型字段,实现VLAN的划分:三层VLAN
[sw1-GigabitEthernet0/0/3]display mac-address
MAC address table of slot 0:
-------------------------------------------------------------------------------
MAC Address VLAN/ PEVLAN CEVLAN Port Type LSP/LSR-ID
VSI/SI MAC-Tunnel
-------------------------------------------------------------------------------
5489-982f-5563 2 - - GE0/0/3 dynamic 0/-
5489-98fb-671a 1 - - GE0/0/4 dynamic 0/-
-------------------------------------------------------------------------------
Total matching items on slot 0 displayed = 2
交换机为了更快的转发数据,会将MAC表转换为CAM表,CAM是将MAC表中的MAC地址+接口编号+vlanid转换为hash值,再转换为二进制格式,在基于目标MAC转发时会查看CAM表。
规则
- 在华为设备中,对交换机的每个接口我们需要关注:PVID、允许列表、出接口是否携带封装。
[sw1]display port vlan active
T=TAG U=UNTAG
-------------------------------------------------------------------------------
# 接口模式 允许列表
Port Link Type PVID VLAN List
-------------------------------------------------------------------------------
GE0/0/1 hybrid 1 U: 1
GE0/0/2 hybrid 1 U: 1
GE0/0/3 hybrid 1 U: 1
GE0/0/4 hybrid 1 U: 1
GE0/0/5 hybrid 1 U: 1
GE0/0/6 hybrid 1 U: 1
GE0/0/7 hybrid 1 U: 1
......此处省略其他17个接口
- 当流量来到交换机的接口,如果该流量没有携带标签则打入该接口的PVID,然后查看允许列表是否允许该PVID进入;如果携带VID,则直接查看允许列表。流量在交换机内部是携带封装的。当流量出交换机时,首先查看允许列表,查看允许列表是否允许属于该VID的流量转出,如果允许转出查看转出是否封装VID,如果不封装则剥离VID。
PVID
-
PVID:用来标识接口的标签,区分和标定不同的VLAN,IEEE组织颁布802.1Q标准中要求: PVID必须是由12位二进制构成。取值范围 0 -4095,0和4095是保留编号,所以,可用的取值范围为1 - 4094。
-
华为体系规定:所有通过接口进入到交换机的数据,都必须打上接口所对应的PVID的标签,也就是说,交换机内部所有的数据都是带标签的。802.1Q标准设计了VLAN的标签,是由4个字节构成,其中包含12位的VID,用来区分不同VLAN的流量。并将这个标签加入到以太网Ⅱ型帧的源MAC地址和类型字段之间。
-
802.1Q标准规定,将带有标签的帧称为tagged帧或802.1Q帧,没带标签的帧我们称为untagged帧
允许列表与出口是否携带封装
- 允许列表中标注着允许从该口出入的VID,即携带这些VID的tagged帧都可以从该接口出交换机,如果该接口下连接着终端设备,由于终端上设备不识别标签,所以tagged帧在从出接口的时候需要剥离标签。
- 如果接口对面连接着交换机,相连交换机具有对VLAN的认知应该是相同的,该交换机属于某个VLAN的流量到另一个交换机也应该属于这个VLAN,所以tagged在该接口转发时需要携带标签。
接口模式
不同的接口模式都是基于上述的规则转发数据,但不同的接口对PVID、允许列表、出接口是否携带封装的修改权限并不相同。
[sw1]vlan 2 # 创建VLAN
[sw1-vlan2]q
[sw1]vlan batch 3 4 5 6 # 批量创建VLAN
Info: This operation may take a few seconds. Please wait for a moment...done.
[sw1]port-group group-member GigabitEthernet 0/0/1 GigabitEthernet 0/0/2 # 创建接口组,
[sw1-port-group] # 在接口组里的配置会在组里的所有接口生效
[sw1]port-group group-member GigabitEthernet 0/0/1 to GigabitEthernet 0/0/5 #
Access
- 只允许修改PVID,允许列表只有一个VID,而且和PVID相同,会随着PVID的改变而改变,出口封装方式仅为不封装。
[sw1]inter g 0/0/1 # 进入接口
[sw1-GigabitEthernet0/0/1]port link-type access # 修改接口模式
[sw1-GigabitEthernet0/0/1]port default vlan 2 # access模式下修改PVID
[sw1-GigabitEthernet0/0/1]display port vlan active
T=TAG U=UNTAG
-------------------------------------------------------------------------------
Port Link Type PVID VLAN List
-------------------------------------------------------------------------------
GE0/0/1 access 2 U: 2
Trunk
- 可以修改PVID和允许列表,不能修改出接口是否封装。和PVID相同的VID如果在允许列表中则固定为不带标签,允许列表中其他VID出口封装仅为封装。
[sw1-GigabitEthernet0/0/2]port link-type trunk # 修改接口模式
[sw1-GigabitEthernet0/0/2]port trunk allow-pass vlan ? # 修改允许列表,添加允许通过的VID
INTEGER<1-4094> VLAN ID
all All
[sw1-GigabitEthernet0/0/2]undo port trunk allow-pass vlan 1 # 在允许列表中去除该VID
Hybrid
- 可以修改PVID、允许列表、出接口是否封装,Hybrid模式可以模仿access模式和trunk模式
[sw1]interface g 0/0/1
[sw1-GigabitEthernet0/0/1]port link-type hybrid # 交换机接口默认是hybrid模式
[sw1-GigabitEthernet0/0/1]port hybrid pvid 2 # 修改PVID
[sw1-GigabitEthernet0/0/1]port hybrid tagged vlan 2 3 4 # 允许vlan 2 3 4 的流量出入且出接口许携带封装
[sw1-GigabitEthernet0/0/1]port hybrid untagged vlan 2 to 10 # 允许vlan2、3、4、5……10的流量出入且出接口不携带封装
[sw1-GigabitEthernet0/0/1]port hybrid tagged/untagged vlan all # 允许所有VLAN出入且出入都携带封装/剥离封装
[sw1-GigabitEthernet0/0/1]undo port hybrid untagged vlan 1 # 删除允许列表中某个vlan
VLAN实例
-
上图中,当PC1访问PC2的流量来到SW1上时,会首先添加vlan2的标签,然后通过trunk发送到SW2,由于trunk的pvid为2,所以PC1的访问流量会被剥离封装,没有封装的流量来到SW2上,首先添加VLAN3的标签,看出口为access且允许vlan3的流量出,所以将流量剥离封装发送至PC2,PC2访问PC1也同理,虽然PC1和PC2没有处于一个VLAN也没有网关,但依然实现了PC1和PC2的通信。
-
上图中sw2不做任何处理即所有接口都默认为VLAN1且出接口的都不携带封装,当sw2的流量来到sw1上时,都会打上VLAN2的标签,此时sw2所有的接口都属于VLAN2.。
VLAN间路由
- 我们通常将连接用户的接口设为access模式,access模式只允许和PVID相同的VLAN流量进出接口,这样就使得不同的VLAN间无法直接通信。
- 不同VLAN间通信我们可以通过一些策略实现访问控制,如我在VLAN实例中提到的第一个图。但更多的是通过网关修改封装的vid实现VLAN间通信。
单臂路由
- 上图中,将PC1和PC2分别划分到vlan2和vlan3中,并为PC1和PC2配置不同网段的IP,当它们之间通信时,会先将流量交给网关,网关根据流量的目标IP修改封装,然后再将流量转发。
PC再访问其他设备时,它会根据目标IP是否和自己在同一个网段而采用不同的步骤。
如果目标和自己在同一个网段则直接发送ARP询问对方MAC
如果目标和自己不在同一个网段则将流量交由网关转发。
如果不同VLAN配置相同网段,那么它们将会发送ARP包,而该数据包是无法进入到对方VLAN中的
- 由于一个网关只能负责一个局域网,而上图中交换机只连接了一个路由器接口,当不同VLAN的流量来到网关时,它即使可以识别流量携带的VLAN号,它又如何知道目标所在的VLAN呢?所以有子接口来解决这个问题。
- 子接口:逻辑的将一个物理接口虚拟为多个子接口。这样每个子接口可以负责一个VLAN,子接口所在网段也会添加到路由表中,当不同VLAN间通信的流量来到路由器上时,首先根据其所携带的VLAN号交给对应的子接口,子接口解封装查看目标IP,再根据路由表交给负责目标所在网段的字节口,子接口在将流量转发出去时会添加本VLAN的封装。
[s1]inter GigabitEthernet 0/0/0.1 # 创建子接口并进入该接口
[s1-GigabitEthernet0/0/0.1]
[s1-GigabitEthernet0/0/0.1]dot1q termination vid 2 # 配置该接口所属VLAN
[s1-GigabitEthernet0/0/0.1]arp broadcast enable # 开启ARP广播请求应答
# 子接口默认不会回复ARP广播,开启后,会回复真实物理接口的MAC
[s1-GigabitEthernet0/0/0.1]ip address 192.168.1.1 24 # 为子接口配置IP
- 查看路由表可以看到子接口所在网段已经添加到路由表中,当子接口收到访问本网段的流量时,会先在流量中添加子接口所属VLAN的vid在转发。
- 由于不同VLAN间通信都需通过与路由器所连的一条链路,所也被称为单臂路由。随着技术的进步,出现了三层交换机,即具备路由功能的交换机,现在VLAN间的路由一般使用三层交换机实现。
由于路由器需要识别标签,所以交换机与路由器相连的接口需要允许所有VLAN的流量出入,且出都携带封装。
华为设备中,将路由器的接口划分子接口后,物理接口依然可以使用,但只能识别不携带VLAN封装的流量。
三层交换机
- 二层交换机中,接口没有IP也没有MAC地址,它只负责二层交换,即根据目标MAC选择单播或洪泛
- 三层交换机同时具备二层交换技术和三层转发技术,每个接口都拥有MAC地址且可以配置IP,可以认为是交换机和路由器合体版,它可以做交换机和路由器做的所有事。
- 三层交换机的接口默认处于二层模式,需要手动开启三层模式
[sw1]inter g 0/0/1
[sw1-GigabitEthernet0/0/1]undo portswitch # 切换为3层接口
[sw1-GigabitEthernet0/0/1]ip enable
Error: The L3 interface must be switched to a L2 port first.
[sw1-GigabitEthernet0/0/1]display ip routing-table # 查看路由表
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 2 Routes : 2
Destination/Mask Proto Pre Cost Flags NextHop Interface
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
设备不是开启了三层之后就都可以配置IP地址,需要V200R003C00之后的版本才能配置IP否则会报错
工作方式
- 交换机的工作方式:收到数据帧后,查看二层封装,先记录源MAC与接口的映射,在看目标MAC,如果MAC表里有记录单播无则洪泛。
- 路由器的工作方式:收到数据帧后,解封装看二层,如果目标MAC是广播地址或自己,继续解封装看三层;不是则根据路由表转发;解封状看三层,如果目标IP是自己或广播IP则继续解封状看四层,不是则丢弃。
- 三层交换机工作方式:收到数据帧后,查看二层封装,先记录源MAC与接口的映射,在看目标MAC,如果目标MAC是自己的MAC则解封装,如果目标MAC是广播MAC则解封状加洪泛,如果目标MAC是其他则查看MAC表,有记录单播无则洪泛。解三层封装看目标IP,如果是自己的IP或广播IP则继续解封装,不是则丢弃。
SVI
- SVI:交换机虚拟接口,当我们配置交换机时,如果通过console线连接设备配置,需要你来到设备面前,如果通过远程连接的方式连接设备,那你就不需要找设备,只需知道设备的IP,就可以通过命令远程连接设备。但我上面说过二层交换机的接口不可以配置IP,所以就需要在交换机上创建一个虚拟接口,通过给虚拟接口配置IP,就可以实现远程登陆了。
- 二层交换机只能创建一个SVI,而且该SVI只属于一个VLAN,其他VLAN想远程连接SVI需要通过路由。
[sw1]inter Vlanif 1 # 创建虚拟接口,
[sw1-Vlanif1]ip address 192.168.1.1 24 # 配置IP
[sw1-Vlanif1]display ip inter brief
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
The number of interface that is UP in Physical is 1
The number of interface that is DOWN in Physical is 3
The number of interface that is UP in Protocol is 1
The number of interface that is DOWN in Protocol is 3
Interface IP Address/Mask Physical Protocol
MEth0/0/1 unassigned down down
NULL0 unassigned up up(s)
Vlanif1 192.168.1.1/24 down down # 可以看到创建的SVI
- 在ensp中没有二层交换机,都是三层交换机,三层交换机可以为每个VLAN配置一个SVI
- 使用三层交换机充当网关,在三层交换机上为每个VLAN都创建个SVI,并配置IP,该SV可以是该VLAN的网关,下图中当PC1访问PC2时,由于PC1和PC2处于不同VLAN,所以PC1会先广播ARP包询问网关MAC,三层交换机收到ARP后,看目标MAC是全F于是解封装看三层,看目标IP是SVI2的IP,于是交给SVI2处理,SVI2继续解封装,发现是个ARP包,于是将SVI2的MAC回复给PC1,PC1将访问包交给三层交换机,三层交换机依据目标MAC交由SVI2处理。SVI2查看路由表将访问包交由SVI3,SVI3看目标IP处于自己所管理的网段,于是先通过ARP询问PC2的MAC,然后将访问包发送给PC2。
- 上图中通过三层交换机实现了VLNA间通信,不像单臂路由只有一条链路承载所有VLAN间的通信,三层交换机不同VLAN间通都是通过终端与交换机的链路,大大减少了链路压力。