1、环路
环路会导致MAC地址表翻摆、广播风暴、多帧复制等现象。环路却能提高网络连接的可靠性。
为了得到环路带来的好处,同时避免因环路产生的灾难性问题,IEEE802.1D中定义了STP(Spanning Tree Protocol)协议。
STP术语:
桥(Bridge)
网桥,泛指具有任意多端口的交换机。
桥的MAC地址(Bridge MAC Address)
通常我们把端口编号最小的端口MAC地址作为整个桥的MAC地址。
桥ID(Bridge Identifier,BID)
BID由两部分组成,桥优先级可以手动设定,缺省值为0x8000(32768)
BID | |||||||
字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 | 字节8 |
桥优先级 | 桥的MAC地址 |
端口ID(Port Identifier,PID)
不同设备商采用的PID定义方法可能不同。以下为其中两种定义:
定义一:端口ID由2个字节组成,第1个字节为端口优先级,第2个字节为端口编号。
定义二:前4个比特是端口优先级,后12比特为端口编号。
端口优先级的值是可以手动设定的。
2、STP树的生成
STP协议的基本原理:在一个具有物理环路的交换网络中,交换机通过运行STP协议,自动生成一个没有环路的工作拓扑。该拓扑也称为STP树,树节点为某些特定的交换机,树枝为某些特定的链路。一棵STP树包含了唯一的一个根节点,任何一个节点到根节点的工作路径是唯一且最优的。
STP树的生成过程:选举根桥(Root Bridge)、确定根端口(Root Port,RP)和指定端口(Designated Port,DP)、阻塞备用端口(Alternate Port,AP)。
2.1选举根桥
根桥是STP 树的根节点。要生成一棵STP树,首先要确定一个根桥。根桥是整个交换网络的逻辑中心,当网络拓扑发生变化时,根桥也可能会发生变化。
运行STP协议的交换机会相互交换STP协议帧,这些帧的载荷数据被称为BPDU(Bridge Protocol Data Unit,网桥协议数据单元)。BPDU的产生着、接收者、处理者都是STP交换机本身,而非终端交换机。BPDU中包含了与STP协议相关的所有信息。
STP交换机启动之后,都会认为自己是根桥,并在发送给别的交换机的BPDU中宣告自己是根桥。当交换机收到从其他设备发送过来的BPDU时,会比较BPDU中指定的根桥BID和自己的BID。交换机不断交互BPDU、比较BID,直到最终选举出一台BID最小的交换机作为根桥。
2.2确定根端口
根桥确定后,其他没有成为根桥的交换机称为非根桥。一台非根桥设备上最多只能有一个根端口。
STP协议把根路径开销作为确定根端口的重要依据。一个运行STP协议的网络中,我们将某个交换机的端口到根桥的累计路径开销称为这个端口的根路径开销(Root Path Cost,RPC)。链路的路径开销(Path Cost)与端口速率有关,端口速率越大,路径开销越小。
端口速率 | 路径开销(IEEE802.1t) |
10Mbit/s | 2000000 |
100Mbit/s | 200000 |
1Gbit/s | 20000 |
10Gbit/s | 2000 |
2.3确定指定端口
当一个网段有两条或两条以上的路径通往根桥时,与该网段相连的交换机就必须确定一个唯一的指定端口。
指定端口也是通过比较RPC来确定的,RPC较小的端口成为指定端口。如果RPC相同,则比较BID,BID小的作为指定端口;如果BID相等,则比较PID,PID小的作为指定端口。
注意:根桥上不存在任何根端口,只存在指定端口。
2.4阻塞备用端口
在确定了根端口和指定端口后,交换机上所有剩余的非根端口和非指定端口统称为备用端口。STP会对这些备用端口进行逻辑阻塞。逻辑阻塞是指这些备用端口不能转发由终端交换机产生并发送的帧,这些帧也被称为用户数据帧。不过,备用端口可以接收并处理STP协议帧。根端口和指定端口既可以发送和接收STP协议帧,也可以转发用户数据帧。
一旦备用端口被逻辑阻塞后,STP树的生成过程便完成了。
3、STP报文格式
STP交换机通过交换STP协议帧来建立和维护STP树,并在网络的物理拓扑发生变化时重建新的STP树。
STP协议帧由STP交换机产生、发送、接收、处理。STP协议帧是一种组播帧,组播地址为01-80-c2-00-00-00
STP协议帧采用了IEEE802.3封装格式,其载荷数据被称为BPDU。BPDU有两种类型:Configuration BPDU 和 TCN(Topology Change Notification) BPDU。
3.1 Configuration BPDU
在初始形成STP树的过程中,各STP交换机都会周期性地主动产生并发送Configuration BPDU。在STP树形成后的稳定期,只有根桥才会周期性地(缺省为2s)主动产生并发送Configuration BPDU,并立即被触发而产生自己的Configuration BPDU,且从自己的指定端口发送出去。这一过程看起来就像是根桥发出的Configuration BPDU逐跳地“经过”了其他的交换机。
字段 | 字节数 | 简单说明 |
Protocol Identifier | 2 | 总是为0x0000 |
Protocol Version Identifier | 1 | 总是为0x00 |
BPDU Type | 1 | BPDU类型: 0x00:Configuration BPDU;0x80:TCN BPDU |
Flags | 1 | 网络拓扑变化标志:仅使用了最低位和最高位。最低位为TC(Topology Change)标志;最高位为TCA(TC Acknowledgment)标志 |
Root Identifier | 8 | 当前根桥的BID |
Root Path Cost | 4 | 发送该BPDU的端口的RPC |
Bridge Identifier | 8 | 发送该BPDU的交换机的BID |
Port Identifier | 2 | 发送该BPDU的端口的PID |
Message Age | 2 | 该BPDU消息的年龄。如果Configuration BPDU是根桥发出的,则Message Age为0.否则,Message Age是从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。在实际的实现中,Configuration BPDU每“经过”一个桥,Message Age增加1 |
Max Age | 2 | BPDU的最大生命周期,缺省为2s |
Hello Time | 2 | 根桥发送Configuration BPDU的周期,也相应地成为了其他交换机发送Configuration BPDU的周期,缺省为2s |
Forward Delay | 2 | 控制端口Listening和Learning状态的持续时间,缺省为15s |
3.2 TCN BPDU
TCN BPDU 有三个字段:协议标识、版本号和类型,其中类型字段的值为:0x80.
如果网络中某条链路发生了故障,位于故障点的交换机感知后会以Hello Time为周期不断地向上游交换机发送TCN BPDU,直到接收到上游交换机发来的TCA标志置1的Configuration BPDU。同时上游交换机也会向上游交换机发送TCN BPDU,直到根交换机接收到TCN BPDU。根交换机接收到TCN BPDU 后,会发送TC标志置1 的Configuration BPDU ,通告所有交换机网络拓扑发生了变化。
3.3 STP端口状态
STP的5种端口状态
端口状态 | 说明 |
Disabled | 无法发送和接收任何帧,端口处于关闭状态 |
Blocking | 只能接收STP协议帧,不能发送STP协议帧,不能转发用户数据帧 |
Listening | 可以发送和接收STP协议帧,但不能进行MAC地址学习,也不能转发用户数据帧 |
Learning | 可以发送和接收STP协议帧,能进行MAC地址学习,不能转发用户数据帧 |
Forwarding | 可以发送和接收STP协议帧,能进行MAC地址学习,能转发用户数据帧 |
3.4 RSTP
RSTP三种端口状态:Discarding、Learning、Forwarding。
在RSTP计算时,端口成为根端口或指定端口后,端口会首先进入Discarding状态,然后采用P/A机制主动与对端端口进行协商,通过协商并进行相关动作后,就会立即进入Forwarding状态。