Cisco STP Note

当两个Segement之间,只有一条物理连接时就有可能出现单点失效→ 单方面的故障导致全网Down
Segement的三种概念: 
1.在STP领域表示一段物理介质(网线/光纤) 
2.在数据封装领域:携带了L4包头封装的数据 
3.在路由领域:被L3设备(路由器)所分割的逻辑子网避免单点失效的方法→构建冗余网络。

冗余网络三大问题:冗余网络的三大问题都由其核心问题也就是网络环路(打环)引起
    > 多帧复制(Multiple Frame Copies)→未知MAC地址的数据帧在交换机间不断的复制转发复制转发……直到找到该目标地址并成功构建MAC映射,而这时该目标已经收到了N个同样的数据帧了;
    > MAC表地址跳动(MAC-Adress Instability)→因为几个接口都能够连接同一个PC因此MAC表中该设备的MAC值匹配的接口不断在几个接口间跳动;
    > 广播风暴(Broadcast Storms)→广播会永无休止的发送下去占用越来越多的资源直到资源耗尽网络堵塞交换机Down机;

解决方法:STP

STP(Spaining Tree Protocol):
- STP核心:冗余网络中将特定的端口置于阻塞状态,来实现既没有环路,也可以冗余的网络。
·STP采用STA(Spanning Tree Arithmetic)算法。

·STP的各种选举是通过交换BPDU报文来实现的,BPDU是直接封装在以太网帧中的。
·对于参与STP的所有SW,它们都通过数据消息的交换来获取网络中其他SW的信息,这种消息就被称为BPDU。
·BPDU是直接封装在二层的协议,其MAC地址最后封装数为:00。(01:80:c2:00:00:00)
·BPDU的功能:
 1.选举根桥
 2.确定冗余路径的位置
 3.通过阻塞特定端口来避免环路
 4.通告网络的拓扑变更
 5.监控生成树的状态
·BPDU每2S由根桥发送一次。
 最初的网络,每个SW都认为自己是根桥,都会发送BPDU,比较Lowest BID,选举出一个根桥,当根桥选出来以后。此时就只有根桥发送BPDU。非根桥只进行转发。

STP的四大原则(越小越好):
> lowest root BID ;
> lowest path cost to root bridge ;
> lowest sender BID ;
> lowest port ID ;

生成树协议STP(Spanning-Tree Protocol)的四大结论:
 > One root brigde per network →每个交换网络,都有一个唯一的根桥RB(根交换机:Brigde-ID最小的交换机或优先级最小的);
 > One root port per non-root brigde →每个非根桥,都有一个唯一的根端口RP(根端口:去往根桥开销最小的端口);
 > One designated port per segement →每条网络介质,都必定有一个唯一的指定端口DP(指定端口,根端口都是转发数据包Forwarding状态的);
 > Nondesignated ports are unused →没有获得任何标记的端口NDP(指定端口、根端口以外的端口),都被禁用,不转发数据包。
注意:交换机开机时认为自己是根桥!根桥上没有根端口,所有端口(参与了STP运算的所有端口,通常是交换机与交换机相连的端口)都是指定端口。

Brigde-ID:
>8byte的ID,由优先级(Priority/2Byte)+MAC地址(6Byte)组成,优先级默认为0x8000(32768)并且只取整;
>优先级取值:
0x0000(0)、0x1000(4096)、0x2000()、
0x3000()、0x4000()、0x5000()、
0x6000(24576)、0x7000(28672)、
0x8000(32768)、0x9000(36864)。

STP默认开销:
link speed
Cost
10Gbps
2
1Gbps
4
100Mbps
19
10Mbps
100

BPDU(Bridge Protocol Data Unit):
- 在交换网络中由根桥RB(Root Bridge)发送,用于STP的计算和收敛;发送周期为2秒;
>BPDU的作用:选举根桥、确定本地是否形成环路、阻塞特定端口防止环路、监控生成树的状态;
>BPDU有两类:TC和TCN
   >>TC:在正常情况下发送,根发送
   >>TCN(拓扑变更通告):网络拓扑发生变化的时候发

1、配置BPDU--通常由根网桥以周期性间隔发出,包括了STP参数,用于进行各种选举。
2、TCN(topology change notification 拓扑变更通告)BPDU--这种BPDU是当交换机检测到拓扑发生变更时所产生。
·配置BPDU包含以下的字段(configuration BPDU)
  1、Protocol ID      : 固定为0,2bit
  2、Version          : 802.1D (0),1bit
  3、Message Type     : (Config BPDU=0x00 / TCN BPDU=0x80),1bit---byte
  4、Flags:1bit(第1位为0是not topology change acknowladgment,最后位为0是not topology change)
  5、Root ID:8bit
  6、Cost of Path:4bit
  7、Bridge ID:8bit(2bit priority+6bit MAC)
  8、Port ID:2bit
  9、Message age:2bit
  10、Max age:2bit:20S
  11、Hellotime:2bit:3S
  12、Forward delay:2bit:15S
 
·TCN(Topology Change Notification) BPDU
 这种BPDU是交换机检测到拓扑变更时产生的。只包含下列三个字段
   1、Protocol ID
  2、Version
   3、Message Type : (Config BPDU=0x00 / TCN BPDU=0x80)

上游交换机如果不是root bridge时,当它收到下游的bridge发来的BPDU为TCN BPDU时,他一方面从自己的根端口转发这个BPDU,另一方面会回发给下游交换机BPDU

TCA是TC的一种,当拓扑变化时检测到变化的交换机会通过RootPort向根桥发送TCN;而根桥收到TCN后会发送TCA表示收到,同时发送TC要求该交换机把MAC表的age时间改为15秒以学习新的表:由于TC是RB产生的,所以要更改各个计时器时只能在RB上更改。

端口的不同状态:
  >堵塞(Block,默认-max-age 20s):丢弃从该接口收到的正常数据帧;不会在该接口上学习mac-address-table;不会从该接口发送正常数据帧;会从该接口接收对端发送的BPDU;不会从该接口发送BPDU;
  >监听(Listen,默认15s):丢弃从该接口收到的正常数据帧;不会在该接口上学习mac-address-table;不会从该接口发送正常数据帧;会从该接口接收对端发送的BPDU;会从该接口发送BPDU(根桥RB、根端口RP、指定端口DP等的选举在该阶段完成,如果接口没有成为DP则重新回到Block);
  >同步(Learning,默认15s):丢弃从该接口收到的正常数据帧;会在该接口上学习mac-address-table;不会从该接口发送正常数据帧;会从该接口接收对端发送的BPDU;会从该接口发送BPDU;
  >转发(Forward,直到down机→TK里面是15、30s的):从该接口接受正常数据帧;会在该接口上学习mac-address-table;从该接口发送正常数据帧;会从该接口接收对端发送的BPDU;会从该接口发送BPDU。

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

STP下的链路失败类别:
    直接失败:Block端口立刻进入Listen状态,收敛时间为30秒;
    间接失败:要等待20秒后才能判断端口失败。50s

CISCO默认是PVST---基于VLAN
802.1D-----整个SW网络只有一个STP
----------------------------------------------------------------------------
验证:
LAB1:四大结论第一(One root brigde per network):


    STEP1:察看交换机的管理地址 所对应的那个MAC地址:
    每一个STP交换网络都只有一个根桥RB
    引用原则1→Lowest Brigde-ID的那个交换机就是RB;
    Brigde-ID由本交换机的优先级(2字节)和网管MAC地址(6字节)组成一共8个字节(网管MAC地址:可以理解为被telnet的那个地址);
    用#sh ve查看MAC地址得:Base ethernet MAC address:00:1B:2A:B8:6E:40 
    交换机的STP优先级默认是0x8000(32768);
    STEP2:查看STP相关信息(本机BID):
    用#sh spanning-tree查看,Root-ID就是本STP网络中根桥的Brigde-ID→根据Root-ID找到根桥;
    STEP3:通过优先级控制根桥选举:
VLAN 1-----> SW1 ( root ) SW2 BR
VLAN 2-----> SW2 ( root ) SW1 BR

sw1(config)#spanning-tree vlan 1 root primary
指定SW1 为VLAN1的根交换机
优先级由0x8000 ----->0x6000(32768-->24576)

sw1(config)#spanning-tree vlan 2 root secondary 
指定SW1为VLAN2的备用根交换机
优先级由0x8000----->0x7000(32768--->28672)

还可以更改优先级:
vlan 1------>sw1 (root) P:0  sw2 P:4096
vlan 2------>sw2 (root) P:0  sw1 P:4096

SW1:
spanning-tree vlan 1 priority 0
spanning-tree vlan 2 priority 4096(这个必须是4096的倍数)

SW2:
spanning-tree vlan 1 priority 4096
spanning-tree vlan 2 priority 0     
------------------------------------
LAB2:四大结论第二(One root port per non-root brigde):

STEP1:查看Cost:
    每个非根桥(NRB)都有一个唯一的根端口(RP);不是RB的交换机都是NRB
    引用原则2→Lowest path cost to root bridge的那个交换机接口就是RP
    用#sh spanning-tree查看,得知当前的RP的Cost为19 (当前去往根桥的cost值);
 在根桥上,没有根端口,所有端口都是“指定端口”   所有端口是指:参与STP运算的端口,通常是交换机与交换机相连的端口,每个非根桥,都只有一个根端口
    STEP2:控制RP的选举:
            
   SW3:config-if-fa0/9 :speed 10 (单位是Mbps)
    
   把2号口带宽改为10M,那么开销为100,那么端口3变为根端口,那么到根桥的开销为38,因为SW2到根桥的也是19
    可以用#sh interface status →sh spanning-tree detail查看;
    
    


    也可以通过直接调试Cost值来控制:(c)#spanning-tree cost 50 。
SW3

sw3(config)#int f0/2
sw3(config-if)#spanning-tree cost 50


LAB3:四大结论第三(One designated port per segement):


   
    STEP1:查看Cost:
    每一个网段有一个指定端口DP
    引用原则3→Lowest sender Brigde-ID;
    STEP2:控制DP的选举:
    SW2: 


 
    sw2(config)#spanning-tree vlan 2 priority 36864(优先级Prio=0x9000)。


sw3: F0/3   状态BLC--->FWD
----------------------------------------------------------------------
× 有问题   LAB4:四大结论第四(Nondesignated ports are unused ):

sender BID相同的情况下,designated port 的选择
如果sender bid 相同,则引用原则4  lowest port id 
如果要让SW2的f0/3口作为根端口,那么更改port id,更改SW1的22口调小

SW1:sh spanning-tree in fa 0/22 detail 
观察到port identifier 128.22
sw3(config)#int f0/3
sw3(config-if)#spanning-tree port-priority 32 (这个值必须是16的整倍数);

SW1:spanning-tree in fa 0/22 detail 
观察到port priorty 32,port identifier 32.22

LAB5:观察STP的转发延时:


  SW1 为root
    STEP1:直链检测错误 (30秒):
    shutdown SW3 f0/2 口观察:
    SW3#debug spanning-tree events
02:37:33: STP: VLAN0001 new root port Fa0/2, cost 19
02:37:33: STP: VLAN0001 sent Topology Change Notice on Fa0/2
02:37:33: STP: VLAN0001 Fa0/3 -> blocking
02:37:33: STP: VLAN0002 new root port Fa0/2, cost 19
02:37:33: STP: VLAN0002 sent Topology Change Notice on Fa0/2
02:37:33: STP: VLAN0002 Fa0/3 -> blocking
02:37:46: STP: VLAN0001 Fa0/2 -> learning
02:37:46: STP: VLAN0002 Fa0/2 -> learning
02:38:01: STP: VLAN0001 Fa0/2 -> forwarding
02:38:01: STP: VLAN0002 Fa0/2 -> forwarding

STEP2:非直链检测错误(50秒):
   shutdown  SW2 f0/1(RP) 在SW3上观察
02:38:50: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:38:50: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:38:52: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:38:52: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:38:54: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:38:54: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:38:56: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:38:56: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:38:58: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:38:58: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:39:00: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:39:00: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:39:02: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:39:02: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:39:04: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:39:04: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:39:06: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:39:06: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:39:08: STP: VLAN0001 Fa0/3 -> listening
02:39:08: STP: VLAN0002 Fa0/3 -> listening
02:39:08: STP: VLAN0001 heard root 32769-001b.2ab8.88c0 on Fa0/3
02:39:08: STP: VLAN0002 heard root 32770-001b.2ab8.88c0 on Fa0/3
02:39:08: STP: VLAN0001 Topology Change rcvd on Fa0/3
02:39:08: STP: VLAN0001 sent Topology Change Notice on Fa0/2
02:39:08: STP: VLAN0002 Topology Change rcvd on Fa0/3
02:39:08: STP: VLAN0002 sent Topology Change Notice on Fa0/2
02:39:23: STP: VLAN0001 Fa0/3 -> learning
02:39:23: STP: VLAN0002 Fa0/3 -> learning
02:39:38: STP: VLAN0001 sent Topology Change Notice on Fa0/2
02:39:38: STP: VLAN0001 Fa0/3 -> forwarding
02:39:38: STP: VLAN0002 sent Topology Change Notice on Fa0/2
02:39:38: STP: VLAN0002 Fa0/3 -> forwarding

<二层MAC地址表的收敛>
注意:在网络拓朴发生改变后,不仅会有STP的收敛,还会导致二层MAC地址表的收敛。
·当发生如下事件时,SW会发送TCN:
 1.链路故障(FWD -> BLK)
 2.端口进入转发状态,并且SW已经拥有DP
 3.非根桥从它的DP接收到TCN,并将其转发
 
MAC地址表的收敛过程如下:
  1、拓扑发生改变的交换机向RP端口发出TCN的BPDU
  2、上级交换机做两件事:先回应一个TCA置位的BPDU,再继续向自已的RP接口发出TCN的BPDU
  3、TCN的BPDU就这样一跳跳的传到根交换机上
  4、然后根交换机将自已MAC地址表的老化时间由默认的300S改为转发延迟时间(15S)。
  5、根交换机再向网络中发出TC置位的BPDU
  6、网络中的其他交换机收到TC置位的BPDU后,也将自已MAC地址表的老化时间由默认的300S改为15S。
这样,每台交换机就快速的老化了MAC地址表,清除掉了已经失效的MAC地址条目。

<BPDU Timer>
三个计时器:
·Message Age:最大存活时间(20S)
 Hello Time:根桥连续发送BPDU的间隔(2S)
 Forward Time:SW在监听和学习状态所停留的时间(15S)
spanning-tree vlan 1-10 hello-time 3   修改发送BPDU的时间间隔
spanning-tree vlan 1-10 forward-time 13   修改forward时间
spanning-tree vlan 1-10 max-age 33    修改最大存活时间
注意:必须在根桥上修改,否则不起作用。
 

原文地址:https://www.cnblogs.com/cyrusxx/p/12615695.html