5.2 STP概述
CCNP TSHOOT 300-135认证考试指南
OSI参考模型的二层网络可用性不但需要拓扑结构中的交换机之间拥有冗余链路,而且要求网络具备冗余路径,不过这样会带来所谓的二层环路问题(如图5-1所示)。请注意SW1可以通过两条链路向SW2发送流量,反之亦然,因而SW1从某条链路发送给SW2的流量可以通过另一条链路返回SW1,并且无限循环。这是因为二层帧没有任何内嵌机制能够防止网络中出现的环路现象(如图5-1所示的环路1)。此外,图5-1中的SW1、SW2和SW3之间还存在一个更大的环路(环路2),从这些交换机的互连端口发送出来的二层帧也会在网络中产生无限循环。二层帧与三层数据包不同,三层数据包有一个TTL(Time-To-Live,生存时间)字段,如果在有限次数的路由器跳数之后,如果仍未到达目的地,那么将丢弃该数据包。因此,需要利用STP(Spanning Tree Protocol,生成树协议)来防止二层环路。IEEE 802.1D STP允许网络拓扑结构在物理上存在二层环路,但是在策略上阻塞数据流经一个或多个交换端口,以防止产生流量环路。
在检测与排除二层网络故障时,必须理解并掌握STP的工作方式,因而本节将首先回顾STP拓扑结构的动态建立方式,然后再讨论检测与排除STP故障时可能用到的相关命令。
5.2.1 STP操作特性回顾
STP利用BPDU(Bridge Protocol Data Unit,网桥协议数据单元)来构建STP拓扑结构,BPDU包中包含了构建STP拓扑结构所需的端口、地址、优先级以及开销等信息,从而能够确保数据按照期望方式进行传递。默认每两秒钟在交换机之间交换一次BPDU消息,以检测网络拓扑结构中的环路情况。发现环路后,可以在逻辑上阻塞选定的网桥接口并将该接口置入阻塞状态,从而消除网络中存在的环路。
由于二层环路会在网络中产生广播风暴或破坏交换机的MAC地址表,因而需要利用STP来防止网络出现二层环路。STP拓扑结构中的交换机可以分为两类。
关键
根网桥(root bridge):根网桥是一种被选举充当生成树拓扑结构参考点的交换机。BID
(Bridge ID,网桥ID)最低的交换机就会被选举为根网桥。其中,BID由优先级数值(默认为32768)和MAC地址(show version命令的输出结果中显示的交换机基本以太网MAC地址)组成。首先比较优先级,在两台或多台交换机优先级相同的情况下,再比较MAC地址。
非根网桥(non-root bridge):STP拓扑结构中的其他交换机均被称为非根网桥。
图5-2解释了网络中根网桥的选举情况,请注意,由于所有网桥的优先级都是32678(默认值),因而MAC地址最小的交换机(即SW1)被选举为根网桥。MAC地址是从左往右读的,由于MAC地址采用十六进制表示方式,因而从低到高依次为0~9,然后是A~F。
关键
STP的根网桥选举规则为:越小越好,相同则不可接受。
提示:
记住该规则有助于理解根网桥选举过程中的每个步骤。
STP拓扑结构中的交换端口都可以归入表5-2以及图5-3所示的端口类型。
关键
表5-3列出了802.1D STP及其后续标准802.1D-2004 STP规定的不同链路速率的默认端口开销。链路速率越高,开销越小。需要记住的是,开销越小越好,而且最终使用的开销值是路径开销的累积值。
关键
1.确定根端口
了解特定端口成为特定端口角色的原因,对于检测与排除STP拓扑结构故障以及调整STP拓扑结构来说至关重要。图5-3中交换机SW2的根端口是Gi1/0/5,为何该端口会被选定为根端口呢?如果不知道原因,那么可以回顾交换机确定根端口的相关步骤。
第1步. 确定去往根网桥拥有最小累积路径开销的端口。如图5-3所示,SW2 Gi1/0/5到根网桥的总开销为4,SW2 Gi1/0/6到根网桥的总开销为4,SW2 Gi1/0/2到根网桥的总开销为(4+4)=8。请记住“越小越好,相同则不可接受”的选举规则,对于本例来说,存在两个最小开销4,在路径开销相同的情况下,需要使用最小的上游BID作为选择依据,因而继续第2步。
第2步. 确定收到具有较小上游BID的BPDU的SW2端口(Gi1/0/5或Gi1/0/6)。对于本例来说,从SW1收到的BPDU中的BID完全相同。首先检查SW2在端口Gi1/0/5和Gi1/0/6上收到的来自SW1的BPDU的优先级,由于图5-3中的BPDU都是从同一台交换机(SW1)以优先级32768发送出来的,因而这些BPDU的优先级均相同。接下来比较BPDU中的MAC地址,同样,由于交换机通过所有接口发送的所有BPDU都使用相同的基本以太网MAC地址,因而BPDU中的MAC地址也相同。因此,从SW1接收到的两个BPDU都拥有相同的优先级32768以及相同的MAC地址AAAA.AAAA.AAAA。在上游BID相同的情况下,需要使用上游PID作为选择依据,因而继续第3步。
第3步. 确定收到具有较小上游PID的BPDU的端口。SW1发送BPDU的时候会携带PID,PID包含端口优先级号及接口号,虽然可以手工修改优先级号(默认为128),但是无法修改接口号,因为接口号是由交换机生成的,其作用是识别交换端口。从图5-3可以看出,SW1的Gi1/0/5和Gi1/0/6的默认PID很可能分别为128.5和128.6,因而SW2收到SW1发送的BPDU时,在Gi1/0/5和Gi1/0/6上收到的BPDU的PID分别为128.5和128.6。由于PID越小越好,因而根据SW1发送的BPDU中的PID值,将SW2 Gi1/0/5选定为根端口。
对于图5-3中的SW3来说,由于从Gi0/1到根网桥的总开销为4,从Gi0/2到根网桥的总开销为8,因而Gi0/1被选为根端口。
2.确定指派端口
关键
确定每个网段的指派端口时,需要遵循上一节根端口选举过程中的相同步骤。需要记住的是,根网桥上的所有端口都是指派端口,因而无需任何计算即可知道拓扑结构中的这些指派端口。对于图5-3来说,没有指派端口的链路/网段只剩下SW2与SW3之间的网段了。从图中可以看出,已经将SW2上的Gi1/0/2标识为指派端口,原因何在呢?下面就来详细分析一下指派端口的确定步骤。
第1步. 确定去往根网桥拥有最小累积开销的网段。SW2 Gi1/0/2的累积开销(包括该网段本身的开销)为(4+4)=8,SW3 Gi0/2的的累积开销(包括该网段本身的开销)为(4+4)=8,由于开销相同,因而需要继续第2步。
第2步. 确定具有最小BID的上游交换机。如果不知道该怎么解决这个棘手的问题,那么这里有一个绝招。假设自己正站在SW2与SW3之间的网段中间,指着SW2,优先级是什么?是32768。指着SW3,优先级是什么?是32768。因而优先级相同。接下来需要查看MAC地址,仍然站在网段中间,指着SW2,MAC地址是什么?是BBBB.BBBB.BBBB。指着SW3,MAC地址是什么?是CCCC.CCCC.
CCCC。那么哪个MAC地址较小呢?当然是SW2的MAC地址较小。
因此,SW2的端口Gi1/0/2被选为SW2与SW3之间网段的指派端口。
3.确定非指派端口
除了根端口及指派端口之外,其余端口均为非指派端口,非指派端口将阻塞流量(如图5-3所示)。虽然非指派端口在正常情况下并不转发流量,但仍然接收BPDU以确定STP拓扑结构的状态。如果拓扑结构中的链路出现故障,那么非指派端口就可以通过BPDU间接检测到故障行为,并确定是否需要切换到转发状态,从而在防止网络环路的同时确保网络的可用性。
如果非指派端口需要切换到转发状态,那么将由在用的STP类型来确定非指派端口切换到转发状态所需的时间。STP(802.1D)、CST(Common Spanning Tree,公共生成树)以及Cisco专有STP实现(PVST+)的切换过程需要经历如下状态。
关键
阻塞状态:非指派端口在切换状态之前始终处于阻塞状态,如果非指派端口需要切换状态,那么默认会保持阻塞状态20秒钟,这段时间称为最大老化(max age)时间,实质上就是BPDU的生存时间。BPDU仅在20秒钟内有效,如果在最大老化时间超时后仍未收到新的BPDU,那么交换机就认为BPDU失效并切换到侦听状态。非指派端口处于阻塞状态时会评估BPDU,以尝试确定其在生成树中的角色。
侦听状态:端口从阻塞状态进入侦听状态后默认会在侦听状态维持15秒钟,这段时间称为转发时延(forward delay)。端口会在这段时间内发起BPDU,将本端口希望转发数据的意图告诉邻接交换机。此外,端口还会收到其他交换机发送的BPDU,这些BPDU将有助于构建STP拓扑结构并确定根端口和指派端口。
学习状态:端口从侦听状态进入学习状态后默认会在学习状态维持15秒钟,端口在这段时间内开始向MAC地址表添加表项,同时仍然发送和接收BPDU,以确保与STP拓扑结构相关决策的精确性。
转发状态:端口从学习状态进入转发状态并开始转发数据帧,同时还要学习MAC地址并发送和接收BPDU。根端口和指派端口都位于该状态。
从上述状态切换过程可以看出,从阻塞状态切换到转发状态需要50秒钟(802.1D)。
与STP使用定时器不同,快速生成树协议(802.1w)和多生成树协议(802.1s)使用握手机制作为主要收敛方法,因而收敛速度可以达到5秒钟甚至更快。如果握手机制失败,那么802.1w和802.1s将使用与802.1D相同的定时器作为备用收敛机制。此外,如果邻居交换机使用802.1D,那么为了保持后向兼容,需要与邻居交换机一样也使用定时器机制。