zoukankan      html  css  js  c++  java
  • 生成树协议Spanning Tree Protocol

    生成树协议(Spanning Tree Protocol,STP)是交换式以太网中的重要概念和技术,该协议的目的是在实现交换机之间的冗余连接的同时,避免网络环路的出现,实现网络的高可靠性。它通过在交换机之间传递桥接协议数据单元(Bridge Protocol Data Unit,BPDU)来互相告知诸如交换机的桥ID、链路性质、根桥(Root Bridge)ID等信息,以确定根桥,决定哪些端口处于转发状态,哪些端口处于阻断状态,以免引起网络环路.
    当交换机之间有多个VLAN时Trunk线路负载会过重,这时需要设置多个Trunk端口,但这样会形成网络环路。STP协议便可以解决这一问题.
    可以通过配置STP端口权值STP路径值来实现负载均衡. 如果使用STP端口权值来配置那么二条负载均衡的trunk必须联同一交换机上。使用路径值则即可以联相同的交换机与可以联不同的交换机。
    使用STP端口权值的负载均衡
    当同一台交换机的二个口形成环路时, STP端口权值用来决定那个口是enable的,那个口是阻断的.可以通过配置端口权值来决定二对trunk各走 那些VLAN, 有较高权值的端口(数字较小的)vlan, 将处于转发状态,同一个VLAN在另一个trunk有较低的权值(数字较大)则将处在阻断状 态。 即同一VLAN只在一个trunk上发送接受。

    配置STP权值(默认权值128)
    Switch#c onfig terminal
    Switch(config)#interface f0/1       //进入端口1配置模式
    Switch(config-if)#spanning-tree vlan port-priority 10       //将VLAN端口权值设为10
    Switch(config-if)#exit

    配置STP路径值(默认路径值19)
    Switch#c onfig terminal
    Switch(config)#interface f0/1       //进入端口1配置模式
    Switch(config-if)#spanning-tree vlan cost 30       //将VLAN生成树路径值设为30
    Switch(config-if)#exit 
    冗余带来网络环路
    产生的3大问题:
     1:Multiple Copies/多帧复制
     2:MAC Database Instability /MAC地址数据库的不稳定 /端口漂移
     3:Broadcast Storms/广播风暴

    解决方案:STP
    STP是链路管理协议, 将特定的端口置于阻塞状态,来实现既没有环路,也可以冗余的网络.

    STP核心:
    Provides a loop-free redundant network topoloty,by placing certain ports in the blocking state.

    STP信息是通过BPDU来传输的
    桥接协议数据单元BPDU(Bridge Protocol Data Unit).
    作用: 在交换网络中由根桥RB(Root Bridge)发送,用于STP的计算和收敛;发送周期为2秒;

    两种类型:
    配置DPDU  是所有端口上的根网桥以周期性间隔而发出的;
    TCN(Topology Change Notification) BPDU  当交换机检测到拓扑变更时所产生的(TC发送时间持续35秒,即delay time+BPDU老化时间).

    BPDU完成的任务:
     选举根桥
     确定冗余路径的位置
     阻塞特定端口防止环路
     通告网络的拓扑变更
     监控生成树的状态

    协议ID(0)  表示协议 802.1d
    版本号(0)  STP的版本,802.1D的版本是0
    BPDU类型   配置BPDU=0, TCN BPDU=80
    信息寿命  从根桥发出BPDU之后的秒数,每经过一个网桥都递减1,本质上是到达网桥的跳计数
    标记域   包括 拓扑变化(TC)位,置位了就指明该BPDU是一个拓扑变化通告  或  拓扑变化确认(TCA)位

    交换机对BPDU的处理:
    如果交换机从一个接口接收到优先级高的BPDU,会把该BPDU保存下来并且该接口不再往外发送BPDU;
    在收敛时只有根桥产生BPDU,其余交换机只能从RP接收BPDU后才从DP发送出去;这样非根桥可能从DP或者NDP接受到BPDU;
    如果交换机从DP接收到优先级低的BDPU会丢弃,并给源MAC发送自己较新的BPDU;如果从NDP收到优先级低的BPDU会只丢弃了事。

    端口的不同状态:
    堵塞(Block,默认20s):只监听流入的BPDU
    监听(Listen,默认15s):监听和发送BPDU(根桥、根端口、指定端口等的选举在该阶段完成,如果接口没有成为DP则重新回到Block):
    学习(Learning,默认15s):监听和发送BPDU,并且会在该接口上学习流入帧的MAC地址
    转发: 监听和发送BPDU,会在该接口上学习流入帧的MAC地址,接收和转发数据帧
    禁用: 不参与STP,并且不能转发任何数据.
    STP定时器: 
    Hello time(2s)  用于确定根交换机多长时间向其他的交换机广播一次配置BPDU.
    Forward delay(15s) 监控每个端口在学习和监听状态上停留的时间
    Max Age(20s)  控制端口保存配置BPDU信息的最大时间
    作用: 让网络有足够的时间来获得有关拓扑的正确信息,并确定是否存在冗余链路.
    STP的默认最大寿命计时器为7,表示最大的网络直径可达7台设备.所以BPDU的Forward delay为20秒.
    bpdu广播2s一次,允许有3个包丢失即6s,当假设最大为7跳的时候,则一共要用20s,所以BPDU的有效时间为20s
    命令:
    (config)#spanning-tree vlan 2 hello-time 2 //范围1-10s
             spanning-tree vlan 2 forwad-time 4 //范围4-30s
             spanning-tree vlan 2 max-age 6

    STP执行的4步判决顺序
    确定根交换机    lowest root BID 
    计算到根交换机的最小路径开销  lowest path cost to root bridge
    确定最小的发送者BID   lowest sender BID
    确定最小的端口ID   lowest port ID 


    LAB1:根桥的选举
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    引用原则1:
    Lowest BID那个交换机,就是root Bridge.
    BID:(Bridge ID)
    由本交换机的网管MAC地址,和交换机的优先级组成,一共8个字节的16进制.
    Step1:察看交换机的网管IP 所对应那个MAC地址
    SW1#show version
    Base ethernet MAC address: 00:07:EC:A8:4B:80
    Step2:
    察看STP的相关信息:(察看本机BID)
    SW3#show spanning-tree 
    交换机的STP的优先级,默认都是0x8000(32768)
    Boot ID /Bridge ID
    如果Root ID=本交换机的Bridge ID,说明本交换机就是根桥.
    Step3:人为控制,根桥的选举(控制根桥/后备根桥的选举)
    SW3(config)#spanning-tree vlan 1 priority 0 (0x0000)
    SW1(config)#spanning-tree vlan 1 priority 4096 (0x1000)

    SW-A(config)#spanning-tree vlan 1 root priority
          (24576=0x6000)
    SW-B(config)#spanning-tree vlan 1 root secondary
          (28672=0x7000)


    LAB2:非根桥交换机的根端口选择:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    引用原则2:
    Lowest path cost to root bridge
    Spanning-Tree Path Cost
    根端口:
    在非根桥交换机上,到达根桥所需的路径开销,最小的那个端口. 
    链路带宽与cost
    cost是如何叠加的?

    每个非根桥,都只有一个根端口.
    SW1#show interface status
    SW1(config)#int fa 0/12
       speed 10
    SW1#show spanning-tree interface fastethernet 0/12 detail
     port path cost 100
    根桥上,没有根端口,"所有与交换机相连的端口"都是"指定端口"

    (config-if)#spanning-tree vlan 1 cost ?  //修改端口开销

    designated port
    LAB3:每条segment上的,的选择:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    引用原则3:
    Lowest sender BID
    Step1:判断SW1的SW3之间的segment上,哪个是D-PORT? (8)  
    Step2:
    SW1(config)#spanning-tree vlan 1 priority 36864
           (0x9000)

    LANB4:sender BID相同的情况下,designated port的选择:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    如果sender BID相同,则引用原则4:
    Lowest (对方的) port ID
    Step1:
    SW2(根桥)# 察看端口的Port-ID
    show spanning-tree interface fastEthernet 0/12 detail
         port identifier 128.12
    SW2(config-if)#spanning-tree port-priority 32 (16进)

    LAB5:观察 blocked端口
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    查看所有segment:
    观察除了指定端口,和根端口以外的端口,都是被堵塞的.
    show spanning-tree vlan 1 detail //显示各个端口上所接收的BPDU数目


    STP的的特性:(CISCO私有)
    1:PortFast 加快终端主机连接入stp网络的收敛.
    只适用于,在交换机与主机(电脑)相连的端口, 不应该在交换机与交换机,路由器,hub互连的网络设备的端口使用.
    interface FastEthernet0/1 (交换机上,在连接主机的端口)
     switchport mode access (接入链路)
     spanning-tree portfast
    spanning-tree portfast default //全局模式下使用,全局启用portfast.

    2.uplink-fast:
    在所有接入层/分布层(非核心层)交换机上,配置uplink-fast,用于加速因为直链故障/直链检测错误,所引起的STP网络变化的收敛速度.
    block - forward
    1~5s
    sw1(config)#spanning-tree uplink-fast //启用uplink-fast
    show spanning-tree uplinkfast //查看uplinkfast信息

    将网桥优先级增加49152,并且将交换机上所有接口的生成树端口开销增加3000
    3.BackBone-Fast:
    当遇到非直链检测错误时,加速其收敛速度:
    大约为30s
    indirect Link Failure
    所有的交换机上,配置BackBone-Fast
    sw1/2/3(config)#spanning-tree backbonefast //启用backbonefast
    show spanning-tree backbonefast //查看backbonefast信息

    4.portfast bpduguard (在已经是portfast端口上配置)
    交换机端口的"portfast bpduguard"是指:
     在交换机的端口一旦收到BPDU包时,立刻关闭端口(进入err-disable状态),避免了更大范围的广播风暴.
    如果要打开必须先shutdown,再NO SH
    设置自动重新启用老化时间:
    (config)#errdisable recovery cause bpduguard //默认300秒
         errdisable recovery interval ?  //修改等待间隔

    在连接主机的端口上:
    Sw1(config-if)#spanning-tree bpduguard enable
    bpduguard Don't accept BPDUs on this interface

    5:portfast bpdufilter (在portfast端口配置)
    防止交换机在启用"portfast"的接口上发送BPDU,并且将接收到的所有BPDU都丢弃.
    在特定的portfast端口上配置:
    sw1(config-if)#spanning-tree bpdufilter enable 
     (bpdufilter: Don't send or receive BPDUs on this interface)
    sw3(config)#spanning-tree portfast bpdufilter default  //全局的portfast端口上,都生效
    注意:BPDU过滤可能导致环路,不推荐配置.配置过滤之后防护将不起作用.
    6:root guard (推荐在所有的接入端口上配置)
    将接口强制成为指定端口,从而防止周围的交换机成为根交换机.
    (config-if)#spanning-tree guard root 
    show spanning-tree inconsistentports //显示"不一致根"

    debug spanning-tree events
    logging buffered
  • 相关阅读:
    jmeter(46) redis
    jmeter(45) tcp/ip协议
    Codeforces Round #538 (Div. 2)D(区间DP,思维)
    Codeforces Global Round 1D(DP,思维)
    Educational Codeforces Round 57D(DP,思维)
    UPC11073(DP,思维)
    Yahoo Progamming Contest 2019D(DP,思维)
    Atcoder Beginner Contest 118D(DP,完全背包,贪心)
    Xuzhou Winter Camp 1C(模拟)
    Educational Codeforces Round 57 (Rated for Div. 2)D(动态规划)
  • 原文地址:https://www.cnblogs.com/fangbo/p/1863188.html
Copyright © 2011-2022 走看看