本文最后更新于 2024-08-23,文章内容可能已经过时。

🤔什么是 VLAN?

VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的 LAN 在逻辑上划分成多个广播域的通信技术。
每个 VLAN 是一个广播域,VLAN 内的主机间可以直接通信,而 VLAN 间则不能直接互通。这样,广播报文就被限制在一个 VLAN 内。

🪚VLAN 的划分

在 VLAN 中一个 VLAN= 一个广播域 = 一个逻辑子网,可以划分 4096(0-4095)个 VLAN,但需要注意:0 与 4095 是不能使用的,仅供系统使用,1 是设备出厂时候默认携带的,交换机的所有接口默认都划分到 VLAN1 中,1002-1005 是思科默认存在的,用户不能使用,用于早期的令牌环网。

VLAN 有多钟划分方式:端口、MAC 地址、子网、协议、策略,其中端口是项目中最常见的划分方式,当接口缺省时 VLAN id 默认为 1

思科:

Switch(config)#do show VLAN brief    //查看VLAN的简要信息,
Switch(config)#VLAN 20               //设置VLAN 20
Switch(config-VLAN)#name aaa         //将VLAN 20的名字修改为aaa,
Switch(config-VLAN)#exit             //退出
Switch(config)#do show VLAN br       //查看VLAN信息

//一次性创建多个VLAN
Switch(config)#VLAN 10,20,30
Switch(config)#VLAN 60-70

华为 /H3C:

[Switch] VLAN 10                      //创建VLAN 10
[Switch-VLAN10] description ccc       //修改VLAN 描述
[Switch-VLAN10]quit                   //退出
[Switch] VLAN batch 20 to 25          //批量创建VLAN 20-25
[Switch] display VLAN br              //查看VLAN信息
[Switch] display VLAN                 //查看VLAN信息
[Switch] display VLAN all             //查看所有VLAN信息

📥三种接口

Access 接口

Access 接口一般用于和不能识别 Tag 的用户终端(如用户主机、服务器)相连,或者不需要区分不同 VLAN 成员时使用。

在一个 VLAN 交换网络中,以太网数据帧主要有以下两种形式:

  • 无标记帧(Untagged 帧):原始的、未加入 4 字节 VLAN 标签的帧。

  • 有标记帧(Tagged 帧):加入了 4 字节 VLAN 标签的帧。

接收:

  • 接口接收到一个 Untagged 的数据帧时,设备会接收该数据帧,根据接口的 PVID 打上相对应的 tag 标签

  • 接口接收到一个有 tag 的数据帧时,设备会比较数据帧的 VLAN id 和自己接收接口的 pvid 是否一致,若一致则接收,不一致则丢弃

发送:

  • VLAN id 和接口 pvid 一样时,剥离 tag, 再把数据发出

  • VLAN id 和接口 pvid 不一样时,禁止发出

思科:

Switch(config)# interface range e0/0-1                //进入要设置的接口
Switch(config-if-range)# switchport mode access       //设置接口模式为access
Switch(config-if-range)# switchport access VLAN 10    //把Access接口指派给VLAN 10

华为 /H3C:

[Switch] VLAN 10                                       //创建VLAN 10
[Switch-VLAN10] quit                                   //退出
[Switch] interface g1/0/1                              //进入接口
[Switch-GigabitEthernet1/0/1] port link-type access    //设置接口为access
[Switch-GigabitEthernet1/0/1] port access VLAN 10      //把Access接口指派给VLAN 10

Trunk 接口

Trunk 接口一般用于连接交换机、路由器、AP 以及可同时收发 Tagged 帧和 Untagged 帧的语音终端。它可以允许多个 VLAN 的帧带 Tag 通过,但只允许属于缺省 VLAN 的帧从该类接口上发出时不带 Tag(即剥除 Tag)。

Trunk 接口上的缺省 VLAN,有的厂商也将它定义为 native VLAN。当 Trunk 接口收到 Untagged 帧时,会为 Untagged 帧打上 Native VLAN 对应的 Tag。

本征 VLAN(native VLAN):本征 VLAN 默认是 VLAN1,并且是可以修改的,修改后,不加 tag 的帧全都送给本征 VLAN 来在中继端口上传输

接收:

  • 接口接收到一个 Untagged 数据帧时,则设备会认为该数据属于本征 VLAN 的流量,打上本征 VLAN 的 pvid 再去查看该 pvid 是否在允许通过的 VLAN 列表中,如果在则接收,不在则丢弃

  • 接口接收到一个有 tag 的数据帧时,设备会判断该 tag 是否在允许通过的列表中,如果在则接收,不在则丢弃

发送:

发送接口的 pvid 是否一致,也需要判断 VLAN id 是否在允许通过的 VLAN 列表中

  • 一致,则将数据帧的 tag 剥离,再从该接口发送出去(此时数据帧还是携带 tag 标签)

  • 不一致,则直接将数据帧从该接口发送出去(此时数据帧没有携带 tag 标签)

封装协议:

  • dot1q,是公有的协议,由 IEEE 定义的标准,VLAN 标签的信息

  • ISL,是思科私有的协议

思科:

Switch(config-if)# switchport trunk encapsulation dot1q    //trunk协议封装为dot1q.
Switch(config-if)# switchport mode trunk                   //修改模式为trunk
Switch(config-if)# switchport trunk native VLAN ?          //将trunk加入这些指定VLAN
Switch(config-if)# switchport trunk allowed VLAN ?         //将trunk加入这些指定VLAN
Switch# show interfaces trunk                              //查看trunk接口信息

华为 /H3C:

[Switch] interface Ethernet0/0/1                                //进入接口
[Switch-Ethernet0/0/1] port link-type trunk                    //设置接口为trunk
[Switch-Ethernet0/0/1] port trunk allow-pass VLAN 2 to 4094    //将trunk加入这些指定VLAN
[Switch-GigabitEthernet1/0/3]port trunk permit VLAN all        将trunk加入这些指定VLAN
[Switch-Ethernet0/0/1]port trunk pvid VLAN ?                   //设置缺省VLAN id

Hybrid 接口(华为 /H3C 独有)

Hybrid 接口和 Trunk 类似,该类型的接口允许放行多个 VLAN 的流量

Hybrid 接口既可以用于连接不能识别 Tag 的用户终端(如用户主机、服务器)和网络设备(如 Hub),也可以用于连接交换机、路由器以及可同时收发 Tagged 帧和 Untagged 帧的语音终端、AP。它可以允许多个 VLAN 的帧带 Tag 通过,且允许从该类接口发出的帧根据需要配置某些 VLAN 的帧带 Tag(即不剥除 Tag)、某些 VLAN 的帧不带 Tag(即剥除 Tag)。

Hybrid 接口和 Trunk 接口在很多应用场景下可以通用,但在某些应用场景下,必须使用 Hybrid 接口。比如在灵活 QinQ 中,服务提供商网络的多个 VLAN 的报文在进入用户网络前,需要剥离外层 VLAN Tag,此时 Trunk 接口不能实现该功能,因为 Trunk 接口只能使该接口缺省 VLAN 的报文不带 VLAN Tag 通过。

接收::

  • 接口接收到一个 Untagged 数据帧时,设备会认为该数据属于本征 VLAN 的流量,打上本征 VLAN 的 pvid 再去查看该 pvid 是否在允许通过的 VLAN 列表中,如果在则接收,不在则丢弃

  • 接口接收到一个有 tag 的数据帧时,设备会判断该 tag 是否在允许通过的列表中,若在则接收,不在则丢弃

发送:

  • 用户可以灵活指定 hybrid 接口在发送某些 VLAN 数据帧的时候是否携带标签

  • 也需要判断 VLAN id 是否在允许通过的 VLAN 列表中

🧩VTP(VLAN Trunking Protocol)

VLAN 中继协议 VTP(VLAN Trunking Protocol)是 OSI 参考模型第二层的通信协议,主要用于管理在同一个域内 VLAN 的建立、删除和重命名。VTP 也被称为虚拟局域网干道协议,是思科私有协议,主要用于实现 VLAN 间的同步,基于 trunk 模式实现,基于 C/S(Client/Server)架构

模式

服务端模式:

  • 可以对于 VLAN 进行增删改

  • 可以通告和转发 VLAN 信息

  • 可以同步 VLAN 信息

  • 当设备关机之后,VLAN 信息不会丢失

客户端模式:

  • 不可以对于 VLAN 进行增删改

  • 可以转发 VLAN 信息

  • 可以同步 VLAN 信息

  • 当设备关机之后,VLAN 信息会丢失

透明模式:

  • 可以针对 VLAN 进行增删改,但是只在本地有效

  • 可以转发 VLAN 信息

  • 可以转发 VLAN 信息

  • 当设备关机之后,VLAN 信息不会丢失

同步原理

客户端会向服务端进行学习,同步 vlan 信息,修订版本号低找修订版本高的进行同步

相关参数

管理域:用于限定 vtp 的管理范围 / 同步范围

密码:用于身份认证

修订版本号:标识 vlan 的新旧程度,针对 vlan 的操作(增删改),每操作一次,修订版本号 +1,作为同步的依据,透明模式的修订版本号保持为 0

相关配置

设备默认运行 vtp,模式全部都是 server

  1. 先把设备相连的链路设置为 trunk

  2. 启用 vtp 技术

  3. 服务端上创建 vlan

SW6(config)#vtp domain yucedu    //设置vtp域名
SW6(config)#vtp password 123     //设置vtp密码,
SW6(config)#vtp mode server      //设置vtp模式,
SW6(config)#do show vtp ?        //显示一些VTP的相关信息

📨VLAN 间通信

对于二层网络,不同 vlan 之间是没有办法直接通信的,需要借助三层设备

通过交换机和路由器直接拉专线,每个 vlan 有不同的路由器接口

路由器的接口数量比较少,拓展性不高

通过三层交换机,创建一个逻辑接口

SVI-- 思科 /VLANIF-- 华为华三

SVI 接口双 up 的条件:

  1. vlan 数据库要有相对应的 vlan 信息

  2. SVI 接口需要手动激活(no shutdown)

  3. 需要存在一个二层接口让该 vlan 处于运行状态(需要有 access/trunk 放行该 vlan)

//SVI思科命令
interface Vlan10                           //进入VLAN 10
no shutdown                                //开启接口
ip address 192.168.10.254 255.255.255.0    //一般情况下,是PC的网关地址

单臂路由

交换机连接路由器的接口需要设置为 trunk, 并且放行相对应的流量

思科:

//注意物理接口要先打开
interface Ethernet0/0.1
encapsulation dot1Q 10 //封装
ip address 192.168.10.254 255.255.255.0
interface Ethernet0/0.2
encapsulation dot1Q 20
ip address 192.168.20.254 255.255.255.0

🧸参考文献

什么是 VLAN?VLAN 是如何工作的? - 华为 (huawei.com)