在上一节中学到了交换式网络及其冗余算法STP,这一节专注于虚拟局域网——用于分隔不同终端设备权限与广播域划分。
我们知道在一个网络中,我们会根据物理位置对用户进行分组,不同用户组会在不同的子网中,这就需要每个用户组的位置相对固定,不够灵活。
而虚拟局域网(Virtual LAN, VLAN)是基于逻辑关联而不是物理位置来分隔用户,从而允许管理员以逻辑方式组织局域网。例如:
在交换式网络中,交换机的所有端口都处于同一广播域内,属于同一个IP子网。而VLAN允许多个IP子网存在于一台交换机中或跨多台交换机。这使得不同的终端设备在同一个交换机上逻辑上分隔。例如根据VLAN划分的交换机端口,将一个交换机分成了三个部分,它们可以是不同的子网。
初始情况下,交换机的所有端口均属于VLAN1。
逻辑上分隔的不同端口,即端口处于不同的VLAN,它们处于不同的广播域,广播无法穿越VLAN。
VLAN是在L2层上,基于交换机的端口、MAC地址等信息对网络进行划分不同的小广播域。它与第三层路由器分隔的广播域有所不同,如图:
拥有VLAN功能的交换机的交换表中会记录每个终端设备所处的VLAN,而终端设备不会知道它处于哪个VLAN中。如下表是一个带有VLAN功能的Switching Table:
L2 address (MAC) | Port | VLAN |
---|---|---|
MAC 1 | 1 | 1 |
MAC 2 | 3 | 22 |
MAC 3 | 4 | 11 |
在拥有VLAN功能的交换机中,交换机的端口称为交换端口(switched ports),它有两种基本类型:
我们知道,交换机的不同端口可以属于不同VLAN。Access Port连接着终端设备,它们可以属于不同VLAN,而Trunk Port连接着不同的交换机,它属于所有VLAN,意味着可以通过它与不同VLAN进行交流。如下图的例子:
它的交换表可以是这样:
L2 address (MAC) | Port | VLAN |
---|---|---|
MAC 1 | 1 | 1 |
MAC 2 | 2 | 11 |
MAC 3 | 3 | 22 |
MAC 4 (Other Switch) | 4 | 1, 11, 22 (ALL) |
初始情况下,Truck Port只会知道本路由器中的所有VLAN,如1, 11, 22。但是当未被Truck Port记录的未知VLAN,交换机会默认拒绝请求。不利于多VLAN之间交流。
所以,为了防止出现数据无法通过Trunk Port的问题,在建立VLAN时Trunk口会自动学习与其相连的其他交换机的VLAN信息。最后所有的交换机都会学习到整个网络所有的VLAN。
L2 address (MAC) | Port | VLAN |
---|---|---|
MAC 4 (Other Switch) | 4 | 1, 11, 22, 33, 44 (ALL) |
假设还有VLAN 33,44,在之后的学习中会自动学习到并添加进入Trunk Port允许的VLAN表中,故我们认为Trunk Port属于所有VLAN。
但是还会出现一些问题,例如下图的布局,三个交换机分别连接着不同VLAN的终端设备:
初始情况下每个交换机的Trunk Port都只有自己交换机的VLAN:
Switch | Port | VLAN |
---|---|---|
S1 | P2 | 11, 22, 33 |
P3 | ||
S2 | P4 | 11, 44, 55 |
S3 | P1 | 33, 44 |
经过一段时间的学习后,所有的Trunk Ports (P1~P4)均属于VLAN 11, 22, 33, 44, 55.
此时如果我想从S1的VLAN 11的终端发送信息到S2的VLAN 11的终端,数据帧经过封装后到达S1,此时S1发现两个端口均属于VLAN11,此时会进行广播,故P2和P3均会收到这个信息。但是从P2传输的数据帧到了S3后发现S3并没有VLAN 11的终端,造成了不必要的VLAN数据流量。
为了防止不必要的广播,可以使用剪枝(pruning)技术。在知道链路拓扑时,需要经过当前链路传输的VLAN才记录在Trunk口中。应用剪枝技术,我们一般一个个Trunk口和VLAN进行分析。
故剪枝后的端口和VLAN表:
Switch | Port | VLAN |
---|---|---|
S1 | P2 | 33, 44 |
P3 | 11, 44 | |
S2 | P4 | 11, 44 |
S3 | P1 | 33, 44 |
我们知道Trunk口连接了不同的交换机或其他设备,Trunking(中继)是通过多路复用技术,允许一个物理链路传输多个逻辑信息。而Access口则是单独连接到终端设备上的。
所有终端都通过少数的Trunk口发送数据帧,那么如何确定你发送的帧属于哪个VLAN呢?故引入了一个标记机制,即给帧的头部加上VLAN Tag用于区分不同的VLAN,它记录着VLAN的ID和其他元信息。如图:
但是一般来说,终端设备用户并不知道自己所属的VLAN,故VLAN Tag是在交换机阶段才给帧加上的。我们通过VLAN内通信和VLAN间通信两个例子来了解VLAN Tag在传输过程中的变化。
VLAN通信有两种类型:
在通信过程中:
VLAN内通信因为只涉及交换机之间的同一VLAN通信,故相对简单。
如图:
VLAN间通信就稍微复杂,因为不同的VLAN属于不同的广播域,故需要使用三层设备来转发。故我们有两种方式实现VLAN间通信:
在使用路由器的VLAN间通信中,
如图是从PC1 (VLAN 11)发送到PC4 (VLAN 22):
其中,路由器会解封装数据帧,直到第三层,它会将目的主机的IP地址与自己的路由表进行对比,确定转发的路径。它的路由表中也记录有各个子网的VLAN信息。
在使用三层交换机的VLAN间通信中,
这个过程经过了三层交换机的不同SVI接口,而不是路由器。SVI负责管理不同的VLAN,一个SVI可以包含多个物理接口。
如图是从PC1 (VLAN 11)发送到PC4 (VLAN 22):
我们知道,一个优秀的网络会有冗余的备份网络方案。在这一部分将介绍在虚拟局域网中的冗余设计。
链路冗余/聚合(Link redundancy, Link aggregation)允许创建由两条或更多条物理链路组成的逻辑链路,这些物理链路可以通过共同充当一个连接的多条链路连接两台设备。
这不仅提高了链路的吞吐量,还能在一条物理链路出现故障时提供冗余,甚至通过两个交换机之间的冗余路径实现负载平衡。
以太通道(EtherChannel)是Cisco研发的应用于交换机之间的多链路捆绑技术。它将两个设备间多条物理链路捆绑在一起组成一条逻辑链路,从而达到带宽倍增的目的,即逻辑链路带宽为物理链路带宽之和。
一个EtherChannel中所有链路的速率必须一致,在两端交换机的所有端口要求必须VLAN一致, 端口类型一致,端口信息一致。
EtherChannel可以通过链路聚合控制协议(Link Aggregation Control Protocol, LACP)或端口聚合协议(Port Aggregation Protocol, PAgP)来配置。
网关冗余(Gateway redundancy)旨在避免可能的单点网络故障,即单网关故障导致的网络问题。我们知道一台终端设备只会设置一个地址作为网关,称为默认网关。如果默认网关故障,所有连接着这个默认网关的设备都将无法连接网络。
在使用了三层交换机的多层网络中,我们把直接连接设备的普通交换机称为Access Switch,而交换机之上连接的三层交换机称为Distribute Switch。为了增加冗余,我们往往会存在多个Distribute Switch。而它们都有一个可用作计算机默认网关的 IP 地址,应该在计算机上配置哪个网关?
这个时候会配置一个虚拟网关(Virtual gateway),它是一个虚拟地址,会根据Distribute Switch的状态来动态选择网关。如图:
网关的状态分为活动网关(Active gateway)和备用网关(Standby gateway),活动网关用于路由数据包,而备用网关在活动网关发生故障时接管工作。如图是一个使用了网关冗余的拓扑图:
结合这两章的知识,我们知道要部署一个可靠的网络需要配置网络冗余。至此我们学习到的网络冗余技术有:
在下面例子中,该如何运用这些技术部署一个可靠的网络呢。如图是一个网络拓扑图,其中Room 1和Room 2都存在一台学生设备和教师设备,此外还有Server Room中有两台服务器。
根据基本的网络配置,我们可能会为每一间房都配置一个交换机。
但是这样压力全都会给到各个交换机上,根据我们的冗余策略,可以有如下操作:
如图,这里没有配置STP,只是做一个拓扑演示,所以有个别链路会出现问题:
本章学习了虚拟局域网划分广播域的原理和概念,以及如何配置冗余网络的一些方法。