接着上个学期的计网 I,这学期的计网 II更加注重于进阶网络知识。
局域网技术被设计用于小范围的网络通讯中,其中最具代表的技术就是以太网技术(IEEE 802.3)和WiFi技术(IEEE 802.11)。
我们可以按照局域网的信息交换方法分为:共享介质局域网和交换式局域网。
在交换式网络中,除了常见的二层交换机,还有三层交换机。第三层交换机是在第二层交换机的基础上为每个端口提供了IP地址,这样就可以根据IP地址信息在整个网络中引导流量。
IP地址信息被配置在虚拟端口(switched virtual interface)上,这些逻辑端口可以用于路由与端口管理。
我们知道,在一个可靠的网络中,一定存在有备份。冗余交换局域网的目标是消除由单点故障引起的网络中断。例如:
然而,当网络上的两个设备之间存在多条路径时,可能会发生第2层环路,这是因为交换机在获知设备的MAC地址之前会泛洪未知目的地的帧,它们将继续无休止地从交换机跳到交换机产生广播风暴。
为了解决这个问题,我们可以创建无循环的逻辑拓扑——树结构。使用的就是生成树协议(spanning-tree protocol ,STP)。
之前在华为教程中已经介绍过STP了,这里就简单的复习一下。
生成树协议 STP 是一个用于局域网中,将网络变成一个无环树,以消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并对某些接口进行阻塞以消除环路。
STP 在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时 STP 能够感知并且进行自动响应 从而使得网络状态适应新的拓扑结构,保证网络可靠性。
STP的工作原理简单来说如图所示:
桥ID(Bridge ID, BID)是由 16 bits(2 bytes)的桥优先级 Bridge Priority 与 48 bits(6 bytes)的桥 MAC 地址构成。每一个有着STP的交换机都有一个唯一的桥ID。
网络中,桥优先级是可以配置的,取值范围是 0~65535 ,默认值为 32768, 可以修改但是修改值必须为 4096 的倍数。
桥优先级越小,说明BID优先级越高。如果优先级相同,则会比较 MAC 地址, MAC地址越小则越优先。
STP 的主要作用之一是在整个交换网络中由根桥开始,计算出一棵无环的树 STP 树。
端口ID(Port ID)是一个16 bits的ID,高 4 bits 是接口优先级,低12 bits 是接口编号。优先级范围是0~240,取值为16的整数倍,默认为128。
在STP决策过程中,较低的端口ID优于较高的端口ID。
桥ID(BID)优先级最高的设备,会被选举为根桥(Root Bridge)。
而根端口(Root port)是非根桥设备与根桥设备之间进行信息交换的端口。一般我们会认为根端口是其他所有非根桥设备与根桥之间最近的非根桥设备端口。一个非根桥设备上,最多只能有一个根端口。根端口可以通过Cost计算得到,之后会在STP过程中详细说明。
例如:图中,三个交换机的桥优先级相同,但SW1的MAC地址较小,它是根桥。然后每个非根交换机选取一个离根最近的端口作为根端口,如图中R标识的端口。
指定端口(Designated port)是网络中的每个链路与根桥之间的最优唯一工作路径。即每条链路上都有一个端口为指定端口。
指定端口一般不是根端口,根设备的所有端口一般都是指定端口。
指定端口在每条链路上也是通过比较Cost来确定的,选择 Cost 最小的作为指定端口,如果 Cost 相同,则比较 BID 和 PID 。
每一个接口都维护着一个开销(Cost)值,接口的Cost主要用于计算根路径开销,也就是到达根桥的开销。
默认情况下端口的开销和端口的带宽有关,带宽越高,开销越小。因为存在不同的计算方法,需要根据实际情况分析。
根路径开销(RPC, Root Path Cost)是交换机某个接口到根桥的总开销的累计。一台设备从某个接口到达根桥的 RPC 等于从根桥到该设备沿途所有接口的 Cost 累加。如图,例如根桥为SW1,SW3的接口2(GE 0/0/1)的RPC为它自己的Cost(20000),加上沿途经过SW2的接口1产生的Cost(500),得到RPC = 20000+500.
我们了解了以上STP基本概念后,可以通过简单的计算大致了解网络中需要被STP阻塞的端口。我们将端口类型和其特点列出:设交换机数量为n,有m条链路将它们相连。
TP = 2m
RP = n -1
DP = m
于是我们很容易得到这样的表达式:被阻塞的端口NDP = 2m - (n-1) - m = m - n - 1
如图是一个例子:
很容易得到,有5个交换机,9条链路。故被阻塞的端口有 9x2 - (5-1) - 9 = 5
个。
根据我们之前学到的,STP过程分为4步:
下面通过一个新的例子来回顾这一过程。假设每条链路的带宽都是100Mbps,所有的交换机优先级均为default(32768)。
我们根据规则进行根桥选取。它们都优先级都相同,则选取MAC地址最小的为根桥。此时选取SW1为根。
接下来,我们选取每个非根桥设备上距离根最近的端口作为根端口。我们可以根据Cost进行计算,因为这里每条链路带宽一样,看链路数可以确定每个非根设备的根端口——即直连/最少段数的端口。图中用红色空心圈表示。
有两种情况选取指定端口:
当Cost相同时先比较BID,再比较PID。
如图中,红色实心端口为指定端口。首先是跟的所有端口均为指定端口,接下来比较其他所有的链路,看它距离根的链路数(因为带宽相同,实际情况还是要算Cost),可能还需要依次比较BID和PID。
将图中所有剩余的端口阻塞,图中用红色×表示。
我们知道STP用于找到最优路径以消除环路,广泛应用于冗余交换式网络中。当一条链路突然中断时,会进行STP重计算以维护网络结构。
STP定义了五种不同的端口状态:
Status | Description |
---|---|
Disable | 禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量。 |
Blocking | 阻塞状态。端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量。此状态是预备端口的最终状态。 |
Listening | 侦听状态。端口可以转发BPDU报文,但不能转发用户流量。 |
Learning | 学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。Learning状态是为了防止临时环路。 |
Forwarding | 转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。 |
当一条链路中断时,原链路端口会进入Blocking状态。经过一个设定的检测时间后,会进入Listening状态用于重新计算拓扑。此时会重新计算每个端口的STP用于确定指定端口。当重新计算并选举结束后会进入Forwarding状态,至此整个网络拓扑就收敛了。
当然,这样的STP只适用于传统的交换式网络中,而对于数据中心而言,它们每一个server上会有很多虚拟机(例如VPS等),此时的交换式网络中服务器之间因为有不同的虚拟主机而存在更多的连接,此时就需要用到软件定义网络(Software-defined Networking,SDN)技术。它支持动态可编程的网络配置,提高了网络性能和管理效率,使网络服务能够像云计算一样提供灵活的定制能力。
本章介绍了交换式局域网的结构及其冗余交换式网络环路解决算法——生成树协议STP。