冗余功能
例子
第2 层冗余功能通过添加设备和电缆来实现备用网络路径,从而提升网络可用性。当有多条网络路径可用于数据传输时,即使一条路径失效,也不会影响网络上设备的连通性。
例如上图,PC1与PC4进行通信
当trunk1断开时,可以走trunk2-trunk3
trunk1恢复后,又会重新走trunk1
故障
-
交换机故障
-
路线故障
存在问题
第2层环路 L2 Loops
当网络中的两台设备之间存在多条路径时,如果其间的交换机上禁用了 STP,则可能出现第 2 层环路。如果交换机上启用了 STP(这是默认设置),则不会发生第 2 层环路。
与通过路由器传递的 IP 数据包不同,以太网帧不含生存时间 (TTL)。因此,如果交换网络中的帧没有正确终止,它们就会在交换机之间无休止的传输,直到链路断开或环路解除为止。
-
PC1 向交换机 S2 发送广播帧。
-
S2 收到广播帧后更新自己的 MAC 地址表,记录下 PC1 可通过端口 F0/11 到达。
-
由于这是一个广播帧,因此 S2 将该帧从所有交换机端口转发出去,包括 Trunk1 和 Trunk2。
-
当广播帧到达交换机 S3 和 S1 后,这两台交换机更新自己的 MAC 地址表,记录 PC1 可通过 S1 的 F0/1 端口以及 S3 的 F0/2 端口到达。
-
由于这是一个广播帧,所以 S3 和 S1 将其从除接收该帧的端口之外的所有交换机端口转发出去。
-
S3 和 S1 相互向对方发送该帧。每台交换机都使用错误的端口更新了 MAC 地址表中有关 PC1 的记录。
-
然后每台交换机再次将广播帧从除接收该帧的端口之外的所有端口转发出去,结果造成这两台交换机都将该帧转发给 S2。
-
S2 收到来自 S3 和 S1 的广播帧后,将使用其中最后一条收到的条目更新自己的 MAC 地址表。
此过程不断重复,直到造成该环路的连接实际断开,或者环路中的一台交换机被关闭为止。
环路会导致参与环路的所有交换机上 CPU 负载过高。由于环路中所有交换机之间不断相互发送相同的帧,交换机的 CPU 不得不处理大量的数据。这会使交换机无法高效处理其收到的正常流量。
广播风暴
由于L2 Loops的影响,广播帧会收到影响
被卷入网络环路的主机无法被网络中的其它主机访问。由于 MAC 地址表不断使用广播帧的内容更新,交换机不知道究竟使用哪个端口才能将单播帧转发到最终目的地。结果造成单播帧也在网络中不断循环。随着在网络中循环的帧越来越多,便形成了广播风暴。
重复的单播帧
在下面这个例子中,PC4会收到两个重复的帧
冗余类型
- 到同一台交换机的两条连线造成的环路
-
与同一网络中另一台交换机连接造成的环路
-
两个互连集线器造成的环路
STP算法
针对上面例子,如果把Trunk2堵起来,只有Trunk1故障时才可以走,那么就可以避免环路。
但是怎么确定要阻塞哪些端口?这就需要STP算法
STP 使用生成树算法 (STA) 计算网络中的哪些交换机端口应配置为阻塞才能防止环路形成。
基本概念
根桥
每个生成树实例(交换 LAN 或广播域)都有一台交换机被指定为根桥。根桥是所有生成树计算的参考点,用以确定哪些冗余路径应被阻塞。作用是1在生成树中与指定网桥交换拓扑信息,以便在拓扑发生变化时通知网络中的其他网桥。
根桥通过选举来确定。
BPDU
BPDU 是运行 STP 的交换机之间交换的消息帧。
BID
每个 BPDU 都包含一个 BID,用于标识发送该 BPDU 的交换机。BID 内含有优先级值、发送方交换机的 MAC 地址以及可选的扩展系统 ID。BID 值的大小由这三个字段共同决定。
2字节优先级+6字节MAC地址,越低越好
根端口
最靠近根桥的交换机端口。在示例中,交换机 S2 的根端口是 F0/1,该端口位于交换机 S2 与 S1 之间的中继链路上。交换机 S3 的根端口是 F0/1,该端口位于交换机 S3 与 S1 之间的中继链路上。
指定端口
网络中获准转发流量的、除根端口之外的所有端口。在示例中,交换机 S1 上的端口 F0/1 和 F0/2 都是指定端口。交换机 S2 的 F0/2 端口也是指定端口。
非指定端口
为防止环路而被置于阻塞状态的所有端口。在示例中,STA 将交换机 S3 上的端口 F0/2 配置为非指定端口。交换机 S3 上的 F0/2 端口处于阻塞状态。
开销
端口开销由端口的运行速度决定。
show spanning-tree
命令可以检验端口开销
根桥选举
广播域中的每台交换机最初都会将自己视为生成树实例中的根桥,因此其送出的 BPDU 帧中将自己的 BID 作为根 ID。默认情况下,BPDU 帧是在交换机启动后每 2 秒发送一次,也就是说 BPDU 帧中 hello 计时器的默认值是 2 秒。每台交换机都维护着有关其 BID、根 ID 以及到根桥的路径开销的本地信息。
当邻接交换机收到 BPDU 帧时,它们会将 BPDU 帧内的根 ID 与本地根 ID 比较。如果 BPDU 中的根 ID 比本地根 ID 更小,交换机便更新本地根 ID 以及它送出的 BPDU 消息内的根 ID。这些消息的作用是告诉网络新的根桥。此外,路径开销也会更新,以指出到根桥的距离。例如,如果交换机的快速以太网端口收到 BPDU,其路径开销会被设置为 19。如果本地根 ID 小于 BPDU 帧内的根 ID,该 BPDU 帧将被丢弃。
交换机的根 ID 更新后,其送出的所有后续 BPDU 帧都会包含新的根 ID 以及更新后的路径开销。通过这种方式,所有其它邻接交换机就能始终看到最小的根 ID。随着 BPDU 帧在其它邻接交换机之间传递,路径开销也不断更新,以指示到根桥的总路径开销。生成树中的每台交换机使用其路径开销来指示到根桥的最佳可能路径。
例子:
步骤 1. 最初每台交换机都将自己作为根桥。交换机 S1 的优先级在所有三台交换机中最低。因为优先级是选择根桥的初始决定因素,所以 S1 成为根桥。如果所有交换机的优先级相同,MAC 地址便成为决定因素。
步骤 2. 当交换机 S3 从交换机 S2 收到 BPDU 时,S3 将自己的根 ID 与 BPDU 帧中的进行比较。两者的优先级相同,因此交换机不得不检查 MAC 地址部分,以确定哪个 MAC 地址的值较低。因为 S2 的 MAC 地址值更低,S3 用 S2 的根 ID 更新自己的根 ID。此时,S3 将 S2 视为根桥。
步骤 3. 当 S1 将自己的根 ID 与收到的 BPDU 帧进行比较时,它发现本地根 ID 的值更小,所以它将来自 S2 的 BPDU 丢弃。
步骤 4. 当 S3 送出自己的 BPDU 帧时,该帧内包含的根 ID 是 S2 的 ID。
步骤 5. 当 S2 收到该 BPDU 帧时,它检查发现 BPDU 所含的根 ID 与自己的本地根 ID 匹配,所以它丢弃该帧。
步骤 6. 由于 S1 自己的根 ID 包含更低的优先级,所以它丢弃从 S3 收到的 BPDU 帧。
步骤 7. S1 送出自己的 BPDU 帧。
步骤 8. S3 发现 BPDU 帧内的根 ID 值更小,因此它更新自己的根 ID,指出现在的根桥是 S1。
步骤 9. S2 发现 BPDU 帧内的根 ID 值更小,因此它更新自己的根 ID,指出现在的根桥是 S1。
端口角色
端口角色
生成树实例会选择根桥。根桥在网络拓扑中的位置决定了如何计算端口角色。本主题探讨交换机端口是如何配置为特定角色以防止网络中产生环路的。
在生成树过程中,交换机端口会被自动配置为四种不同的端口角色。
根端口
根端口存在于非根桥上,该端口具有到根桥的最佳路径。根端口向根桥转发流量。根端口可以使用所接收帧的源 MAC 地址填充 MAC 表。一个网桥只能有一个根端口。
在示例中,交换机 S1 是根桥,交换机 S2 和 S3 在连接到 S1 的中继链路上都定义有根端口。
指定端口
指定端口存在于根桥和非根桥上。根桥上的所有交换机端口都是指定端口。而对于非根桥,指定端口是指根据需要接收帧或向根桥转发帧的交换机端口。一个网段只能有一个指定端口。如果同一网段上有多台交换机,则会通过选举过程来确定指定交换机,对应的交换机端口即开始为该网段转发帧。指定端口可以填充 MAC 表。
在示例中,交换机 S1 在两条中继链路上的端口都是指定端口。交换机 S2 在连接到交换机 S3 的中继链路上的端口也是指定端口。
非指定端口
非指定端口是被阻塞的交换机端口,此类端口不会转发数据帧,也不会使用源地址填充 MAC 地址表。非指定端口不是根端口或指定端口。在某些 STP 的变体中,非指定端口称为替换端口。
在示例中,交换机 S3 具有此拓扑中的唯一一个非指定端口。非指定端口用于防止环路形成。
禁用端口
禁用端口是处于管理性关闭状态的交换机端口。禁用端口不参与生成树过程。本例中没有禁用端口。
端口状态
1若不是到根桥的最短开销路径,则回到阻塞状态
BPDU计时器
STP收敛过程
- 步骤 1. 选举根桥
- 步骤 2. 选举根端口
- 步骤 3. 选举指定端口和非指定端口