数据链路层 - 构建冗余链路

冗余链路出现的背景

由于公司对网络的可靠性的要求,大部分公司都会增加额外的交换机,防止在某台交换机出现故障时造成网络的无法使用的情况,例如形成如下图的拓扑的结构。

假设 W 和 X 交换中的一台出现故障后,流量依然可以通过 Y 和 Z 到达 B。

虽然说这样的结构可以很好的解决,网络可靠性的问题。但由于这三台交换机构成了一个环路,同时也带了一些额外的问题:

广播风暴:

这里假设 W 不知道 B 的 MAC 地址,会采用泛洪的操作。而此时由于环状的结构,广播数据包会在四台交换机之间来回的传输,占用大量的带宽。

多帧拷贝:

假设 W 不知道 B 的 MAC 地址,此时会泛洪发给 Y 和 X,假设 Y 和 X 知道 B 的 MAC 地址,此时会将数据包以单播的形式发给 Z,而 Z 会将两个单播数据包传给 B. 造成传输冗余的数据帧。

MAC 表不稳定:

同样假设 W 不知道 B 的 MAC,采用泛洪。同时 X,Y,Z 也不知道 B 的 MAC。此时 W 广播后,X 和 Y 会在 MAC 表中记录 A 对应 MAC 在 1 号口,然后继续泛洪给 Z. Z 按照时间顺序假设在 MAC 表中记录的是来自 Y 的数据帧,此时记录的是 2 号口。而由于 Z 也不知道 B 的 MAC,还会广播。此时 Y 和 X 也会收到,此时 MAC 表按照时间顺序,又会改为另一个 2 号口,进而在 1 和 2 口之间来回抖动。

解决环路带来的问题

冷备份

在连接线缆时,仅仅连接一条线路。当这条链路出现问题时,由管理员手动切换至另一根线路。

热备份

线缆正常连接,在接口上进行配置,不允许该接口接受和发送任何设备。通过 STP (生成树)实现。

STP

STP 协议会先进行计算选择一个树根,然后将树根上的一个接口进行阻塞,进而无法构成环路。

STP 选举规则 - 802.1D

在所有设备启动时,所有交换机都认为自己是跟,然后广播发送 BPDU,然后在 BPDU 中的某些参数选择一个真正的树根。

  1. 在整个拓扑上,选择一台根交换机。
  2. 对每台非根交换机上,选择一个根端口(RP)。
  3. 在每条网线上(每个网络),选一个指定端口(DP)。
  4. 余下端口为 BP,被阻塞的端口。

BPDU 比较参数,按照如下的顺序进行比较:

  1. 根桥 ID(优先级,根的 MC 地址)
  2. COST(发送者桥 ID 到根桥的距离)
  3. 发送者桥 ID(优先级,桥 MAC 地址)
  4. 发送者端口 ID(接口号)

例子 1

以下拓扑为例,模拟下选择 BPDU 的过程,假设 MAC 地址大小为:SW1 < SW2 < SW2.

首先判断根桥 ID,如果没有配置过,默认都是一样的。接着会比较 MAC 地址,选出最小的 MAC 作为根桥, 也就是 SW1.

在选出根后,根会每 2s 发送一次 BPDU,然后非根交换机转发 BPDU。

比较 COST,SW1 作为根会向 SW2 和 SW3 转发 BPDU,而 SW2 和 SW3 同时也会转发收到的 BPDU 给对方。这里假设都是百兆链路。

这里以 SW2 为视角,会收到 SW1 发送的 BPDU 和 SW3 转发 SW3 的 BPDU. 对于 SW2 的 1 号接口来说 COST 为 0(发送者为 SW1,跟桥 ID 为 SW1),对于 2 号口来说,COST 为 19(发送者 SW3,根桥 ID 为 SW1).

100 M -> COST = 19

10 M -> COST = 100

进而 0 小于 19,1 号口为成为 RP.

同理,在 SW3 的视角,收到 SW1 和 SW2 转发 SW1 的BPDU. 选择 2 号口为 RP.

下面接着选择 DP:

先站在 SW1 和 SW2 这条网段的视角,在该网段可以接收道 SW1 直接发送的 BPDU (记为 SW1 1 号口)和 经过 SW2 和 SW3 转发过来的 BPDU(记为 SW2 1号口). 这里比较下两者的 BPDU.

  1. 首先比较根桥 ID,都是 SW1,一样,继续比较。
  2. 比较 COST,
    • SW1 1 号口,根桥 ID 和 发送者 ID 都是 SW1,所以 COST 为 0
    • SW2 1 号口,根桥 ID 为 SW1,发送者为 SW3, 经过 SW2. 所以 COST=19 +19=38
    • 0 < 19 , SW1 1 号口为成为 DP.

站在 SW1 和 SW3 这段网络上,同理:

  1. 首先比较根桥 ID,都是 SW1,一样,继续比较。
  2. 比较 COST:
    • SW1 2 号口,根桥 ID 和 发送者 ID 都是 SW1,所以 COST 为 0
    • SW3 2 号口,根桥 ID 为 SW1,发送者为 SW2, 经过 SW3. 所以 COST=19 +19=38
    • 0 < 19, SW3 2 号口为 DP.

最后站在 SW2 和 SW3 这条网段上:

  1. 首先比较根桥 ID,都是 SW1,一样,继续比较。
  2. 比较 COST:
    • SW2 2 号口,发送者为 SW2 2 号口,根桥 ID 为 SW1 COST = 19
    • SW3 1 号口,发送者为 SW3 1 号口,根桥 ID 为 SW1 COST = 19
    • 相等继续比较。
  3. 比较发送者桥 ID 大小:
    • SW2 的 MAC 小于 SW3 的 MAC
    • 所以选 SW2 的 2 号口为 DP.

最终,余下接口 SW3 的 1 号口为阻塞接口。

总结一下概念:

RP:到根交换机最近的非根交换机接口

DP:在交换机中的连线上,到达根交换机最近的接口

例子2

首先假设 SW1 MAC 小于 SW2,所以跟为 SW1.

选择 RP:

以 SW2 的视角,比较过程如下:

  1. 根桥 ID 都是 SW1,一样,继续比较.
  2. 比较 COST,对于 3 和 4 两个口来说,发送者和根桥ID都一样,相等。
  3. 比较发送者 ID,都是 SW2 本身 一样。
  4. 比较发送者接口 ID,1 < 2. 所以 3 为 RP。

选择 DP:

以 1,3 连线的视角:

  1. 根桥 ID 一致。
  2. 比较 COST, 选择 1 号口。COST=0, 另一个为 19. s所以 1 为 RP.

以 2,4 连线的视角:

  1. 根桥 ID 一致。
  2. 比较 COST, 同理选择 2 号口,为 RP.

最后 4 号口为 BLOCK。

这里假设 1,3 口为 10M,2,4 为百兆链路。可以发现如果按照上述的规则,4 号口还是一样会被阻塞。但这不符合常理,因为 2,4 口的带宽明显更大。

所以这里的 COST 比较还需要调整,对于选择 DP 不需要改变。

但对于选择 RP 的过程,COST 的值需要加上入接口的 COST

也就是说,在 1,3 连线时。COST 的比较值为:1 号口的 COST 为 0 + 100. 2 号口的 COST 为 0 +19. 所以选择为 4 号口。

STP 类型

上面选举的过程是比较基础的 STP 版本,802.1D. 对应在处理 VLAN 有一定的缺点,就是由于在拓扑中只有一颗树,在设置了 VLAN 的交换机上通信,有时 VLAN 通信的过程并不是选择的最优路径。

后来,又开发了出许多新的版本:

  • PVST+: 针对 VLAN,每个 VLAN 一个 STP.
  • 802.1s(MSTP):多实例生成树,优化生成树的数量。
  • 802.1w(RSTP):STP 计算速度更快,收敛速度很快
  • Rapid PVST+:优化了 PVST+ 的生成树速度

STP 状态

在交换机接口打开时,进入到 Listening 状态,进行 STP 的计算。在选举时,无法转发数据。

当 Listening 状态结束后,进入 Learning 状态,学习 MAC 地址,建立 MAC 地址表。

之后进入 Forwarding 状态,正常转发数据。

如果是被 STP 阻塞的端口进入 Blocking 状态,不能转发数据,但可以接受 BPDU. 当在 20s 内没有收到 BPDU 时,会进入 Forwarding 状态,开始转发数据。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章