zoukankan      html  css  js  c++  java
  • 数据链路层

    冗余链路出现的背景

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

    假设 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 状态,开始转发数据。

    查看 STP 信息

    如果是思科的交换机话,默认会选择 PVST+ 作为默认的 STP 协议。

    其中优先级是将 VLAN 号和优先级组成(4bit vlan 号,16 bit 优先级)。

    # 查看 sw1
    sw1#show spanning-tree
    VLAN0001
      Spanning tree enabled protocol ieee
      # 表示根信息
      Root ID    Priority    32769                # vlan is 1, so priority equal 32768 add 1
                 Address     aabb.cc00.1000       # mac 
                 This bridge is the root          # to represent root
                 Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
                 
     # 表示自己的信息
      Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
                 Address     aabb.cc00.1000
                 Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
                 Aging Time  300 sec
    
    Interface           Role Sts Cost      Prio.Nbr Type
    ------------------- ---- --- --------- -------- --------------------------------
    Et0/0               Desg(指定端口,DP) FWD 100       128.1    P2p
    Et0/1               Desg(指定端口,DP) FWD 100       128.2    P2p
    Et0/2               Desg FWD 100       128.3    P2p
    Et0/3               Desg FWD 100       128.4    P2p
    
    # 查看 sw2
    sw2#show spanning-tree
    
    VLAN0001
      Spanning tree enabled protocol ieee
      Root ID    Priority    32769
                 Address     aabb.cc00.1000
                 Cost        100
                 Port        1 (Ethernet0/0)
                 Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
    
      Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
                 Address     aabb.cc00.2000
                 Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
                 Aging Time  300 sec
    
    Interface           Role Sts Cost      Prio.Nbr Type
    ------------------- ---- --- --------- -------- --------------------------------
    Et0/0               Root FWD 100       128.1    P2p
    Et0/1               Desg FWD 100       128.2    P2p
    Et0/2               Desg FWD 100       128.3    P2p
    Et0/3               Desg FWD 100       128.4    P2p
    
    
    # 查看 sw3
    sw3#show spanning-tree
    
    VLAN0001
      Spanning tree enabled protocol ieee
      Root ID    Priority    32769
                 Address     aabb.cc00.1000
                 Cost        100
                 Port        2 (Ethernet0/1)
                 Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
    
      Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
                 Address     aabb.cc00.3000
                 Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
                 Aging Time  300 sec
    
    Interface           Role Sts Cost      Prio.Nbr Type
    ------------------- ---- --- --------- -------- --------------------------------
    Et0/0               Altn(阻塞端口) BLK 100       128.1    P2p
    Et0/1               Root FWD 100       128.2    P2p
    Et0/2               Desg FWD 100       128.3    P2p
    Et0/3               Desg FWD 100       128.4    P2p
    
    # 调整根-让 SW2 成为根-调整优先级
    sw2(config)#spanning-tree vlan 1 root primary
    
    # 调整次根-让 sw3 成为次根
    sw3(config)#spanning-tree vlan 1 root secondary
    

    总结

    当对网络的可靠性有要求时,一帮会采用连接多台交换机,用于冗余备份,但由于出现环路的风险,需要通过 STP 技术在逻辑上将某些接口阻塞掉,防止形成环路。

  • 相关阅读:
    HL7及PIX相关的测试工具
    HDU4570----Multi-bit Trie----简单的DP
    hdu2248
    poj 3693 Maximum repetition substring (后缀数组)
    高性能通道
    volyaire重振Infiniband
    利用iWARP/RDMA解决以太网高延迟
    linux 单网卡来绑定多IP实现多网段访问以及多网卡绑定单IP实现负载均衡
    C细节学习
    每2秒获取系统的赋值及内存使用率
  • 原文地址:https://www.cnblogs.com/michael9/p/13419456.html
Copyright © 2011-2022 走看看