虚拟局域网
交换型网络
在最早的集线器搭建的网络中,所有的设备都在同一个冲突域和广播域中,这会滋生很多问题。后来引入了交换机之后就可以搭建交换型网络,交换机收到数据包以后,会查找内存中的地址对照表以确定目的 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 |
S2 | F0/1 | 802.1Q TRUNK |
S1 | F0/5 | 802.1Q TRUNK |
S1 | F0/6 | VLAN 10 – 学生 |
S2 | F0/18 | VLAN 20 – 教师 |
配置 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 著,袁国忠 徐宏 译,人民邮电出版社
《计算机网络(第七版)》 谢希仁 著,电子工业出版社
园区网内部划分网络
百度百科:交换机