当前位置:文档之家› 生成树协议(STP)

生成树协议(STP)

第四章:网络交换机主要技术本章将具体阐述网络交换机的两个灵魂技术:STP和VLAN。

对于现在所有的网络交换机而言,如果没有STP和VLAN这两个技术在里面,那么这个交换机就不能称之为交换机,这样的交换机就等价于HUB,没有任何的可管理性,就属于低档产品了。

由于现有的一些交换机技术的国际标准都是源用于网桥,所以本章在阐述中将以网桥来进行描述。

4.1生成树协议(STP)生成树是一个交换网络中检测消除冗余链路以防止出现环的一个协议。

如果不运行STP,帧有可能会在网络中循环发送,流量极剧升高,最后使整个网络彻底瘫痪。

STP最初是一个较慢的基于软件实现的一个桥接规范(IEEE802.1D),现在已经是一个相当成熟的协议了,可以在一个具有多VLAN、大量交换机、多厂商的复杂环境中很好的实施。

在现在的每台交换机上,生成树算法是一个最为基本,也是最为关键的一个技术!在交换机中靠软件实现完成。

4.1.1 基本概述生成树算法,最早是1984年由Digital公司Radia Perkman开发的一个协议,是用在桥接技术上的,用它来为某个扩展局域网找出生成无环的树。

在Radia Perkman所著的《An Algorithm for Distributed Computation of a Spanning Tree in an Extended LAN》一书提出了该概念。

在1993年的ANSI/IEEE 802.1 STD标准中第一次引入正式成为了一个协议。

后来在1998年的IEEE 802.1D中完善了该协议。

在2000年版的IEEE 802.1-d-D4中又增加了一个基于STP的改进的新协议RSTP(Rapid STP,快速生成树算法),在最近2年内又有了一个新的概念叫做MSTP(Multi STP,多生成算法),同时相应的标准草案为IEEE 802.1S。

生成树的基本思想:把形成环路的一些端口屏蔽掉,不进行转发帧。

首先,选择具有最小标时的网桥作为生产树的根(Root)。

根网桥总能在它所有端口上转发分组。

接着,每个网桥计算到根的最短路径并记下路径经过它的那些端口。

这个端口也被选作网桥到根的优先路径,叫做根端口(Root Port)。

然后,所有连接到给定的局域网中的网桥选出一个负责向根网桥转发帧的指派网桥(Designated Bridge)。

这样就选择出了一条到根网桥的路径,如果存在2条以上的路径则其中一条必将被算法规定为冻结状态。

从而,使这个网络看起来就像是一颗树,只有分支而没有回路。

下图4-1的右图就是左图实现生成树算法后的一个拓扑结构简图。

图4-1要实现STP算法,对于交换机或网桥需要提供以下的参数:1,唯一的网桥标时(Bridge ID),是由网桥的优先级(Bridge Priority)和MAC地址一起组成的,主要用来的在桥接网络中表明自己,选根网桥和指定网桥时可用。

2,网桥端口标时(Port ID),是由网桥端口的优先级 (Port Priority)和端口号一起组成的,用来唯一地表明各个网桥端口,选择指定端口和根端口时可用。

3,网段的花费(Path Cost),是指各个网段的路径花费以上这些参数是可以管理和进行相关配置的。

4.1.2 花费(Cost)STP的算法最根本都是基于一个网段的花费,也可以理解为开销,不管是在选择和固定拓扑结构还是在拓扑发生变化需重新恢复的时候,都是依靠花费来决定的。

在STP中花费的定义,有以下三种:根路径花费(Root Path Cost):是指到根网桥的路径开销,由STP计算可得。

指定路径花费(Designated Path Cost):是指某个网段所在指定网桥到根的开销。

路径花费(Path Cost):是指与某个端口相连接时所所需要的开销,一般由链路状态所决定。

一般对于某个特定的网桥,该网桥的根路径花费=指定路径花费+路径花费.花费的计算在IEEE 801.D的标准中有如下规定,见图表4-2:图表4-24.1.3 根网桥(Root Bridge)所谓的根网桥,就是生成树中的根,所有其他的网桥都要以它为核心和源头,一般都是由网络中网桥标时最小的网桥作为根。

算法选择根网桥的时候,首先比较的是网桥标时里的优先级,选优先级最小的作为根;如果当两个网桥的优先级相同的时候,会选择MAC地址小的那个作为根。

法则:Min(Pr1, Pr2,……,PrN)||(Pr1=Pr2=……=PrN)&& Min(Mac1, Mac2,……,MacN)注:Pr:Priority; Mac:MAC ADDRESS4.1.4 根端口(Root Port)所谓的根端口,并不是指在根网桥上的端口,而是在某个LAN中,到达根网桥的花费最少的那个端口,也就是说与离根网桥直接相连或是离根最近的那个端口。

算法选择根端口的时候,首先选择的是该端口到根网桥花费最少的那个口;当有两个或两个以上的端口到根网桥的花费一样的时候,接着比较指定网桥的网桥标时(Bridge ID),选择与该端口相连的指定网桥标时小的那个口作为根端口;如果指定网桥标时也一样,就会选择与该端口相连的指定端口标时(Designated Port ID)较小的那个口;如果指定端口标时也相同的时候,就会最后比较该端口的(Port ID),选择端口标时小的那个。

法则:Min(RPC1,RPC2,……RPCN)||(RPC1=RPC2=……=RPCN)&&Min(DB1,DB2,……,DBN)||(RPC1=RPC2=……=RPCN)&&(DB1=DB2=……=DBN)&&Min(DP1,DP2,……,DPN)||(RPC1=RPC2=……=RPCN)&&(DB1=DB2=……=DBN)&&(DP1=DP2=……=DPN)&&Min(PD1,PD2,……PDN)注:RPC:Root Path Cost DB:Designated Bridge;DP:Designated Port PD:Port ID4.1.5 指定网桥(Designated Bridge)所谓的指定网桥,就是在生成树中某个LAN中指定端口所属于的那个网桥,用来进行转发BPDU,也就是说在该LAN中,一般只有该网桥离根网桥最近。

4.1.6指定端口(Designated Port)所谓的指定端口,就是在生成树中某个LAN中指定转发BPDU(Bridge Protocol Data Unit)的端口。

一般和另一个网桥的根端口相连接或直接与Host或Pc station相连接。

4.1.7冻结端口(Blocked Port)所谓的冻结端口,就是必定在生成树中形成环路的端口中产生,它是由STP算法计算而得到的。

被屏蔽或者说冻结的端口,就不再属于网络活动拓扑结构中,不能进行任何的网络通信,也就是不进行转发帧。

4.1.8 BPDU所谓BPDU (Bridge Protocol Data Unit ),就是网桥用来相互传递STP 协议的信息以及各类参数值,可以相互了解对方的拓扑角色并而决定自己在拓扑中的 角色和状态。

一共由35Bytes 组成,具体格式见图4-3:图4-3 STP BPDUProtocol ID:就是协议标时,默认为0,1B 。

Protocol Version Idenfitier:协议版本标时,默认为0,1B 。

BPDU Type:该BPDU 的类型,0x00为配置BPDU;0x80为TCN BPDU ,拓扑变化通知信息。

Topology Flags:拓扑标志位,1B 。

Root ID:根网桥的标时,8B 。

(Root priority: Root MAC)Root Path Cost:到根网桥的花费,4B 。

如果是根发出的BPDU ,则该值为0。

Designated Bridge ID:指定网桥的标时,8B 。

如果是根发出的,则该值等于Root ID 。

Port Id:就是发该BPDU 的端口号,一般就是网桥的指定端口。

Message Age:消息时间,用来记录该BPDU的生存期,如果该值超过Max Age,则该BPDU 就算过期无效了,将被网桥丢弃。

Max Age:该值可以保证BPDU的有效性,该值只能由根的Max Age来决定。

Hello Time:发BPDU的间隔时间,该值由根的Hello Time来决定。

Forward Delay:端口进入转发状态延时时间,该值也由根Forward Delay来决定。

注:2*(Forward Delay-1)>=Max Age>=2*(Hello Time+1)4.1.9 端口状态(Port State)端口状态的引入,也是生成树的一个重要组成,它保证了在网络拓扑结构形成之前,没有环路,并给生成树的形成提供了足够的时间。

一共有五个状态:冻结状态(Blocking),监听状态(Listening),学习状态(Learning),转发状态(Forwarding),无效状态(Disabled)。

冻结状态(Blocking):当一个端口进入这个状态之后,就不再进行帧的转发,从而可避免环路的形成,避免帧的重复转发与过多复制。

在这个状态下的端口不能转发任何的数据帧,不论是广播,多播,还是单播,也不能发送BPDU;同时也不能进行地址的学习,也就是说当这个口收到数据帧的时候,它不经任何处理就丢弃,除了BPDU之外。

它能够收BPDU,也通过收到BPDU来确定自己属于环路的冻结状态,一旦该端口在一定时间(这个时间一般为Max Age)内收不到任何BPDU或者收到的BPDU所携带的信息比自己存在的BPDU还要差,例如Root没自己的好,那么这个端口将进入Listening状态,并开始发送相关的BDPU。

这样就保证了当网络拓扑结构发生变化或原先的某条链路发生故障的时候,那么这条冗余的链路便可重新活跃了。

监听状态(Listening)当一个端口进入该状态的时候就期待着进入转发状态,也就是进入转发之前的准备,一般是由Blocking状态转入。

在这个状态下的端口不能转发任何的数据帧,不论是广播,多播,还是单播,也不能进行地址的学习,但开始发送BPDU,从而来确定自己在STP中的角色;在经历一定时间(一般为Forward Delay)之后,如果没有收到比自己发送的更好的BPDU,那么该端口将进入Learning状态。

但如果一旦在该状态下受到比自己所发送的更好的BPDU(例如比自己到根花费更少的BPDU),则该端口将立即进入Blocking状态。

学习状态(Learning)当一个端口进入该状态的时候就期待着进入转发状态,也就是进入转发之前的准备,一般都是由Listening状态转入。

相关主题