STP(802.1D)作用和工作原理
1.STP 作用:
- 解决、广播风暴,mac地址不稳定、重复单播帧等问题(防环)
- STP也提供了为网络提供备份连接的可能,避免单点故障,可与SDH保护配合构成以太环网的双重保护。
2.交换机互动沟通数据包———BPDU(桥协议数据单元)
![](https://img-blog.csdnimg.cn/20200217140919847.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly90aWFueWFvLmJsb2cuY3Nkbi5uZXQ=,size_20,color_FFFFFF,t_70)
2.实现过程
1). 选根。
基于boot-ID字段,最小的是根。(开机后,交换机都认为自己是根,所以root-ID的初始值是和sender-ID是一样的)比boot-ID的大小,就是先比优先级priority,数值小的选中,priority相同的话,再比MAC值。数值小的选中。Priority的缺省值是:32768
确定根后,就只有根每隔2秒周期发BPDU了。非根交换机就只是转发BPDU了。
2). 选root port
是为非根交换机选root port(root port:非根交换机离根最近的接口)。基于path cost选,小的优选。
3). 选指派接口
为每个网段选一个指派接口(指派接口:网段离根最近的接口)。基于path cost选,小的优选。如path cost相同,比接口发的BPDU的sender-ID,小的选中.
4). 没被任何步骤选中的非根交换机接口,被该算法管理关掉,即被设为blocking.此时该接口只能接收BPDU帧,不转发BPDU帧,也不能收、发用户帧。
- 当交换机的root port失效时,被blocking的接口,会有一个被自动激活,成为active.成为root port(因为被blocking的接口能接收BPDU)
- 网络稳定后,接口只有2种状态:forwording、blocking.
注意:配置BPDU—只有根网桥可以发送
3.拓扑变更
TCN—拓扑变更消息(也是BPDU):
- 本地交换机链路故障后,STP重新收敛,为了快速刷新全网所有交换机的MAC表,将向本地所有STP接口发送TCN(标记位中的TCN位置1),邻居交换机收到TCN后,先标记为ACK位为回复,用于可靠传输消息;
- 之后将TCN逐级转发到根网桥处,由根网桥回复TC消息来逐级回复到所有交换机;
- 使所有交换机临时将MAC表的老换时间修改为15s(默认的,转发延时)
4.选举规则 (根网桥 根端口 指定端口 非指定端口)
- 根网桥 –
- 描述:在一棵生成树实例中,有且仅有一台交换机为root; BPDU中的 桥ID来决定
- 选举规则: 先比较优先级,越小小优; →→ 若优先级相同,比较mac,数值小优;
注:桥ID= 网桥优先级+ MAC地址
网桥优先级:0-65535公有, 默认32768 。
MAC地址:只有存在svi接口的交换机才拥有mac地址,若存在多个mac选数值最小。
- 根端口(ROOT)
- 描述:在每台非根网桥上,有且仅有一个接口;本地离根网桥最近的接口(最短、星型),
- 功能:接收来自根网桥的BPDU,转发用户的流量(该接口不阻塞)
- 选举规则:
- 连对端PID也相同,比较本地PID,小优;
- 对端BID也相同,比较该接口对端设备的接口的PID;越小越优,若优先级一致,编号小
- 入向cost值相同,比较该接口对端设备的BID,小优
- 比较从根网桥发出后,通过该接口进入时最小的cost值;
注:PID=端口ID 接口优先级(0-240,步长16,默认128) 接口编号
- 指定端口(Desg)
- 描述:在每一段存在STP的物理链路上,有且仅有一个;
- 功能:转发来自根网桥的BPDU,同时可以转发用户流量(不阻塞);默认根网桥上所有接口为指定端口
- 选举规则:
- 比较从根网桥发出后,通过该接口进入这段链路时的cost值最小(出向)
- 若出向cost值相同,必须本地的BID,小优;
- 本地BID相同,比较本地的PID;
- 本地PID,相同,直接阻塞该端口;
- 非指定端口(Altn、阻塞端口)
- 描述:当以上所有角色全部选举完成后,剩余没有任何角色的接口为非指定;
- 功能:该接口逻辑阻塞,实际可以接收到信息,但不转发;
端口状态 | 说明 | 端口能力 |
Disabled | 没有BPDU收发,一旦可以进行BPDU收发进入下一状态 | 不收发任何报文 |
Blocking | 逻辑阻塞 | 不接受或者转发数据,接受但不发送BPDU,不进行地址学习 |
Listing |
强制15s;所有交换机进行BPDU收发,选举所有角色;接口角色为非指定端口直接进入阻塞状态; 若为指定端口和根端口进入下一状态; |
不接收或者转发数据,接收并发送BPDU,不进行地址学习 |
Learning |
强制15s; 指定端口和根端口学习所有接口连接设备的MAC地址,生成MAC表;之后进入下一状态; |
不接收或者转发数据,接收并发送BPDU,开始进行地址学习 |
Forwarding | 指端端口和根端口进入,可以转发用户报文 | 接收或者转发数据,接收并发送BPDU,进行地址学习 |
注:只有到接口进入到转发状态后,才能为用户转发数据报文,之前的30s不能转发任何数据;
5.收敛时间
- 初次收敛:30s = 15侦听+15s学习
- 结构变化:
- 存在直连检测:本地存在阻塞端口,若其他端口断开,该阻塞端口马上进入15是侦听(选举);结果若为 启用,那么将再进入15s学习---总30s
- 没有直连检测:本地不存在阻塞端口,若某个端口断开,将发送次优BPDU(以本地为根)给其他邻居交换机,其他交换机无视该数据,进行20s hold time计时,到时时阻塞接口进入15s侦听,15s学习=总50s
6.802.1D 缺点:
- 收敛慢
- 链路利用率低
7.802.1配置命令:
[sw1]stp mode stp 修改为802.1d算法,当下华为默认为MSTP;
[sw1]stp priority 4096 修改网桥优先级
[sw1-GigabitEthernet0/0/1]stp cost ? 修改接口cost值
INTEGER<1-200000000> Port path cost
[sw1-GigabitEthernet0/0/1]stp port priority ? 修改接口优先级
INTEGER<0-240> Port priority, in steps of 16