STP高级
STP高级
Supermini233STP基础部分
技术背景
- 接入层交换机单链路上联,存在单链路故障
- 物理链路冗余,解决了单链路故障问题,但是二层环境存在环路
- 另一个问题的单点故障,如果任意一个汇聚设备宕机,将直接导致下联的接入网络挂掉
- 生成树可以有效的解决这个问题
- 通过生成树协议,在逻辑上将特定端口进行block,从而实现物理上存在冗余环境,而二层又阻止环路的产生
- 当拓扑发生变更的时候,生成树协议能够探测这些变化,并且及时自动的调整接口状态,从而适应网络拓扑的变化,实现链路冗余
生成树的标准
- 802.1D
- PVST+ 思科Cisco私有协议,每个VLAN拥有一颗单独的生成树实例
- 802.1W RSTP
- 802.1S MSTP
- PVRST+ Cisco私有,对RSTP的增强版
STP的操作
- 每个广播域选择一个根桥
- 每个非根桥上选择一个根端口
- 每个段选择一个指定端口
- 选择一个非指定端口
- 根端口:具有最低根路径的接口要考虑的因素:
- 1.最低根桥ID
- 2.到根桥的最低路径成本
- 3.最低的发送者网桥ID
- 4.最低的发送者端口ID
端口的状态
- Disable 不收发任何报文
- Blocking 不接受也不转发帧,接收但不发送BPDU,不学习MAC地址
- Listening 不接受也不转发帧,接收并且发送BPDU,不学习MAC地址
- Learning 不接受也不转发帧,接受并且发送BPDU,学习MAC地址
- Forwarding 接受并转发帧,接受并且发送BPDU,学习MAC地址
STP 拓扑变更
- TCN BPDU概述
- 当网络拓扑出现变更的时候,最先意识到变化的交换机将发送TCN BPDU
- 在发生以下时间时,交换机将发送TCN:
- 对于正在处于转发和监听状态的接口,过渡到Block状态(链路故障的情况)
- 端口进入转发状态,并且网桥已经拥有指定端口
- 非root网桥在它指定的端口收到TCN
- SwitchA挂掉
- SwitchB最先检测到拓扑变化,于是产生TCNBPDU并从根端口发送出去(因为根端口是朝着根桥的方向),B将连续发送TCN BPDU直到指定交换机C发送TCNACK进行确认
- SwitchB收到这个TCN BPDU,回送一个TCN ACK进行确认,同时向自己的根端口转发这个TCN BPDU
- Root收到这个TCN,回送一个TCN ACK给C
- Root修改自己的配置BPDU,以此来通告整个交换网络关于拓扑变更的情况。Root在配置BPDU中设置一段时间的拓扑变更(TC标志),这段时间等于转发延迟+Max.Age,默认35S
- 当交换机收到Root发出的这个TC标志置位的配置BPDU,它们使用转发延迟计时器(默认15S)来更新其MAC地址表中的条目。也就是说条目的寿命由原来的300S的默认值变成15S,这样能保证MAC地址条目更快速的刷新。交换机将持续这个过程,直到不再从Root收到TC BPDU消息为止。
PVST+
扩展的SystemID
- CISCO CATALYST交换机的MAC地址池最多可以容纳1024个地址,交换机的型号决定了可用MAC的数目,并不是所有catalyst交换机都能支持到这么多个MAC
- 这些MAC地址作为VLAN生成树中的网桥ID的MAC地址部分。不同的交换机型号支持不同的可用MAC地址数目。交换机依照次序分配MAC地址
Show run int | include bia
能看到所有的MAC,其中第一个MAC将被生成树使用,也就是CPU的MAC。接下去就是每个以太网接口的MAC。- 我们知道交换机能够支持的VLAN的数据是很庞大的,如果开启PVST+,每个VLAN-棵生成树,而没棵生成树都要有一个独立的标识,都需要耗费一个MAC的话,那么MAC地址池肯定是无法承受的。
- 因此需要使用到MAC地址缩减方案
Portfast
- 在交换机上,将连接主机的接口配置为portfast
- Portfast接口可以绕过listening和learning状态直接进入forwarding状态
RSTP
概述
- 802.1w
- 端口角色:根端口、指定端口、替代端口、备份端口
- 端口状态:转发、丢弃、学习
- 在思科catalyst交换机上,pvst+(pvrst+)是基于RSTP实现的perVLAN版本
BPDU
- 00 未知
- 01 替代/备份
- 10 根端口
- 11 指定端口
BPDUs检测过程
- B丢失了到Root的路径
- 认为自己是Root
- 于是发送“我就是Root”的次优BPDU
- C知道Root还活着
- 立即发送包含Root信息的BPDU给B
- B接受BPDU,并且把连接C的接口设定为根端口
BPDUGuard
- 该接口收到BPDU报文后,会立即切换到err-disable状态
- 常搭配portfast特性在接口上一起使用,用于连接主机
- 可在接口上激活,也可在全局模式上配置,两者有所不同
边缘端口edge-ports
- RSTP定义的端口类型与postfast十分类似
- 因为这些接口用于连接主机,所以一般不会产生环路。这写端口可以跳过LST或LRN直接过渡到转发状态
- 而且当这这些接口up down的时候不会引起拓扑变更
- 另外,边缘端口收到BPDU,则立即丢失边缘端口的特征,变成一个普通的Spanning Tree接口
- 在catalyst交换机上,可以用postfast关键字来进行手工配置
Rapid Transition to Fowarding State
- RSTP能够在边缘端口及P2P链路上快速过度。
- RSTP的链路类型是通过接口的双工状态自动获取到的,如果接口时半双工,那么链路类型是shared port,如果是全双工那么就是p2p。
- 当然,接口的链路类型可以通过命令修改,接口模式下:
spanning-tree link-type ?
链路类型
- P2P(点对点)
- shared port(共享端口)
收敛对比:802.1D
- A及Root之间新增链路Link1
- A及root在link1两端的接口都进入Listening状态,A将收到Root发出来的BPDU
- A将BPDU从自己的指定端口发送出去,BPDU被泛洪到网络中
- B和C收到这个更优的BPDU,继续向网络中泛洪
- 数秒后,D收到这个BPDU,Block掉端口P1
Tips:**由于缺乏feednack机制,A连接root的接口从listening到Forwarding,需要经历152s的延迟。此时A、B、C下联的用户流量就出现了问题(因为D收到更优的BPDU后,将P1口block了,这时候ABC相当于在A的根端口过渡到forwarding之前都处于网络的“隔离地带”)*
收敛对比:RSTP
- A及Root之前新增链路Link1
- A及Root在Link1两端的接口在up之后进入designated blocking。然后双方交互BPDU消息。这个过程实际上是一个协商的过程
- A在收到Root发送的BPDU后,将自己的所有非边缘端口Block(这个过程称为同步sync),并且回送一个agreement消息给Root
- 在此之后,Root及A在link1上的端口立即都过渡到转发状态。而网路目前是没有环路的,A往下的网路目前是切断的
- A与B和C之间,开始一轮新的协商,BC收到A发送的bPDU后,完成同步Sync过程,将自己的非边缘端口Block掉,然后都向A回送agreement信息。同时ABC互联的接口进入转发状态。在BC同步操作的过程中,B下联全是主机,因此没有端口被Blcok(已经完成同步);而C要block掉连接D的端口
- 完成上一步后,生成树状态如图
- 最终BPDU到达D,D将P1口Block掉
Tips:
在RSTP收敛过程中,耗费是时间仅仅是BPDU从Root泛洪到网络末端的时间,不用受到任何Timer的限制,直接绕过两个转发延迟时间。因此收敛速度更快。
- 有两点需注意:
- 交换机之间的这种协商机制只在P2P链路上被执行
- 边缘端口的配置非常重要,如果配置不当有可能会在同步过程中被BLOCK。
Proposal/Agreement Squence
Root和A之间新增了一条链路,链路两端的接口在收到对方发送的BPDU前是designated blocking状态
- 当一个被选举为指定端口的接口在discarding或learning状态(目只在这个状态),它在其发送的BPDU中进行proposalbit置位。这就是步骤1的P0的情况
- 在A完成同步后,A就可以将新选出的根端口unblock并且发送一个agreement消息给Root。这个agreement消息是A的proposal消息的拷贝,但是agreement bit置位了。
- 如此一来,P0就收到了应答,立即转为forwarding。注意这时候P3接口仍处于designateddiscarding状态,于是它向它的邻居网桥去发送proposal,而且也在积极等待回传的agreement以便进入forwarding状态
Cisco STP toolkit
- Portfast
- BPDUGuard
- BPDUFilter
- UplinkFast
- BackboneFast
- RootGuard
- LoopGuard
- UDLD
基础配置
1 | Switch(config)# spanning-tree vlan-id #激活特定VLAN的stp |
1 | Switch(config-if)# spanning-tree [vlan vlan-id] cost cost |
1 | Switch(config)# spanning-tree postfast default |
评论
匿名评论隐私政策