$ _( O, S7 k/ y3 X# C2 _ `
一、基础
; ]& e0 N- v( OSTP(spanning tree protocol)生成树协议,用于消除数据链路层环路的协议,仅在网络中存在冗余链路或者存在环形网络结构(封闭的物理环路)时才采用。
- c$ F+ c7 p9 K1 s; U通常在网络中关键设备使用冗余链路、多条等价链路、接入环网等时采用。生成树在保证冗余链路的同时,又可确保不会出现二层环路。
$ _' `. o) v- P3 U( M" Q) ~运行生成树协议的设备彼此交换信息发现网络中的环路,并有选择的对某个端口进行阻塞,最终将环形网络结构修剪成树形网络结构,防止报文在网络中不断循环;在网络发生故障时,生成树能快速发现故障并尽快找出另一条路径进行数据传输。
) l% ~9 F+ A1 N/ q( l如果在环形网络中不启用生成树协议会产生:1、广播风暴导致网络不可用;2、MAC地址表震荡导致MAC地址表项被破坏。+ M) j( e. e- g3 }) D; k& i$ q6 ^1 b
二、基本概念4 e# V3 m% [1 ~( c( r& T7 X
1、根桥6 |: v) b% I! `7 E1 _) G& |: _) A/ C
全网中只有一个,具有最小桥ID(BID)的桥(可以当作一台交换机来看待),其他的统称为非根桥。根桥(root bridge RB)是整个网络逻辑中心,一般将环网中性能最好的设备设置为根桥。网络收敛后,根桥间隔一定时间向外发送配置BPDU。4 \9 E9 |: v6 N- w7 o i! }
2、两种度量
* v2 t4 X+ L9 s" y1、ID
6 W8 [! R& ?$ @* L) k/ T( k2 AID有BID(bridge ID,桥ID)和PID(port ID,端口ID)之分
+ B6 I4 K7 G& c1 m; ABID:, M+ s. |) o! w( ?
BID决定哪台交换机成为网络中的根桥,在STP中规定BID最小的交换机被选举为根桥。! I9 Q5 y4 S5 ?: q" G1 g
BID由高16位桥优先级(bridge priority)和低48位桥背板MAC地址组成,是一个用户可以设定的参数,设定的值越小,越能成为根桥。各交换机只有桥优先级相同时才比较背板MAC。. q) L% U& {$ ^! |
PID:0 y+ p5 O7 F1 Q, G3 M/ ^# R% |( ~
用于在有些情况下选择指定端口。3 A! l& x: }3 m3 Y
在选择指定端口时,只有在端口的根路径开销和发送BPDU交换机的BID都相同的情况下才会比较端口PID,PID小者为指定端口。
6 E% w9 ?4 v" B% I2、路径开销* E( e9 ?' e' z) w* }
由端口的链路速率决定(聚合链路为UP成员速率之和),stp选择保留带宽最大的链路,阻塞多余的速率小的链路,以便剪成无环网络。在理解STP时一定要理解成一个阻断的环。, m# q+ M8 ?1 ]$ j5 F
在一个运行stp协议的交换网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加值,这个值叫做根路径开销(root path cost)。根桥上所有端口的根路径开销、以及同交换机上不同端口间的路径开销值均为0。
* M: G) D/ t ]( B- O( s2 y/ ]3、三个选举要素( Z) T$ N& Z) }+ V
1、根桥(root bridge RB):
) P" M' ?7 X d6 S% k7 O, N1 H8 ^! a$ J2 gBID最小的设备;每个STP网络中仅有一个。
. F- ]) f- X6 m同一交换机上只能配置为根桥或备份根桥,不能同时配置;在配置STP、RSTP中,建议手动配置根桥和备份根桥。在一棵生成树中,当桥优先级相同时MAC最小的将成为根桥;一棵生成树中可配置多个备份根桥,当根桥故障时,
6 L- c. D3 V5 }' ]+ d( k% [备份根桥中MAC最小的将成为根桥。% r6 S% k6 w" r& A8 }. h# l2 n- B
在配置根桥时,一般选择性能高的设备作为根桥,而性能高的设备不一定优先级高,所以要配置性能高的设备优先级最高(数值最小)。
5 r4 Y3 p# g. _9 S2、根端口(root port RP):1 U+ Q/ I" t8 c- {( e% H- w6 }' |1 G: ?
负责向根桥方向转发数据,是非根桥交换机离根桥交换机最近的端口,即当前桥(可以当成一台交换机设备)设备上去往根路径开销(root pathcost RPC)最小的端口。
9 `) D) {8 T, W: R9 f5 R在一个stp网络中,根端口只有一个,且根桥上没有根端口。. a# r `% `" K# [( m9 \9 r: c
当多个端口根路径开销相同时,先比较指定桥(见后面)ID(最小的会成为根端口),指定桥ID相同则比较指定桥上的端口ID(port ID最小的成为根端口)。5 Y/ A: N7 {: q: h
端口路径开销由路径开销计算方法决定;当确定路径开销方法后,端口的速率越大,其开销值越小(越能成为根端口)。
$ f) V0 N! ?; D2 Z% F* y 默认端口速率与端口开销值$ l. m" b3 i9 Y
3、指定端口(designated port)
8 G1 L! d# `5 F指定端口与指定桥息息相关,但不是一一对应,具体如下:1 a$ { e5 v+ P1 a
指定端口与根端口相对,也可理解为与下游设备最近,唯一可以接收下游设备数据的端口。根桥上的所有端口都是指定端口(除根桥有环路)。
% g+ X7 b% O- l; L0 C. K8 k1 `% W对于一台设备:
' @1 c9 ?+ Y; S4 C: Z& i. l" P5 v与本设备直接相连且向本设备直接转发配置消息的其它设备就是指定桥,指定桥中向本设备转发配置消息的端口就是指定端口。' S8 x: f# }! O
对于一个局域网:
b/ Q+ J6 A8 A' R' Z+ n8 c向本网段转发配置消息的设备就是指定桥,指定桥上向本网段转发配置消息的端口时指定端口。
8 Z, h9 O1 ]8 b0 ~" @1 g. J7 G9 v端口优先级默认为128,当优先级越大(数值越小)越容易选举为指定端口;在选择指定端口时,两个端口的根路径开销和发送BPDU交换机的BID相同时,PID小的端口为指定端口。
# \( w5 \" S7 f: F/ }6 H一旦根桥、根端口、指定端口选举成功,则整个网络树形拓扑建立完成,在拓扑稳定后,只有根端口与指定端口转发流量,其他非根、非指定端口处于阻塞(blocking)状态。
" K: Y( r% r$ u- p4、四个比较原则
! s9 o4 U9 I6 L4 h) Y' ?" s% o1、最小BID:
3 Z8 K8 o6 v& T& W用来选举根桥。
8 Y7 v, c1 ^8 j4 g5 j9 xBid中桥优先级(数值越小)最高将成为根桥,桥优先级相同则比较MAC地址,MAC地址最小的成为根桥。) G/ A) D" G a8 i, _
2、根路径开销:
; X# y5 V. _8 w' c用来选举根端口。
* |. e1 Y# R4 o K& b; T当前设备到达根桥设备总路径开销值最小的端口选为根端口。
3 H7 y8 ^9 [( D- `3、最小发送者BID:" I. V& A! F( [. C7 V
用来在非根桥之间选举指定桥和根端口。
7 l4 T" X4 k4 L* c: o- x如果两个以上根路径开销相等,则选择对方发送BPDU中BID最小的那个作为自己的指定桥,接收该BPDU的端口作为自己的根端口
. ?, m1 e( X+ L9 r7 ^' }4、最小PID:
4 D" g+ p& S S6 C2 W0 h; d! u用来选举指定端口。6 f: f0 t" u* k9 K5 b
在根路径开销相同的情况下,阻塞PID值最大的端口,PID值最小的成为指定端口。% j! l9 A* ?, e: \) F2 G; H9 C
5、五种状态" w2 Z6 Q b; z K, S4 g5 p
1、Forwarding(转发状态):
7 ]' B% p$ b' S3 C8 v# h只有根端口或指定端口才能进入转发状态(转发用户流量和BPDU报文)。
3 o3 t) U( s3 ^8 W9 z3 r, F2、Learning (学习状态):, l8 Y2 ~) i& U! S* a5 c2 A
根据收到的用户流量创建MAC地址表,不转发流量,是一种过渡状态,是为了防止临时二层环路。+ j) c1 S+ v: z' y K. g6 g: O
3、listening (监听状态):
8 t' p& ]3 Q7 X正在确定端口角色,选出根桥、根端口、指定端口。
. d2 I; J" E1 [4、Blocking (阻塞状态):+ ~1 u, B- ]2 Y! P3 t
此时端口仅接收并处理BPDU报文,不转发用户流量。
. A( q: a! X0 q4 f& ~0 z5、Disabled (禁用状态):- G8 i U: I+ {8 W6 Y
此时端口不能转发BPDU报文,也不用转发流量。
+ q5 l5 U- K* i% Q5 N0 U* v$ @" Y6 W4、STP的三个定时器
8 j% i6 `0 c# k3 V1、Hello time(hello定时器):2 k( J. b9 Z* X' m9 N ?* l
发送配置BPDU的时间间隔。主要是确认链路是否存在故障。
4 g; G; r* d' w7 m) R- I2 |- D当网络拓扑稳定后,该定时器的修改只有在根桥修改后才会生效。根桥会在发出的BPDU报文中填充适当的字段向其它非跟前通知定时器修改的信息。
) r% c' g/ f% f" H7 b 2、forward delay(转发延时):( e2 l6 u% w( U/ @2 A
设备进行状态变更的延迟时间,即端口处于listening和learning状态各自持续时间(默认各自15S)。当出现链路7 m3 R2 N& W! [5 ^; e2 x
故障后,新选举出的根端口和指定端口要等待2倍的forward delay后才进入转发状态,以避免环路的产生。1 p8 v+ _7 `8 k$ m; O
3、Max age(最大生存时间):0 q( c9 e9 }5 H5 y3 X
指端口BPDU报文老化时间。可在根桥上设置。% V1 ~: n) R- ?9 ~3 ]
在stp网络中非根桥设备收到配置BPDU报文后,会对报文中的message age (消息生存时间)和max age 进行4 r, O" p8 H7 H9 b0 y
比较:如果message age 小于max age,则非根桥设备继续转发BPDU报文;如果message age大于max age,则BPDU
$ \9 y+ W: l# ^- K( S, A5 u报文老化,非根桥设备认为网络直径过大,直接丢弃该BPDU,导致根桥连接失败。
( P2 j% @7 Y r7 g3 [ 实际实现中,配置BPDU报文每经过一个桥,message age 增加1。
' r" Q+ C% z* `0 k# T5、STP BPDU报文
; k1 e) ]) A* V% \STP采用的是BPDU(bridge protocol data unit 桥协议数据单元)类型报文,也称配置消息。Stp通过在设备之间传& \# r5 t$ y5 T: E" T# B# ~
递BPDU来确定最终修剪完成的网络拓扑结构。
+ h- f; s# B* z& [( _. qSTP BPDU报文分为两大类:
! {6 r& J! z# E$ N' O1、配置BPDU(configuration BPDU):
- f! F; I' v. T5 G$ Y是一种心跳报文:就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”。以确保链接的有效性。& {: `1 k0 P$ M# i
用来进行生成树计算和维护生成树拓扑的报文。当网络拓扑稳稳定后只有根桥发送配置BPDU报文,其它桥在收到上游传来的配置BPDU后才触发发送自己的配置BPDU+ [" a, m' f" z9 V
2、TCN BPDU(topology change notification BPDU 拓扑变化通知BPDU):
+ I0 b- |$ O6 H! O0 B当拓扑结构发生变化时,下游设备用来通知上游设备网络拓扑结构发生变化的报文。
* n, z* z* r: Q" \1 I$ B9 o BPDU优先级:
z0 b2 N( l1 x5 B' C当同一桥收到不同配置的BPDU时,优先级高的BPDU将被采用,其他的被丢弃。) K5 T% n+ c. e7 d( k
6、STP 的不足
7 l- f$ Q% e& T( J) }- T- }, e网络收敛慢:& }- }8 Z3 b/ t& G
任何端口从阻塞到转发状态至少需要两倍转发延时(30S以上);没有细分端口状态和端口角色,端口之间最本质, i+ F3 }. J6 V0 e2 N9 n% K( y8 u0 s
的区别并不在于端口状态,而在于端口扮演的角色;' r6 r! J) W% q
STP采用被动算法,依赖定时器;
7 s) X" ^+ Z" l: K7 H拓扑稳定后,只有根桥发送BPDU报文,其他桥只有被动转发,直到传遍整个网络。 |