●
802.1d STP
(生成树协议)的作用:在交换机间防止环路发生。
STP
通过阻塞某些接口来实现。
●
STP
的实现过程,三步:
1
)选举根交换机:最小
bridge ID
的交换机胜出(标准
bridge ID
指
MAC
地址
+2
字节优先权值)
2
)确定每个交换机的根端口:每台交换机上到根交换机路径开销最小的端口
3
)为每个段确定指定端口(
Designated Port
):当多台交换机连入同一段时,那个转发
Hello
消息开销最小的交换机端口
●
详解
STP
第一步
只有一台根交换机。其选举过程如下:每个交换机最初发送
STP Hello BPDU
(
bridge protocol data unit
)消息来参与竞选。如果一个交换机收到优先级更高的
Hello
(更小的
bridge ID
),它就停止自发送
Hello
以退出竞选,相反,它会转发更高优先级的
Hello
。最终,只剩下一台交换机还在发送
Hello
――它就是最后的胜出者。
初始的
IEEE 802.1d bridge ID
包含两个字段:
1
)
2
字节的
Priority
字段,可进行配置以影响
STP
选举过程
2
)
6
字节
MAC
地址,因为该字段是唯一的,就保证了最终有一台交换机在选举中能胜出。
●
详解
STP
第二步
1
)每隔
Hello
定时器时间(默认为
2
秒),根交换机创建并发送
Hello
消息。
2
)每台交换机接收到
Hello
消息后,先更新
Hello
中的如下字段:开销,转发交换机的
bridge ID
,转发端口的优先级和转发端口号,然后再转发出去。
3
)交换机不在稳定为阻塞状态的端口上转发
Hello
。
4
)在交换机接收到
Hello
的所有端口中,到根交换机开销(
Hello
消息中的开销值
+
交换机
STP
端口开销值)最小的端口就是根端口。
IEEE 802.1d
所规定的默认端口开销:
1
)
10Mbps
接口:
100
2
)
100Mbps
接口:
19
3
)
1Gbps
接口:
4
4
)
10Gbps
接口:
2
如果计算出的开销值有相等的情形,采用如下仲裁机制:
1
)选择转发交换机
bridge ID
最小的
2
)选择邻接交换机中端口优先值最小的
3
)选择
Hello
中列出的内部端口号最小的
●
详解
STP
第三步
会聚的
STP
拓扑只有一台交换机转发到每个
LAN
段,该交换机称为该段的指定交换机(
designated switch
),而用于转发到该段的端口称为指定端口。
指定端口是向该段发送含最小广告开销的
Hello
消息的端口。如果开销相等,仲裁机制与上同。
●
收敛到新的
STP
拓扑
当
STP
有稳定拓扑时:
1
)根交换机基于
Hello
定时器周期性地生成
Hello
。
2
)每台非根交换机(基于
Hello
定时器)周期性在其根端口上接收根交换机的
Hello
消息。
3
)每台交换机更新
Hello
消息并在其指定端口上转发出去。
4
)对于每个阻塞端口,交换机周期性地由指定端口接收
Hello
消息(在阻塞端口上不再转发)。
如果网络拓扑发生变化,
STP
会重新收敛。如果根交换机失效,在最大时间定时器(默认为
20
秒)超时后,交换机会选举新的根交换机。
当
STP
重收敛发生时,有些
CAM
(
Content Addressable Memory
)记录会变成无效。为了更新
CAM
,可以考虑:
1
)通知所有交换机
CAM
记录超时失效
2
)每台交换机使用更短的定时器(与
Forward Delay timer
相等,默认为
15
秒)来使
CAM
记录超时失效。
因为有些交换机察觉不到
STP
拓扑的改变,所以其他察觉出变化的交换机有责任通知它们。为此,交换机可以用
TCN
(
Topology Change Notification
)
BPDU
通知根交换机,然后根交换机通知其余交换机。
●
由阻塞状态转换到转发状态
当
STP
重收敛时,原来处于阻塞状态的端口可能转换为根端口或指定端口,此时端口处于转发状态。不过这个过程不是立即发生的,为了避免引起环路,这个转换过程一般如下:先将变化之前的阻塞状态的端口置于监听状态,然后再到学习状态(每个状态延续时间由转发延迟定时器决定(默认为
15
秒)),最后再转换。
802.1d STP
接口状态表:
状态
|
是否转发帧?
|
是否学习接收到的帧的源
MAC
地址?
|
暂时还是稳定状态?
|
阻塞
|
否
|
否
|
稳定
|
监听
|
否
|
否
|
暂时
|
学习
|
否
|
是
|
暂时
|
转发
|
是
|
是
|
稳定
|
屏蔽
|
否
|
否
|
稳定
|
●
为什么引入
Per-VLAN
生成树?
在
STP
应用中,我们会碰到这样一种情形:如果一个
STP
实例用于带冗余链接且含有多个
VLAN
的交换网络,那么有些端口就会处于阻塞状态,在稳定状态下也无法使用,而实际这些冗余链接是备份流量所必需的。
Cisco
的
Per VLAN
增值生成树(
PVST+
)功能可以对每个
VLAN
创建一个
STP
实例。这样,每个
STP
实例可以使用不同的根交换机,阻塞不同的接口,那么流量负载就能够在现有链接上得到均衡。
●
需要注意的是,
802.1Q
本身不支持
PVST+
,但是
Cisco
交换机可以支持
PVST over 802.1 trunk
。现在所有
Cisco
交换机默认都设置
PVST+
。