VLAN协议
来源 https://zhuanlan.zhihu.com/p/151853557
我们知道一个企业随着业务发展网络中的计算机越来越多,所有的主机在一个二层的以太网中会造成以下问题:
- 网络中的所有主机属于同一个广播域,容易造成广播报文泛滥,浪费网络带宽,造成链路拥塞;
- 广播域太大,同一广播域下的主机都可以互相通信,容易带来安全性问题。
VLAN技术可以隔离广播域,缩小广播域的范围,从而解决了上述问题。
正文
1:什么是VLAN?
VLAN(Virtual Local Area Network)即虚拟局域网,可以将一个物理局域网在逻辑上划分成多个广播域,也就是多个VLAN。
VLAN作用:
VLAN技术部署在数据链路层,用于隔离二层流量。
VLAN的通信原则:
- 同一个VLAN内的主机共享同一个广播域,它们之间可以直接进行二层通信;
- VLAN间的主机属于不同的广播域,不能直接实现二层互通。
VLAN优点:
既能够隔离广播域,又能够提升网络的安全性。
如上图所示:
原本属于同一广播域的主机被划分到了两个VLAN中,即,VLAN2和VLAN3。由于PC1和PC4同属于VLAN3,因此二层可以互相通信;PC1和PC2属于不同的VLAN,不能够二层通信。
2:VLAN报文格式:
带有VLAN的数据帧比正常以太网数据帧多了Tag字段,VLAN Tag长4个字节,直接添加在以太网帧头中。
Tag字段组成:
1、TPID:Tag Protocol Identifier,2字节,固定取值,0x8100,是IEEE定义的新类型,表明这是一个携带802.1Q标签的帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。
2、TCI:Tag Control Information,2字节。帧的控制信息,详细说明如下:
- Priority:3比特,表示帧的优先级,取值范围为0~7,值越大优先级越高。当交换机阻塞时,优先发送优先级高的数据帧。
- CFI:Canonical Format Indicator,1比特。CFI表示MAC地址是否是经典格式。CFI为0说明是经典格式,CFI为1表示为非经典格式。用于区分以太网帧、FDDI(Fiber Distributed Digital Interface)帧和令牌环网帧。在以太网中,CFI的值为0。
- VLAN Identifier:VLAN ID,12比特,可配置的VLAN ID取值范围为0~4095,但是0和4095在协议中规定为保留的VLAN ID,不能给用户使用。
在Tag字段中,主要关注的就是VLAN Identifier, 这个字段表示该数据帧带的vlan id是多少。
3:PVID
PVID即Port VLAN ID,代表端口的缺省VLAN。
为什么需要PVID?
交换机从对端设备收到的帧有可能是Untagged的数据帧,但所有以太网帧在交换机中都是以Tagged的形式来被处理和转发的,因此交换机必须给端口收到的Untagged数据帧添加上Tag。
为了实现此目的,必须为交换机配置端口的缺省VLAN。
交换机收到Untagged数据帧的处理方式:
当该端口收到Untagged数据帧时,交换机将给它加上该缺省VLAN的VLAN Tag。
缺省情况下,交换机每个端口的PVID是1。
如下图所示:通过dis int g0/0/3可以查看交换机二层端口的PVID为1。
4:VLAN的划分
我们知道vlan可以隔离广播域,那么如何去划分vlan呢?下面介绍下5种vlan的划分方法,重点关注基于端口的VLAN划分方式。
- 基于端口划分:根据交换机的端口编号来划分VLAN。
通过为交换机的每个端口配置不同的PVID,来将不同端口划分到VLAN中。初始情况下,交换机的端口处于VLAN1中。
优点:此方法配置简单,但是当主机移动位置时,需要重新配置VLAN。 - 基于MAC地址划分:根据主机网卡的MAC地址划分VLAN。
此划分方法需要网络管理员提前配置网络中的主机MAC地址和VLAN ID的映射关系。如果交换机收到不带标签的数据帧,会查找之前配置的MAC地址和VLAN映射表,根据数据帧中携带的MAC地址来添加相应的VLAN标签。
优点:在使用此方法配置VLAN时,即使主机移动位置也不需要重新配置VLAN。 - 基于IP子网划分:交换机在收到不带标签的数据帧时,根据报文携带的IP地址给数据帧添加VLAN标签。
- 基于协议划分:根据数据帧的协议类型(或协议族类型)、封装格式来分配VLAN ID。
网络管理员需要首先配置协议类型和VLAN ID之间的映射关系。 - 基于策略划分:使用几个条件的组合来分配VLAN标签。这些条件包括IP子网、端口和IP地址等。只有当所有条件都匹配时,交换机才为数据帧添加VLAN标签。另外,针对每一条策略都是需要手工配置的。
5:VLAN工作原理:
在介绍VLAN工作原理之前,我们先看下VLAN的2种链路类型和3种端口类型。
2种链路类型
VLAN链路分为两种类型:Access链路和Trunk链路。
- 接入链路(Access Link):连接用户主机和交换机的链路称为接入链路。如本例所示,图中主机和交换机之间的链路都是接入链路。
- 干道链路(Trunk Link):连接交换机和交换机的链路称为干道链路。如本例所示,图中交换机之间的链路都是干道链路。干道链路上通过的帧一般为带Tag的VLAN帧。
3种端口类型
学习了vlan的概念,我们知道网络中的数据帧要么是没有加上VLAN标记的标准以太网帧(untagged frame),要么是带有VLAN标记的以太网帧(tagged frame)。
那么不同类型的接口是如何发送和接收带有vlan标记的以太网数据帧的呢?
Access接口:
Access端口是交换机上用来连接用户主机的端口,它只能连接接入链路,并且只能允许唯一的VLAN ID通过本端口。
Access端口收发数据帧的规则如下:
- 如果该端口收到对端设备发送的帧是untagged(不带VLAN标签),交换机将强制加上该端口的PVID。
如果该端口收到对端设备发送的帧是tagged(带VLAN标签),交换机会检查该标签内的VLAN ID。当VLAN ID与该端口的PVID相同时,接收该报文。当VLAN ID与该端口的PVID不同时,丢弃该报文。 - Access端口发送数据帧时,总是先剥离帧的Tag,然后再发送。Access端口发往对端设备的以太网帧永远是不带标签的帧。
Trunk端口:
Trunk端口是交换机上用来和其他交换机连接的端口,它只能连接干道链路。Trunk端口允许多个VLAN的帧(带Tag标记)通过。
Trunk端口收发数据帧的规则如下:
- 当接收到对端设备发送的不带Tag的数据帧时,会添加该端口的PVID,如果PVID在允许通过的VLAN ID列表中,则接收该报文,否则丢弃该报文。
接收到对端设备发送的带Tag的数据帧时,检查VLAN ID是否在允许通过的VLAN ID列表中。如果VLAN ID在接口允许通过的VLAN ID列表中,则接收该报文。否则丢弃该报文。 - 端口发送数据帧时,当VLAN ID与端口的PVID相同,且是该端口允许通过的VLAN ID时,去掉Tag,发送该报文。
当VLAN ID与端口的PVID不同,且是该端口允许通过的VLAN ID时,保持原有Tag,发送该报文。
Hybrid端口:
Access端口发往其他设备的报文,都是Untagged数据帧,而Trunk端口仅在一种特定情况下才能发出untagged数据帧,其它情况发出的都是Tagged数据帧。
Hybrid端口是交换机上既可以连接用户主机,又可以连接其他交换机的端口。
Hybrid端口既可以连接接入链路又可以连接干道链路。Hybrid端口允许多个VLAN的帧通过,并可以在出端口方向将某些VLAN帧的Tag剥掉。华为设备默认的端口类型是Hybrid。
Hybrid端口收发数据帧的规则如下:
- 当接收到对端设备发送的不带Tag的数据帧时,会添加该端口的PVID,如果PVID在允许通过的VLAN ID列表中,则接收该报文,否则丢弃该报文。
当接收到对端设备发送的带Tag的数据帧时,检查VLAN ID是否在允许通过的VLAN ID列表中。如果VLAN ID在接口允许通过的VLAN ID列表中,则接收该报文,否则丢弃该报文。 - Hybrid端口发送数据帧时,将检查该接口是否允许该VLAN数据帧通过。如果允许通过,则可以通过命令配置发送时是否携带Tag。
VLAN的工作原理:
下一章节我们一起介绍下VLAN的工作原理:
结合VLAN的链路类型和端口类型,根据PC2和PC3互相通信的过程介绍下VLAN的工作原理。
阶段一:PC2 ARP广播获取PC3的MAC地址
1、我们知道主机间是基于MAC地址进行二层通信的,PC2和PC3由于是首次通信,PC2不知道PC3的MAC地址,因此会在广播域中发送ARP广播报文,询问有谁知道PC3的MAC地址。
2、LSW1从接口g0/0/2 收到PC2发送的ARP广播报文,由于接口g0/0/2是access接口,端口属于vlan 2,首先会在MAC地址表项中记录下PC2 mac地址、所属VLAN2、g0/0/2三者的对应关系,然后会给数据帧打上vlan2的标签,并在vlan 2中泛洪该广播报文。
3、LSW1将带有vlan2标签的广播报文发送给LSW2。
4、LSW2从接口g0/0/1 收到PC2发送的ARP广播报文,首先在MAC地址表项中记录下PC2 mac地址、VLAN2、g0/0/1三者的对应关系,并在vlan 2中泛洪该广播报文。
5、LSW2在发送广播报文给PC3时会剥除vlan2的标签。
6、PC3收到从LSW2发送的ARP广播报文,会进行ARP单播回应。
回应的报文转发流程和上述类型,不做讲解。
阶段二:数据转发过程
1、PC2发送源MAC是PC2,目的MAC是PC3的以太网数据帧。
2、LSW1从接口g0/0/2 收到PC2发送的数据帧,由于接口g0/0/2是access接口,端口属于vlan 2,首先会给数据帧打上vlan2的标签,然后在对应vlan中根据目的mac查找mac地址表,可以找到PC3 MAC地址对应的接口是g0/0/1。
3、LSW1的g0/0/1端口类型是trunk,放通了vlan 2 和3,因此LSW1将带有vlan2标签的数据帧从g0/0/1发送给LSW2。
4、LSW1从接口g0/0/1 收到PC2发送的数据帧,由于g0/0/1端口类型是trunk,放通了vlan 2 和3,因此接收该数据帧,在对应vlan中根据目的mac查找mac地址表,可以找到PC3 MAC地址对应的接口是g0/0/2。
5、LSW2的g0/0/1端口类型是access接口,端口属于vlan 2,因此LSW2剥除vlan2标签将数据帧从g0/0/2发送给PC3。
6、PC3收到数据帧查看目的mac是发送给自己的接收下该数据帧。
6: VLAN配置:
创建VLAN:
VLAN ID的取值范围是1到4094。在交换机上划分VLAN时,需要首先创建VLAN。在交换机上执行vlan <vlan-id>命令,创建VLAN。
例如:执行vlan 10命令后,就创建了VLAN 10,并进入了VLAN 10视图。
如需创建多个VLAN:
- 可以在交换机上执行vlan batch { vlan-id1 [ to vlan-id2 ] }命令,以创建多个连续的VLAN。
- 也可以执行vlan batch { vlan-id1 vlan-id2 }命令,创建多个不连续的VLAN,VLAN号之间需要有空格。
VLAN端口类型的配置:
华为系列交换机上,默认的端口类型是hybrid。
配置端口类型的命令是port link-type <type>,type可以配置为Access,Trunk或Hybrid。
配置Access
1、使用port link-type access命令修改端口的类型为Access;
2、添加端口到VLAN:可以使用两种方法把端口加入到VLAN。
- 第一种方法是进入到VLAN视图,执行port <interface>命令,把端口加入VLAN。
- 第二种方法是进入到接口视图,执行port default <vlan-id>命令,把端口加入VLAN。vlan-id是指端口要加入的VLAN。
配置Trunk
1、使用port link-type trunk命令修改端口的类型为Trunk;
2、配置Trunk端口允许哪些VLAN的数据帧通过。执行port trunk allow-pass vlan { { vlan-id1 [ to vlan-id2 ] } | all }命令,可以配置端口允许的VLAN,all表示允许所有VLAN的数据帧通过。
3、执行port trunk pvid vlan vlan-id命令,可以修改Trunk端口的PVID。
修改Trunk端口的PVID之后,需要注意:
- 缺省VLAN不一定是端口允许通过的VLAN。只有使用命令port trunk allow-pass vlan { { vlan-id1 [ to vlan-id2 ] } | all }允许缺省VLAN数据通过,才能转发缺省VLAN的数据帧。
- 交换机的所有端口默认允许VLAN1的数据通过。
配置Hybrid
1、port link-type hybrid命令的作用是将端口的类型配置为Hybrid。默认情况下,交换机的端口类型是Hybrid。因此,只有在把Access口或Trunk口配置成Hybrid时,才需要执行此命令。
2、port hybrid tagged vlan{ { vlan-id1 [ to vlan-id2 ] } | all }命令用来配置允许哪些VLAN的数据帧以Tagged方式通过该端口。
3、port hybrid untagged vlan { { vlan-id1 [ to vlan-id2 ] } | all }命令用来配置允许哪些VLAN的数据帧以Untagged方式通过该端口。
配置检查
执行display vlan命令,可以确认端口是否已经加入到VLAN中。
7:实战——vlan配置实例
如图所示:PC1和PC4属于vlan3,PC2和PC3属于vlan2。通过配置实现PC1和PC4能够互通,PC1和PC2相互隔离;
配置如下:
[LSW1]
#
sysname LSW1
#
vlan batch 2 to 3
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 2 to 3
#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 2
#
interface GigabitEthernet0/0/3
port link-type access
port default vlan 3
[LSW2]
#
sysname LSW2
#
vlan batch 2 to 3
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 2 to 3
#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 2
#
interface GigabitEthernet0/0/3
port link-type access
port default vlan 3
#
在LSW1上查看:
在PC1上ping测试PC4和PC2,可以发现相同vlan之间可以通信,不同vlan间不可以通信。
分别在LSW1的G0/0/3和G0/0/1抓取报文:
在G0/0/3抓取的报文是不带标签的
G0/0/1抓取报文是带标签的:
根据type取值0x8100,表明这是一个携带802.1Q标签的帧。可以得到以下信息:
- Priority为0,优先级最低。
- CFI的值为0表明是以太网
- VLAN ID值为3,表示这是一个带有vlan3标签的数据帧。
============== End