前言

上一章节我们介绍了DHCP协议的工作原理 你知道你的电脑IP地址是如何获取的吗?一文带你搞懂DHCP动态主机配置协议。

今天来介绍下一个二层的隔离技术——VLAN。那么为什么会出现这种技术呢?

我们知道一个企业随着业务发展网络中的计算机越来越多,所有的主机在一个二层的以太网中会造成以下问题:

  • 网络中的所有主机属于同一个广播域,容易造成广播报文泛滥,浪费网络带宽,造成链路拥塞
  • 广播域太大,同一广播域下的主机都可以互相通信,容易带来安全性问题

VLAN技术可以隔离广播域,缩小广播域的范围,从而解决了上述问题。

正文

1 什么是VLAN?

VLAN(Virtual Local Area Network)即虚拟局域网,可以将一个物理局域网在逻辑上划分成多个广播域,也就是多个VLAN。

VLAN作用:

VLAN技术部署在数据链路层,用于隔离二层流量

VLAN的通信原则:

  • 同一个VLAN内的主机共享同一个广播域,它们之间可以直接进行二层通信;
  • VLAN间的主机属于不同的广播域,不能直接实现二层互通

VLAN优点:

既能够隔离广播域,又能够提升网络的安全性

access端口对报文的处理_vlan为什么能隔离广播域

如上图所示:

原本属于同一广播域的主机被划分到了两个VLAN中,即,VLAN2和VLAN3。由于PC1和PC4同属于VLAN3,因此二层可以互相通信;PC1和PC2属于不同的VLAN,不能够二层通信。

2 VLAN报文格式:

带有VLAN的数据帧比正常以太网数据帧 多了Tag字段,VLAN Tag长4个字节,直接添加在以太网帧头中。

access端口对报文的处理_vlan为什么能隔离广播域_02

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。

access端口对报文的处理_access端口对报文的处理_03

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端口对报文的处理_vlan为什么能隔离广播域_04

  • 接入链路(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的工作原理:

access端口对报文的处理_vlan为什么能隔离广播域_04

结合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。

例如:执行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可以配置为Access,Trunk或Hybrid

配置Access

1、使用port link-type  access命令修改端口的类型为Access;

2、添加端口到VLAN:可以使用两种方法把端口加入到VLAN。

  • 第一种方法是进入到VLAN视图,执行port 命令,把端口加入VLAN。
  • 第二种方法是进入到接口视图,执行port default 命令,把端口加入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相互隔离;

access端口对报文的处理_vlan为什么能隔离广播域_04

配置如下:

[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上查看:

access端口对报文的处理_access端口对报文的处理_07

在PC1上ping测试PC4和PC2,可以发现相同vlan之间可以通信,不同vlan间不可以通信。

access端口对报文的处理_帧类型0x0800代表什么_08

分别在LSW1的G0/0/3和G0/0/1抓取报文:

在G0/0/3抓取的报文是不带标签的

access端口对报文的处理_gstreamer 获取帧数据_09

G0/0/1抓取报文是带标签的:

access端口对报文的处理_帧类型0x0800代表什么_10

根据type取值0x8100,表明这是一个携带802.1Q标签的帧。可以得到以下信息:

  • Priority为0,优先级最低。
  • CFI的值为0表明是以太网
  • VLAN ID值为3,表示这是一个带有vlan3标签的数据帧。