网络技术:VLAN 虚拟局域网
虚拟局域网#
交换型网络#
在最早的集线器搭建的网络中,所有的设备都在同一个冲突域和广播域中,这会滋生很多问题。后来引入了交换机之后就可以搭建交换型网络,交换机收到数据包以后,会查找内存中的地址对照表以确定目的 MAC 需要从哪个端口转发。交换机可以划分冲突域(每个与交换机端口相连的设备都是一个独立的冲突域),但是还是无法划分广播域,也就是说广播数据还是会发送到整个局域网中。
因此如果在该网络中的用户和设备越来越多,每台交换机需要处理的广播和分组也就越多,就容易出现诸如广播风暴的问题。同时交换型网络还会有安全问题,因为在没有设置诸如密码等安全措施的情况下,网络中的每个用户都能看到所有的设备。
VLAN#
VLAN 是一个网络用户和网络资源的逻辑编组,它们和管理者定义的交换机端口相连。通过创建 VLAN 可以指定交换机端口为不同的子网服务,从而在第 2 层交换型网络中创建更小的广播域。——《CCNA 学习指南(第 7 版)》
这么讲文绉绉的,我基于个人理解做个类比。假设计算机学院今年招生 400 人,我们可以直接把这 400 人作为一个班级进行培养。这种做法的弊端是显而易见的,如果学院要通知事情必须统一通知这 400 位同学,材料也得统一进行整理,不同专业的每位同学有事情都需要直接找整个年级的负责人。换句话来说,400 位同学放在一个班级中超级不好管理,无论是时间开销还是事务的复杂性都是很大的。这种情况就类似于集线器搭建的网络,只有一个广播域和一个冲突域。
比较好的方式就是分班,把这 400 位同学按照专业和人数分为多个班级,这样每个班级就可以由自己的班主任和班委负责管理,不需要什么事情都找年级负责人了。这种情况就和 VLAN 的作用很像了,通过把一些设备划分到同一个虚拟的局域网中,就可以减小广播域的规模,同时增加了广播域的数量。也就是说虽然局域网中的设备在物理上是在同一个局域网中,但在逻辑上这个的局域网被划分为了多个 VLAN。
按照这种类比,为什么交换型网络不能类比为分班呢?因为交换型网络只能划分冲突域,不能划分广播域。类比为分班就相当于虽然每位同学有事情可以找自己的班级负责人,但是要通知事情还是需要由年级统一通知 400 位同学,而不是以班级为单位进行通知。
VLAN 的功能#
VLAN 能够将 LAN 中的设备分组,VLAN 中的一组设备通信时就如同连接到同一条电缆,但是 VALN 是一种逻辑上的连接而不是物理连接。VLAN 管理员根据功能、项目组或应用程序等因素划分网络,而不会受到物理空间的限制,也就是说只需要让设备加入某个 VLAN,就可以在这个逻辑上的局域网内和同样属于该局域网内的设备通信。虽然 VLAN 中的设备和其他 VLAN 设备可能会共享某些共用的基础设施,但是呈现出来的效果是这些设备将运行在独立的网络上,互不干扰。
VLAN 创建逻辑广播域,可以跨越多个物理 LAN 网段,因此 VLAN 可以将大的广播域细分成小的广播域,这样就能提高网络的性能。这意味着一个 VLAN 中的某个设备发送广播,该广播不会扩散到其他 VLAN,只会在该设备所在的 VLAN 里传播。同时,VLAN 可以根据特定的用户分组实施访问和安全策略。
VLAN 的优点#
控制广播#
属于同一个广播的所有设备属于一个广播域,这些广播不会通过连接到其他 VLAN 的交换机端口转发。VLAN 中主机发送的单播、组播和广播流量,数据传输都仅限于该 VLAN 的设备。
安全性#
在传统的使用集线器的网络中,任何人都可以访问所属的局域网中的资源,而且任何人都可以监视网络传输的数据。VLAN 的创建可以对局域网内的设备和端口进行严格的控制,而且也可以限制外界对 VLAN 之内的资源访问。
灵活性#
VLAN 内的广播无法转发到连接其他 VLAN 的端口,可以防止广播风暴的发生。VLAN 可以划分为多个更小的 VLAN,从而进一步限制广播域的大小。
可扩展性#
对于新加入 VLAN 的设备,只需要把用户连接的交换机接口加入对应的 VLAN 即可,不需要在物理设备上接入。
VLAN 中继#
接入端口#
当交换机的端口被设置为接入端口时,该端口只属于一个 VLAN,只能为该 VLAN 传输数据流。如果这种端口不会对数据标记 VLAN,这就意味着接入端口会丢弃标记过的分组。交换机把帧发给和接入链路相连接的设备前,会先把 VLAN 的标志信息删除,这也意味着接入链路不能和 VLAN 外部的设备通信。
使用接入接口时,同一个 VLAN 的设备要在交换机间传播帧,都需要另外接线。
中继端口#
中继端口(VLAN TRUNK)可以允许交换机之间传播所有 VLAN 的流量,它是一条 100 或 1000 Mbit/s 的点到点链路。中继链路可以让属于同一个 VLAN,但是属于不同交换机的设备可以通信。VLAN TRUNK 不属于具体的 VLAN,而是作为多个 VLAN 中路由器和交换机之间的通道。接入端口收到数据之后,会认为该数据是属于该接口所属的 VLAN 的数据。
如果没有 VLAN TRUNK,VLAN 就显得不是很有用。只要配置了 VLAN TRUNK 接口,交换机之间 VLAN 互联就不需要另外接线了。
标识 VLAN#
VLAN ID#
当配置了 VLAN TRUNK 时,由于 TRUNK 需要把帧传输到另一个交换机的相同 VLAN 的接口上,因此表示帧属于哪个 VLAN 是很重要的。标识帧的方式是在 TRUNK 转发帧时,在帧中添加 VLAN ID 字段,该字段称之为 VLAN 徽记。
VLAN ID 在转发帧时的工作流程为:进入交换结构后交换机提取 VLAN ID 字段,然后查看过滤表**,若存在到达目的交换机的另一条 VLAN TRUNK,就从该 VLAN TRUNK 转发出去。帧到达连接到同一 VLAN 的目的设备的接入端口时,VLAN ID 会被删除从而让接入接口能正常接收帧。
如果 VLAN ID 与出站端口的 VLAN 相同,则发送时可以不标记,对于其他情况下都必须标记。
IEEE 802.1Q#
802.1Q 是 IEEE 指定的帧标记的标准,802.1Q 在帧中插入一个字段来标记 VLAN。启用该协议需要先配置 VLAN TRUNK,然后指定它使用 802.1Q 封装数据。
VLAN 的类型#
默认 VLAN#
交换机加载默认配置进行初始化时,所有交换机端口都默认属于默认 VLAN,思科交换机的默认 VLAN 是 VLAN 1。VLAN 1 具有所有 VLAN 的功能,它不能被删除和重命名。
本征 VLAN#
未标记的 VLAN 流量都从本征 VLAN 转发,本征 VLAN 默认为 VLAN 1,最好把本征 VLAN 配置为未使用的 VLAN。
数据 VLAN#
数据 VLAN 用于传输用户生成的流量,将网络分为用户组或设备组。
管理 VLAN#
管理 VLAN 是配置用于访问交换机功能 VLAN,默认情况下是 VLAN 1,最好不要使用 VLAN 1 作为管理 VLAN。可以对管理 VLAN 的交换机虚拟接口分配 IP 地址和掩码,使用例如 Telnet 或 SSH 等进行管理。
VLAN 间路由#
由于 VLAN 在逻辑上也是局域网,因此如果没有路由器进行转发,不同 VLAN 上的设备就无法通信。使用路由器将网络流量从一个 VLAN 转发到另一个 VLAN 的过程称之为 VLAN 间路由。
- 由于第二层交换机的功能有限,所以适合进行 VLAN 间通信。
传统 VLAN 间路由#
传统 VLAN 间路由使用多个物理接口实现,各个接口必须连接到一个独立的网络,并且配置不同的子网。连接至路由器的交换机端口处于接入模式,并且把路由器的每个物理接口都分配给不同的 VLAN。
传统 VLAN 间路由的方法很浪费接口,且效率低下,现在已经不再使用。
单臂路由#
单臂路由是通过单个物理接口在网络中的多个 VLAN 之间路由流量的方式,路由器和交换机只需要一个物理接口就可以在多个 VLAN 之间传输数据。将路由器接口配置为中继接口,通过接收中继接口上来自相邻交换机的 VLAN 标记流量和子接口进行内部路由。子接口是虚拟接口,和单个物理接口相关联。
配置 VLAN 和单臂路由#
实验拓扑#
思科 5.1.3.7 Lab 配置 802.1Q 基于 TRUNK 的 VLAN 间路由的实验拓扑如下。
地址分配表:
设备 | 接口 | IP 地址 | 子网掩码 | 默认网关 |
---|---|---|---|---|
R1 | G0/1.1 | 192.168.1.1 | 255.255.255.0 | N/A |
G0/1.10 | 192.168.10.1 | 255.255.255.0 | N/A | |
G0/1.20 | 192.168.20.1 | 255.255.255.0 | N/A | |
Lo0 | 209.165.200.225 | 255.255.255.224 | N/A | |
S1 | VLAN 1 | 192.168.1.11 | 255.255.255.0 | 192.168.1.1 |
S2 | VLAN 1 | 192.168.1.12 | 255.255.255.0 | 192.168.1.1 |
PC-A | NIC | 192.168.10.3 | 255.255.255.0 | 192.168.10.1 |
PC-B | NIC | 192.168.20.3 | 255.255.255.0 | 192.168.20.1 |
交换机端口分配规格:
交换机 | 端口 | 模式 | 网络 |
---|---|---|---|
S1 | F0/1 | 802.1Q TRUNK | N/A |
S2 | F0/1 | 802.1Q TRUNK | N/A |
S1 | F0/5 | 802.1Q TRUNK | N/A |
S1 | F0/6 | VLAN 10 – 学生 | 192.168.10.0/24 |
S2 | F0/18 | VLAN 20 – 教师 | 192.168.20.0/24 |
配置 S1#
创建 VLAN#
创建 VLAN 的命令如下,可以使用逗号分隔一系列 VLAN ID 建立多个 VLAN,也可以用 “-” 分隔 2 个 VLAN ID 创建一个范围内的 VLAN。
Switch(config)# vlan vlan_id
Switch(config)# vlan vlan_id_1,vlan_id_2
Switch(config)# vlan vlan_id_1-vlan_id_2
进入 VLAN 配置模式后,可以使用 name 为 VLAN 命名。
Switch(config-vlan)# name vlan_name
此时在 S1 上配置交换机端口分配规格表中列出的 VLAN 及其名称。
S1(config)# vlan 10
S1(config-vlan)# name Students
S1(config-vlan)# vlan 20
S1(config-vlan)# name Faculty
S1(config-vlan)# exit
为 VLAN 配置接口#
在接口配置模式下,可以使用该命令将接口配置为 trunk 端口。
Switch(config-if)# switchport mode trunk
此时将连接到 R1 的接口配置为 TRUNK,将连接到 S2 的接口也配置为 TRUNK。
S1(config)# interface f0/1
S1(config-if)# switchport mode trunk
S1(config-if)# interface f0/5
S1(config-if)# switchport mode trunk
在接口配置模式下,可以使用该命令将接口配置为接入端口。
Switch(config-if)# switchport mode access
使用该命令可以将一个接口分配给一个 VLAN。
Switch(config-if)# switchport access vlan vlan_id
此时将 PC-A 的接入端口分配给 VLAN 10。
S1(config-if)# interface f0/6
S1(config-if)# switchport mode access
S1(config-if)# switchport access vlan 10
使用命令 show vlan brief 查看 VLAN 配置情况。
S1#show vlan brief
配置 S2#
在 S2 上,配置交换机端口分配规格表中列出的 VLAN 及其名称。
S2(config)# vlan 10
S2(config-vlan)# name Students
S2(config-vlan)# vlan 20
S2(config-vlan)# name Faculty
在 S2 上,将 PC-B 的接入端口分配给 VLAN 20。
S2(config-if)# interface f0/18
S2(config-if)# switchport mode access
S2(config-if)# switchport access vlan 20
在 S2 上,将连接到 S1 的接口配置为 TRUNK。
S2(config)# interface f0/1
S2(config-if)# switchport mode trunk
R1 配置基于 TRUNK 的单臂路由#
要配置单臂路由,首先需要为路由器连接到 VLAN 的接口配置子接口。使用如下命令可以创建,语法很简单,就是在物理接口后面加上一个点,再加上子接口的编号。
Router(config)# interface interface_id.subinterface_id
此时为 VLAN 1 配置子接口,在 R1 的 G0/1 上为 VLAN 1 创建子接口,使用 1 作为子接口 ID。
R1(config)# interface g0/1.1
子接口必须使用如下命令,以支持某个 VLAN 的 802.1Q 的 trunk 链路。
Router(config-subif)# encapsulation dot1Q vlan_id
此时配置子接口 g0/1.1,使其在 VLAN 1 上运行。
R1(config-subif)# encapsulation dot1Q 1
使用地址表中的 IP 地址配置子接口。
R1(config-subif)# ip address 192.168.1.1 255.255.255.0
为 VLAN 10 配置子接口
R1(config-subif)# interface g0/1.10
R1(config-subif)# encapsulation dot1Q 10
R1(config-subif)# ip address 192.168.10.1 255.255.255.0
为 VLAN 20 配置子接口。
R1(config-subif)# interface g0/1.20
R1(config-subif)# encapsulation dot1Q 20
R1(config-subif)# ip address 192.168.20.1 255.255.255.0
启用 G0/1 接口。
R1(config)# interface g0/1
R1(config-if)# no shutdown
参考资料#
《思科网络技术学院教程(第6版):路由和交换基础》,[加] Bob Vachon,[美] Allan Johnson 著,思科系统公司 译,人民邮电出版社
《CCNA 学习指南(第 7 版)》,[美] Todd Lammle 著,袁国忠 徐宏 译,人民邮电出版社
《计算机网络(第七版)》 谢希仁 著,电子工业出版社
园区网内部划分网络
百度百科:交换机
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)