思科-router|layer2-STP_BPDU特性
session 1 BPDUGuard(BPDU守卫)
BPDU-Guard是一个利用STP的BPDU做交换机端口安全策略的命令,在接口下启用了BPDU-Guard后该接口将禁止接收BPDU,一旦收到BPDU该接口将进入err-disable状态(可以发送BPDU)。
使用环境:用于防止私自接入支持STP协议的交换机到网络中,但是对于终端电脑、家用路由器、傻瓜式交换机无效,因为该类设备部支持STP协议无法发送BPDU报文。
配置如下:
L5(config-if)#spanning-tree bpduguard enable在接口下开启bpduguard
当该接口接入支持stp的交换机后将被err-disable,恢复的方法有2个,手动和自动。
手动恢复需要在该接口下shutdown在no shutdown
自动恢复需要配置:
L5(config)#errdisable recovery cause bpduguard开启bodugrard自动恢复
L5(config)#errdisable recovery interval 1800恢复时间为1800s
L5#L5#show errdisable recovery查看配置了自动恢复的策略及时间
session 2 BPDUfilter (BPDU过滤)
BPDU-filter是让接口无视BPDU
配置如下:
L5(config-if)#spanning-tree bpdufilter enable在接口下开启bpdufilter,该接口将过滤掉所有接收到和发送出的BPDU,相当于在该接口上直接关闭了STP。
注:如果一个接口即配置了bpduguard又配置了bpdufilter那么bpdufilter生效
BPDUGuard和BPDUfilter支持全局配置和接口配置
L5(config)#spanning-tree portfast bpduguard default全局下配置只针对配置postfast的接口生效
L5(config)#spanning-tree portfast bpdufilter default全局下配置只针对配置postfast的接口生效,但是不同的是bpdufilter在全局下配置后是只能过滤掉发出的BPDU,而不过滤收到的BPDU,也就是说该接口可以知道其他发BPDU的sw而其他SW不知道该SW,换句话说该SW的接口不参与STP的选举,但是配合执行STP协议。
session 3 uplinkfast(上行速链路)
文章图片
上述拓扑1、2、3三台SW相连并运行STP,1为root与3相互成为备份网关连接到2,2连接接入层交换机。
可以看到下面C连接1的端口是RP,连接3的端口是BLK阻塞端口,当2连接A的链路down后2将启用BLK端口(连接B的链路),经过STP重新选举listeing、leraning状态个15s及连接A口的bpdu缓存超时20s才能切换完成,速度很慢。uplinkfast技术是让SW2知道自己与1连接的链路一旦down,那么不用经过bpdu缓存超时、listeing、leraning状态而直接启用BLK端口,链路切换时间缩减至1-5s之内,完成快读切换。(但是不能保证SW1与SW3连接的链路down后SW2进行智能的切换,这个又需要用到BackBoneFast技术了)
本拓扑中需要配置在sw2上:
SWC(config)#spanning-tree uplinkfast在C上配置uplinkfast
注意要点: 1、配置了uplinkfast的sw会自动将priority调整为49152
2、配置了uplinkfast的sw会自动将端口cost值增加3000
3、手工配置了priority的值的话uplikfast将不生效(一般为ROOT准备)
session 3 BackBoneFast:用于检测间接链路的失效
上面提到了BackBoneFast可以使SW检测到其他SW的链路断开,从而快速的启用自己与其他sw连接的BLK口使网络快速切换。还是以上图为例讲解下BackBoneFast工作原理,可以抓包分析:抓sw3到sw2的包和sw2到sw1的包并检查其具体内容
BackBoneFast技术要运行首先必须在上述拓扑中所有SW中进行配置,因为BackBoneFast是检测其他sw的链路down而不是自己的端口状态,所以信息是由其他sw传递给当前sw,由当前sw自己进行判断的,如果没有配置BackBoneFast的话当前交换机就不认识其他sw传递过来的BackBoneFast数据帧,也无法将BackBoneFast数据帧传递给root告诉root拓扑发生了改变。所以所有的交换机都要配置BackBoneFast以便都能识别
下面是BackBoneFast具体工作步骤:以上图拓扑为例
sw3连接sw1的链路down后,sw3会认为sw1失效了,那么自己就成了root(假如优先级比SW2高),就会发送一个次级BPDU给sw内容是告诉sw2自己是root了,而sw2收到这个bpdu后对比收到的sw1的bpdu后发现并不是sw1down了,而是sw3与sw1连接的链路down了,然后就会返回一个bpdu给sw3告诉sw3根是sw1,然后sw3就会知道是自己与sw1的链路出现了down。然后向sw2发送一个TCN-bpdu(拓扑变更通知bpdu),sw2收到这个tcn-bpdu后马上将自己BLK的端口up(不经过bpdu缓存mix age20s时间和listeing、learning过程),然后发送一个伪多播帧flood给sw1,同时将sw3发来的tcn-bpdu也转发给sw1,sw1收到这个伪多播帧后就知道是自己与sw3的链路down了,然后再查看sw3的tcn-bpdu,查看完后向外flood自己生成的TCN-BPDU通告拓扑的改变,并把自己连接sw3接口的MAC地址在CAM表中迁移到F1/0口。
其中sw2发给sw1的伪多播帧内容就是表示了BackBoneFast技术的内容,大概是告诉rootsw1经过BackBoneFast已经判断出sw1与sw3的连接断了,不需要再次进行stp全网的选举了,直接由sw2启用BLK端口就可以了。所以可以跳过了stp选举,sw2的f0/21端口在1-3s内就可以切换成forward状态
缺点:BackBoneFast目前不支持MST(P)
session 4 spanning-tree RootGuard(根守卫)
阻止priority比网络中ROOT更高的新加入网络的SW成为根。也就是阻止新接入网络的SW抢走原来的ROOT,STP照常计算,视为普通SW。
文章图片
在sw2的f0/19端口配置RootGuard来防止SW4成为ROOT,保证整个网络稳定性。
SW2(config)#internet f0/19
SW2(config-if)#spanning-tree gurad root在f0/19接口启用RootGuard功能
session 5 UDLD(Uni Dirdectional Link Detection)单向链路故障检测
当交换机连接对端交换机的端口出现故障不能接收或发送数据,而对端交换机接口正常能收发数据的情况下,会造网络的单向环路(对端交换机)或者数据不通信情况,而UDLD技术就是检测一条链路之间的状态,与stp中的loopguard技术类似,不同的是loopguard只能检测配置了STP的sw的接口链路故障。而UDLU是检测任意接口链路的技术。原理是在接口配置UDLU后,SW与SW的接口之间会发送echo报文来检测链路的状态,如果一个收一个发双方都能收到,那么说明链路正常,否则链路故障。
UDLD的配置命令:
分别在SW2和SW3的f0/21接口下配置
L5(config-if)#udld port当前接口开启udld检测功能,只能用于光纤的检测,一旦故障将报警。
L5(config-if)#udld port aggressive接口开启udld,并使用激进模式。可以用于光纤和双绞线的检测,一旦故障将报警,并err-disable端口。
全局下:
L5(config)#udld enable设置udld对所有端口生效
L5(config)#udld aggressive 设置所有接口开启udld的激进模式
L5(config)#udld message time 15设置udld的echo检测报文发送间隔,默认为15s
UDLD的缺点:1、cisco私有
2、不支持ATM接口,因为ATM报文和EthnetII的帧格式不一样不能兼容,所以一般ISP用不了
UDLD多用于检测光纤收TX、RX发线是否插反,插反则会报错。
补充:loopguard,STP环路避免技术。(局限性较大)
STP的环路,就是运行了STP后出现的环路。原理:上图拓扑中
【思科-router|layer2-STP_BPDU特性】sw2与SW3相连的f0/21端口出现单向故障,只能发送BPDU而不收不到BPDU。造成sw2可以发给SW3BPDU,而SW3返回给SW2的BPDU收不到,SW2的f0/21接口不停的发送BPDU而没有得到回应,这时SW2会认为f0/21接口连接的是一台PC(因为PC不会相应BPDU的)而不是交换机。所以SW2不会将自己的f0/21接口BLK,这样就造成了一个单向的环路,即广播flood会从sw2发往 sw3,sw发给sw1,sw1再flood给sw2(当然sw3过来sw2的方向因为sw2的f0/21口接收不到BPDU所以不会出现逆时针的环路,只会出现顺时针的环路)。
loopguard的防环机制是在SW的一个端口成为DP之前需要发送一个确认报文给对端SW的连接端口,如果能收到回应则端口成为DP,如果没有收到回应,那么端口将进入err-disable状态。(拓扑中为SW3的f0/21会向SW2的f0/21端口做确认)
loopguard配置(一般所有sw都配置):
SW2(config)#spanning-tree loopguard default在SW中开启loopguard功能
SW2 (config)#show spanning-tree interface f0/5 detail
推荐阅读
- 思科路由映射表控制BGP路径的方法和实例
- Vue|vue-router 详解
- vue-router|vue-router 由hash更换为history模式
- react-router4升级
- react-router|react-router 源码阅读
- vite+vue3+vue-router项目中vue-router报错的问题
- react基础学习之路由篇(react-router-dom)
- 思科ACI-2017-科技无限
- 使用python基于zmq的DEALER-ROUTER模式实现分布式消息分发的demo
- react-router-dom|react-router-dom 源码阅读