当前位置:文档之家› stp

stp

PVST+ 、 PVRST 、 MST 授课笔记(详尽版)
为什么要用STP?---> 防止广播风暴,防止重复帧,防止MAC地址表翻转。
为什么会有广播风暴,重复帧,MAC地址表翻转? ---> 拥有冗余的拓扑。
为什么要使用冗余的拓扑---> 为了实现交换拓扑的可靠性。
是不是一定要使用STP防止广播风暴,重复帧,MAC地址表翻转? ---> 可以把线缆拔掉

STP的终极目标:将某些端口逻辑上阻塞,断开环路。并且阻塞的端口有可能再进入转发
(即实现了可靠性又保证了没有广播风暴)。


STP IEEE 802.1D RSTP IEEE 802.1w MSTP IEEE 8021.s

STP IEEE 802.1D spanning-tree-protocol (cisco不支持)
STP如何决定哪些端口断开。先保证那些不能被断开的端口进入转发,其他端口全部阻塞。
此时STP将一个环形的拓扑计算成一个树形的拓扑。
【STP/PVST 的报文类型:】
i:配置BPDU,只有根网桥能够发送,发送的时间间隔由HELLO计时器控制(2s)
字段:
message type : 0x00 ---> 表示该报文是配置BPDU
0x80 ---> 表示该报文是 TCN BPDU
FLAG:0x80 0x01
0 0 0 0 0 0 0 0
TCA TC



root identifer : 发送该BPDU的网桥所认为的根网桥是谁。
cost of path :根路径成本 ,如果是根网桥发送的BPDU,该字段为0
bridge identifer : 发送该BPDU的网桥的网桥ID
port ID :两个字节 第一个字节:端口优先级 第二个字节:端口ID
eg: 0x8018 说明优先级为128 端口ID 为18


ii:TCN BPDU 拓扑改变通知BPDU


SPT选举的过程:
1.选举根网桥:每个运行STP的交换机都有一个 bridge ID
bridge ID = priority + base MAC address
priority 缺省为 32768
-------------------------------------------------------------------------------------
| 交换机刚启动:此时交换机认为自己是根网桥,此时本交换机从所有的端口向外发送配置BPDU,|
| 该BPDU种的 【 root ID = bridge ID = 自己 】。 |
| 其他交换机也会发送这样的BPDU,如果本交换机收到一个BPDU,进行比较: |
| 比较收到的BPDU中 root ID 和自己发出的 root ID 。 |
| i:如果优先级或者MAC地址更大,不与理会,继续发送。 |
| ii:如果优先级较低或者MAC更小,此时不会从该接口向外发送BPDU,每次从该端口收到 |
|

BPDU 从其他端口转发,并且报文中的root ID 为对方的 root ID |
-------------------------------------------------------------------------------------
通过以上方式的选举最终在交换网络能够选择出一个最优的根网桥。(根网桥如果丢失)
2.选择根端口(距离根网桥最近的端口),在所有的非根网桥上选举一个根端口
2.1 判断多个接口收到BPDU的根路径成本。
10M ---------- 100
100M ---------- 19
1000M ---------- 4
10000M ---------- 2
交换机从多个端口收到BPDU(交换机意识到能通过多个端口到达根网桥),此时比较收到BPDU中的 cost of path + 接口的cost
选择最小成本的端口成为根端口(该端口去往根网桥最近)
2.2 如果多个端口的根路径成本一样,则比较多个端口收到的BPDU中的bridge ID 字段,选择收到拥有最小的bridge ID的BPDU报文
的端口成为根端口。
2.3 如果Bridge ID还一样 , 比较多个端口收到BPDU中的 port ID字段,port priority为高位,port identifer 为低位,
缺省情况下端口优先级都为128 0x80..
如果端口优先级一样则比较端口ID号
2.4 如果从多个端口收到的BPDU中,发现什么都一样,此时根据接收的BPDU已经不能区分,此时根据接收该BPDU的端口的端口优先级
和端口ID来判断。
####根端口选举出来后,STP实例已经可以稳定运行#####
3.选择指派端口(每个网段选举一个指派端口,保证该网段有端口转发数据)
先选择指派交换机,选举出指派交换机后,指派交换机和该网段相连的端口就成为指派端口。
指派交换机的选举:
3.1 根路径成本最小
3.2 根路径成本一样,则比较bridge ID
3.3 网桥ID一样则比较,收到的端口优先级和端口ID (PORT ID)
3.4 如果收到的端口优先级和端口ID还是一样则比较,接受端口的 PORT ID
4.所有的非根网桥上都有一个根端口,所有的网段都有指派端口,就可以保证STP的实例,也可以保证所有的网段都能有端口转发。
剩下的所有端口都是冗余的有可能产生环路的端口,所以剩下的所有端口的角色称为 non_design 端口
规律:i:根网桥上的所有端口都是指派端口,根网桥没有根端口
ii:根端口的对面是指派端口。
iii:非根网桥从根端口收到BPDU后,从所有的非边缘指派端口发送出去。
选举端口角色什么时候进行,

什么时候结束。
【端口角色】:
root port :
design port :
non_design port :
【端口状态】:
down|disable : 该接口网络连接断开,H3C设备的话表示该端口没有开启STP。该端口不参与到STP实例中。
listenning: 监听状态,该状态下STP的端口进行选举(角色没有最终确定)。该状态下的端口不能转发数据,也不能学习MAC地址表。
learning : 学习状态,该状态下STP的端口角色已经确定,该状态下端口不能转发数据。但是能够学习MAC地址表。(平滑过度到转发)
forwarding : 转发状态,可以转发数据也可以学习MAC地址表 【稳定状态】
blocking : 阻塞状态,不能转发数据也不能学习MAC地址表,能够监听收到的BPDU。【稳定状态】
【root port和design port最终过度到forwarding状态,non_design端口最终过度到blocking。】

【STP的计时器】 控制各端口状态的切换。
hello:2s,规定了根网桥每个多少秒发送configure BPDU
forward delay:转发延迟,规定了从监听到学习丛学习到转发需要经历的时间。
max age : 老化时间(最大年龄),规定了根端口/非指派端口在多少秒内没有收到指定的BPDU重新过度到listenning的时间。

【cisco不支持STP/RSTP,支持PVST】
per-vlan spanning-tree 每VLAN的生成树。针对每个vlan运行一个生成树的实例。保证负载平衡。
cisco如何实现区分不同的vlan实例。
利用网桥优先级:16bit的数值:
如果是stp中16bit都表示是优先级。
如果是PVST此时其中的后12bit用来表示vlan的实例号

| priority | vlan instance ID |
| 4bit | 12bit |
| 1000 | 000000000001 | 1000000000000000 = 32768
| 0001 | 000000000001 |



eg:如果是vlan 1 实例的PVST 此时优先级缺省为 32768+1 = 32769
所以在PVST的配置中修改优先级只能修改前4bit ,后12bit 不能动。

PVST配置:

SW1:
spanning-tree vlan 1 priority 0
spanngin-tree vlan 2 priority 4096

SW2:
spanning-tree vlan 1 priority 4096
spanngin-tree vlan 2 priority 0
【cisco 针对PVST的优化】

本帖隐藏的内容需要回复才可以浏览
1.portfast : 针对连接主机的端口,该端口不可能收到BPDU,也不需要向外发送BPDU,该端口的角色必然是指派端口。
在接入层交换机上所有连接终端的端口都可以配置portfast特性,该端口不需要经过 监听 学习 直

接进入转发。
如果一个portfast端口收到BPDU,此时会放弃portfast身份,此时立即进入listening重新选举。
switchport mode access
spanning-tree port-fast
2.uplink-fast: 能够使得上行链路快速收敛(备份根端口)
当一个交换机配置上uplink-fast特性,该交换机的优先级立即从32768增加到49152。将所有的端口成本增加3000,
这两个特性使得一定程度上本交换机不能成为根网桥,本交换机上可能拥有一个非指派端口。
效果:如果本交换机上的根端口丢失,此时非指派端口立即成为根端口并进入转发。
(config)#spanning-tree uplinkfast
3.backbone-fast
uplinkfast可以针对本交换机上的根端口做一个快速恢复,但是如果不是本交换机上上根端口失效就没用了。
此时可以利用backbonefast 特性达到快速收敛。
启用该特性后,如果从non_design端口收到次级的BPDU(从这点可以判断出对方的根端口丢失)
此时收到这样的次级BPDU后,会本交换机的根端口发出RLQ(根链路查询),该报文会被后续的交换机也从根端口发送出去。
最终到达根网桥,如果根网桥收到RLQ会给出RLQ响应。如果本交换机收到RLQ响应(说明当前的根网桥还在)此时立即将
端口从BLK进入到监听。
【STP/PVST 中的拓扑变更机制】 尽快的让所有交换机重新学习MAC地址表。
拓扑变更发起的条件:
1.当非portfast端口从 listen learnning forwarding 转变成 blocking的时候。
2.当非portfast端口从 blocking 转变成forwarding
【满足拓扑变更条件后:】
i:发生拓扑变更的交换机会主动发出 TCN BPDU ,该BPDU会从根端口向外发送
ii:上游交换机收到TCN BPDU后,主动回复一个 TCA 位置被置一的 configure BPDU(收到了TCN),
iii:下游交换机收到TC 置一的 configure BPDU ,此时停止发送TCN BPDU。
iv:以上过程会持续到根网桥
v:根网桥收到下游发来的TCN,回复TCA,并将自己的MAC地址表的老化时间变为forward-delay。
并且后续产生的configure BPDU中TC位置置一,并从所有的指派端口向外发送(持续时间为MAX AGE+forward-delay)
vi:收到TC位置置一的 configure BPDU 交换机会将MAC地址表的老化时间修改为forward-delay。


PVST 缺省只能支持中继链路为ISL封装的。 PVST+ 中继链路可以支持802.1q封装。
---------------------------------------------------------

-----------------------------------------------------------


STP/PVST/PVST+的不足:
1.STP并没有细致的区分端口状态和端口角色
listening learning 和block 没有区别。
2.STP算法是被动的算法,对网络是否达到收敛没有一种反馈机制,也没有主动收敛的机制。
对于拓扑变化的基本方法是从根桥下发TC BPDU,修改MAC地址表的老化时间,自动学习,确立新路径
3.STP算法要求要求在稳定的拓扑中,根网桥主动发出BPDU而其他交换机进行中继,根网桥丢失的响应较慢

rapid-PSVT/RSTP的增强等性:
1)端口的状态更加清晰:
blocking listenning learning forwarding --> PVST
discarding learning forwarding --> rapid-PVST
2) 新增两个端口角色
替代端口(alternative):替代根端口(类似PVST中的uplinkfast)
如果该端口是因为收到其他交换机发来的BPDU导致自己discarding。
如果本交换机上的根端口丢失,此时替代端口直接成为根端口,并进入转发。
备份端口(backup):
如果该端口是因为收到本交换机的发来的BPDU导致本端口discarding。
如果该网段上的指派端口丢失,本端口立即成为指派端口,并进入forwarding。
3)新增边缘端口特性(cisco设备上和PVST类似) 配置命令还是 spanning-tree portfast
4)能够区分链路类型
i:p2p 该接口连接的网段只有对端一个交换机 (接口的双工模式是全双工)
ii:share 该接口连接的网段有多个对端交换机。(接口的双工模式是半双工)
5)在配置BPDU中的flag字段新增含义:
0 0 0 0 0 0 0 0
TCA agreement [端口状态] [端口角色] proposal TC
[端口状态]: 1 0 -> forwarding
0 1 -> learning
[端口角色]: 0 0 -> 未使用
0 1 -> 备份/替代端口
1 0 -> 根端口
1 1 -> 指派端口
6)RSTP中针对BPDU发送的改变。
在PVST中BPDU只有根网桥能够发送,这样导致收敛较慢,不能直观的发现直连链路的故障。
在rapid-PVST中稳定状态。所有非边缘指派端口都主动发送configure BPDU(时间为hello时间),
如果对端的根端口/备份/替代端口,在3个hello时间没有收到BPDU在,此时立即进入discarding(重新选举)
7)rapid-PVST中有几个快速收敛的特性:
i:备份端口
ii:

替代端口
iii:[P/A机制] proposal -- agreement : 使得 指派端口----根端口 快速收敛。
步骤:
1.跟网桥选举后,从所有的非边缘指派端口发送 proposal 位置一的configure BPDU 。
2.下游交换机收到根网桥发来的带有proposal 配置BPDU,检查是否是指定端口发来的,并且本端口是根端口。
(如果本端口是备份/替代端口此时不会响应)
3.此时收到此类BPDU的交换机立即将其他端口同步(SYNC)
(SYNC):满足同步条件的端口
i:端口状态为discarding
ii:端口为边缘端口!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.当所有其他端口都满足 SYNC条件后,本交换机从根端口向外发送 agreement 置一的 configure BPDU,一但发出
该报文,本端口立即过度到转发。
5.上游交换机从指派端口收到 agreement 置一的 configure BPDU ,本端口也立即进入转发。
6.该过程可以向下传递。
8)RSTP 针对拓扑变化的优化
i:检测拓扑变化只有一个标准,【一个非edge端口迁移到forwarding状态】
ii:检测到拓扑变化采用如下措施:
为本交换机的所有非边缘指定端口和根端口启动一个 TC while timer,时间为hello的两倍。
在此时间内,清空这些端口上学来的MAC地址,同时从这些端口向外发送TC BPDU,直到TC while 超时
其他交换机收到 TC BPDU,清空所有端口学来的MAC地址(除了收到TC BPDU的端口)
然后也为所有自己的非边缘指派端口和自己的根端口启动TC while,重复以上过程。
9) RSTP 在状态为discarding的端口收到次级BPDU,此时回送一个自己认为最优的BDPU,并将端口角色直接转变为
指派端口,并进入转发。

----------------------------------------MSTP部分---------------------------------------------------

IEEE 802.1D ---> STP
IEEE 802.1W ---> RSTP
IEEE 802.1S ---> MSTP

cisco 设备能支持的STP类型是(PVST/PVST+,Rapid-PVST,MSTP)
H3C,JUNIPER等设备支持的STP类型(STP,RSTP,MSTP)

MSTP的优点:
1.多厂家的兼容性
2.在多vlan环境下,生成树的计算更加有效率
3.兼容 802.1D 802.1W
4.有区域的概念。

MSTP region的概念:
MSTP region 的组成条件:
1.相同的name
2.相同的revision number
3.相同的实例ID -- VLAN ID的映射关系
如果对方运行的不是MSTP,此时对方和本网桥也不在

同一个区域
MSTP 的度量值计算:
2的10此方/接口带宽 Kbps
eg :
100M接口=20000000000/100000 = 200000

MSTP 多个region之间的操作:

1.CIST 公共内部生成树,跨越所有的区域和所有的运行STP的交换机。
CIST是由两部分构成:
i:CST common spanning tree:将所有的region抽象成一个交换机。
CST树的构建:
1)首先选取CST根,网络中的所有交换机相互转发和比较根root ID字段的信息(利用instance 0的MSTP BPDU)
,选举最小的成为CST 总根。
2) 总根所在区域就称为 root region。
3)每个区域和外部区域相连的端口被认为是 bounder Port,该端口会被选举出root port, design port, alternate port。
(选举的过程类似STP)
4)从 region 发出的所有BPDU,bounder port发出的时候都会将内部成本删除

ii:IST
作用:是将region之间的CST树的信息通过IST树穿过本region 到他其他region,
1)选举IST region root ,判断本region中距离root region最进的交换机,该交换机成为region root。
2)该交换机上的bounder port成为根端口,如果有多个bounder port,此时比较对端的网桥ID。。。。
3)此时从本region 的其他 bounder port 中选举出 design port ,alternate端口。

2.MSTI 多生成树实例。从instance 0 开始 针对每个instance ID 计算的在region内的树

相关主题
文本预览
相关文档 最新文档