生成树协议之STP 原创:wildlee
为了保证网络的高可用与高可靠,我们经常用到一种“冗余”技术,前两天我们学习了HSRP网关冗余[三层冗余]、链路聚合技术LACP[二层冗余],今天我们讨论另一种二层冗余技术STP。在一个局域网式网络中为二层设备建立多个物理连接来提供链路冗余,这是最初的冗余思想,可是二层交换帧转发机制给这种使用多条物理链路做冗余技术,带来了致命的打击[对未知目标MAC广播式的发送]为何致命?三层路由环路,ip报文TTL控制了报文的生命周期,而二层环路,没有控制二层帧的生命周期的机制,致使报文无限转发,指数级增长,发生这种事对一个网络来说,那将是一场灾难。
STP技术的出现,改变了这种局面,使得这种在二层设备之间多物理连接提供冗余技术得已继续。STP技术核心引用了自然界中树的生长思想,并用其STA算法实现了这种技术。该技术在逻辑上断开导致二层环路的物理连接并使用使用活动的链路转发数据,当活动链路不可用时,激活被逻辑断开的链路。STP协议定义了根交换[RootBrideg]、根端口[RootPort]、指定端口[DesignatedPort]、阻塞端口[Block]、路径开销[PathCost]等概念,用来构造一棵自然树,达到消除环路的目的。STP实现了二层链路备份与链路最优化。
===========================================
提到网段通常有两个概念,一种是指物理上由网络设备相隔离的网络,路由或交换。另一种是根据IP地址中的网络地址来区分所属网段。[物理意义是在一个接口发送一个物理信号可以达到的范围,也称做冲突域;ip网段是一个ip广播可以到达的范围,也称做广播域]
===========================================
STP生成树角色
根桥
在STP生成树计算过程中,其根交换机被最先确定,拥有最低交换机ID的,被选举为根交换机。
===========================================
交换机ID由两个部分组成:交换机的优先级[两个字节]与交换机的MAC地址[六个字节],交换机默认优先级是32768。当优先级一样的情况下,拥有最小MAC地址的交换机被选举为根交换机。
===========================================
根端口
选定根交换机以后,网络中每个非根交换机都要选举一个根端口用来达到根交换机。根端口是在交换机自身的多个端口之间做出选择。非根交换机选择根端口条件
1. 根端口要有最达根交换机最低路径成本。
2. 选择端口接收BPDU报文中发送方交换机ID最小。
3. 选择端口接收报文BPDU发送方端口ID最小。
===========================================
端口ID有两个部分组成:端口优先级[一个字节]与端口的物理编号地址[一个字节]。当端口优先级相同的情况下,比较接口的MAC地址。当第一个条件无法确定根端口的时候,依次匹配其它条件,直到可以确定根端口。
===========================================
指定端口
除了每台交换机有一个根端口之外,每个网段还要选择一个用来到达根交换机的指定端口。指定端口是两个交换机端口之间做出选择。指定端口选择条件
1端口所在交换机路径成成本相比,该交换机从根端口有到达根交换机最低路径成本。
2.两台交换机比较,那么选择具有最低交换机ID。
3.两个端口相比较,具有最低端口ID。
===========================================
开始的时候我有个错误的认识,在选择指定端口的时候,我认为在经过条件1与2的比较下,就可以选择出指定端口,根本用不到条件3。后来经过好朋友Mr.w指点下,终于发现了两种情况。情况一.两个交换机之间通过集线器连接有多条链路。情况二.一条物理线路同时连接到了同一台交换机。最后说几个特殊情况,根交换机由于自身就是根了,所以没有根端口这一概念,根交换机的所有端口都是指定端口,与根端口直连的端口一定是指定端口。在二层网络收敛情况下,根端口总是接收配置BPDU,指定端口总是发送配置BPDU。
===========================================
STP最优路径
经过STA的计算,处于活动状态的链路总是最优的。我们一起看下STP是如何做到的。STP为不同宽带的路径定义了不同的成本,其带宽与成本成反比。比如
如10Mbps带宽开销为100、100Mbps为19、1000Mbps为4、10Gbps为2。STP几种成本概念。
端口成本:本端口定义的路径成本,一种带宽的衡量,默认为带宽的大小的成本值,可以修改。端口成本值的修改意义为与此端口连接的链路带宽反应,做为路径成本计算。
端口到根交换机的成本:就是从此端口收到的BPDU的成本(不加本端口的端口成本)。
根路径成本:从端口收到的BPDU的成本加上本端口的成本。在STP中,发送出去的BPDU不在计算出接口的路径成本。
===========================================
修改链路的速率对计算STP有一定影响。在GNS3中修改速率,对COST是没有影响的,而在PT中修改速率会造成STP计算路径成本发生改变。[对接口成本修改就等于定义此网段路径成本],由于无真机实验,大家可做为了解。最后因为STP选择的链路总是成本最低的,反过来说,就是将带宽最高的链路保持活动,用来传送数据。所以我们使用STP可以得到一个最优链路。
===========================================
STP消息BPDU
二层网络中,要构造这棵树那么交换机之间必须要进行一些信息交流,这个信息报文我们称之为BPDU[BridgeProtocolDataUnit]。STP BPDU报文二层帧目标MAC地址是多播地址01:80:c2:00:00:00,所有支持STP协议的交换机都会接收并处理此报文,该报文包含了用于生成树计算的所有信息。在默认情况下,根交换机每2秒发送一次BPDU,该时间为hello时间。BPDU最大保持时间是20秒,该时间是最大生存时间。
BPDU有两种类型
配置BPDU:在STP拓扑收敛后,根交换机以一定的周期发送此报文,做为检测拓扑改变的依据。[TYPE=00]
TCN BPDU:拓扑变更通告[TYPE=80]
BPDU报文格式
STP端口状态
阻塞[blocking]
与该端口直连的设备为交换机,且该端口非根端口、非指定端口、同时也是非根桥。处于这个状态的端口将周期性接收配置BPDU,如果20秒未收到BPDU报文,则切换到监听状态。
监听[listening]
交换启动的时候,接口up以后,初始状态为监听状态。在该状态下通过监听查看BPDU,学习新的二层拓扑。并确定网络中的根交换、根端口、指定端口、阻塞端口等。维持监听状态的时间是15秒。[初启动的时候,交换机也会发送自己为根交换机的配置BPDU,用来竞选根交换机这一角色。]
学习[learning]
前两种状态,只接收BPDU报文,丢弃数据报文且不学习其中的MAC地址,而处于学习状态的情况,此接口学习数据报文的源MAC,从而构建MAC地址表,但并不转发此数据报文。这个状态持续时间也是15秒。
转发[forwarding]
该状态下的端口将对接收到的数据报文进行转发。
STP端口角色与状态行为
管理员手动关闭的端口 Disabled 不接收也不发送BPDU报文,不接收也不转发数据.
非指定端口或非根端口 Blocking 接收但不发送BPDU,不接收也不转发数据,不进行MAC地址学习.
Listening 接收并发送BPDU,不接收也不转发数据,不进行地址学习.
Learning 接收并发送BPDU,不接收也不转发数据,进行地址学习.
指定端口或根端口 Forwarding 接收并发送BPDU,接收并转发数据,进行地址学习.
STP拓扑变化
STP分直接收敛30秒与间接收敛50秒。如果非根桥交换机的指定端口断掉,则交换机会立即通过根端口以一定速率发送TCN BPDU给上游交换机,上游交换机收到该TCN BPDU后会立刻向下游交换机回应TCA BPDU(即把标志字段的TCA位置位的配置BPDU)并继续向上游传递TCN BPDU。下游交换机收到TCA消息的交换机会停止发送TCN BPDU。如此不断的传递,直到传到根桥。然后,根桥将自己的MAC地址表老化时间改为Forward Delay。其后会持续Forward Delay+Max Age长的时间内在发出的配置BPDU中把TC位置位。其下游任何交换机接收到根桥传递过来的TC置位的配置BPDU都会将自己的MAC地址表老化时间修改为Forward Delay那么长时间。
STP产生TCNBPDU的两种条件
1. STP拓扑在收敛的情况下,一个处于转发状态的端口过度到阻塞状态。
2. STP拓扑在收敛的情况下,一个处于阻塞状态的端口过度到转发状态。
当二层网络中拓扑发生改变,将处于阻塞状态下的端口过渡到转发状态,可能用30秒或50秒的时间.其故障原因满足下面条件,从阻塞状态过渡到转发状态需要30秒,那就是交换机X的直连链路down并且阻塞接口同时也位于交换机X之上,此时30秒可以收敛[直连检测机制]。其它情况均为50秒。
CISCO对STP的增强
Portfast特性
连接到交换机的终端设备,其交换机接口会从监听状态过渡到转发状态用时30秒,由于交换机接口连接到终端设备并不会导致交换机二层环路,所以将一个连接终端设备的端口让其处于转发等待30秒非常不合理。将连接终端设备的接口配置上Portfast,即直接从disabled状态进入到forwarding状态,可节省等待30秒时间。portfast特性启用后并没有禁止STP,如果该端口下接STP交换机则仍然会执行正常的STP选举收敛。portfast端口的状态变化不会触发TCNBPDU。
Uplinkfast特性
这是一种直连检测技术。当交换机检测到与自己直连的链路断开后,启用了Uplinkfast特性的交换机会立即将处于阻塞状态的端口过渡到转发状态,节省等待时间30秒。uplinkfast的注意事项:只在接入层交换机上部署,该接入层交换机上有且只有两条上行链路。只针对接入层交换机的上行链路故障有用。网桥优先级和端口开销有可能会增加。 上联口切换时会从新的根端口发送虚拟单播帧来更新各交换机的MAC表.这种虚拟多播帧是部署了uplinkfast特性的接入层交换机代替其直连的终端发送的,源MAC为直连终端的MAC,目标为0×01-00-0c-cd-cd.有多少个直连的终端就会发多少个虚拟多播帧.收到该帧的交换机会更新其MAC表相关条目。
Backbonefast特性
当一个非根交换机到达根交换机之间的链路断开以后且不在收到关于根的配置BPDU,在等待超时后会认为自己是根交换。当另一个交换机收到一个次级的BPDU后,这种情况下网络会等待50秒才会收敛。Backbonefast使用了RLQ查询机制,由收到次佳配置BPDU的交换机产生,从根端口向根网桥发送,以探知到根的链路或根本身是否稳定,可节省时间20秒。
STP配置
Show spanning-tree brief
查看生成树简要信息
Spanning-tree cost port-cost
Spanning-tree vlan vlan-id cost port-cost
针对干道接口或访问接口设置本地成本值
spanning-tree port-priority
在接口模式下修改端口优先级,该值必须为16的倍数。
spanning-tree vlan 10 root primary|secondary
设置主根交换机和备份交换机,primary把优先级降低为24576,secondary把优先级降低为28672。
STP就写到此了,请大家观注后期关于RSTP与MSTP技术。此文慕容兄给我提供了不少资料文档,谢了慕容兄!一些STP知识点也请教了我的两位好友慕容与流逝风之影,学习的路上有个朋友一起陪伴真是一件非常爽的事。