【STP】生成树协议及STP 802.1D (上)

技术背景

  【STP】生成树协议及STP 802.1D (上)_第1张图片

假设上图是一个园区网的拓扑,从拓扑中可以看出这是一个二层的网络架构,接入层交换机单链路上联到汇聚交换机,你可能已经发现这个网络是不够健壮的,一旦上联链路发生故障,接入层交换机就丢失了网络联通性,因为链路没有冗余。为了让网络变得更加健壮,我们会为交换机增加冗余链路:
  【STP】生成树协议及STP 802.1D (上)_第2张图片
每台接入层交换机均双链路上联到汇聚交换机,如此一来确实增加了冗余性,但是也带来了一个新的问题:二层环路(Loop),在园区网中,二层环路的危害是非常大的,容易造成广播风暴、多帧复制、MAC地址漂移、设备CPU飙高等等问题,二层环路问题算的上是园区网杀手之一。造成二层环路的另一个原因是人为的疏忽,例如接错了线导致网络中出现了环路等。那么有没有什么办法,能够在网络中保留二层链路冗余性的同时,规避掉环路问题呢?当然是有的,STP(Spanning-tree Protocol,生成树协议)就是常用的解决方案。
  【STP】生成树协议及STP 802.1D (上)_第3张图片
通过在园区网中的交换机部署STP,交换机彼此之间会进行STP协议数据报文的交互,最终通过阻塞(Block)掉特定的接口来打破环路。被Block掉的接口是无法收发数据的,而且当网络拓扑发生变更的时候,生成树能够感知到这些变化,并且进行自动的切换:
  【STP】生成树协议及STP 802.1D (上)_第4张图片

生成树协议的种类:

【STP】生成树协议及STP 802.1D (上)_第5张图片


1 BPDU报文
【STP】生成树协议及STP 802.1D (上)_第6张图片

通过在交换机上部署STP可以解决二层环路问题。交换机之间需要交换生成树的协议消息来检测桥接环路,以保证STP工作的正常,该消息称为网桥协议数据单元(BPDU,Bridge Protocol Data Unit), BPDU消息中包含着用于STP选举的各项参数。STP工作的结果是经过一系列的”选举“后将某个或某些端口阻塞从而打破环路。
BPDU有两种类型:配置BPDU(Configuration BPDU)及拓扑变更通知BPDU(TCN BPDU)

1.1 Configuration BPDU

在网络刚开始运行的阶段,所有交换机都会从所有端口发送BPDU,大家都认为自己是根桥,随着BPDU的泛洪和收集,根据BPDU中所含信息,大家PK出来个结果,根桥被选举出来了。在此之后由根桥缺省以2s为周期发送BPDU,所有的非根交换机从自己的根端口收到BPDU,再从自己的指定端口将BPDU“中继Relay”出去。这就有点像我们从根桥倒一盆水下来,水顺着这棵无环的树从上往下不断的流。另外,被阻塞的非指定端口会源源不断的收到链路上的指定端口周期性发送的BPDU并一直侦听,当其在一定时间内没有再收到BPDU,则认为链路出现了故障,开始进入新的收敛阶段。

注意802.1D的STP,在根桥选举出来之后,只有根桥能够发送BPDU,非根桥都只是转发或者说中继BPDU,如果非根桥在根端口上一直没有收到来自根桥的BPDU,则自己是不会往指定端口再发的,这跟RSTP是不同的。

“When a switch receives a configuration BPDU that contains superior information (lower bridge ID, lower path cost, and so forth), it stores the information for that port. If this BPDU is received on the root port of the switch, the switch also forwards it with an updated message to all attached LANs for which it is the designated switch.
If a switch receives a configuration BPDU that contains inferior information to that currently stored for that port, it discards the BPDU. If the switch is a designated switch for the LAN from which the inferior BPDU was received, it sends that LAN a BPDU containing the up-to-date information stored for that port. In this way, inferior information is discarded, and superior information is propagated on the network.”

  【STP】生成树协议及STP 802.1D (上)_第7张图片

Catos交换机端口ID中优先级默认32(优先级6个bit) , IOS交换机默认128(优先级字段8个比特)

2.2 TCN BPDU

在网络拓扑变化的时候产生,TCN BPDU报文格式非常简单:
  【STP】生成树协议及STP 802.1D (上)_第8张图片
当网络拓扑发生变化的时候,最先意识到变化的交换机会从根端口发送TCN BPDU(BPDU报文中TYPE字段=0x80),也就是朝着根桥的方向发送TCN BPDU,这个消息会一跳一跳地传递到根交换机。上联的交换机在收到了该交换机发送上来的TCN BPDU后,除了向它自己的上一级交换机继续发送TCN BPDU外,还需回送一个TCA BPDU(FLAG字段中TCA位为1的配置BPDU)的确认信息给该交换机。当根桥接收到TCN后意识到了拓扑变化,遂向所有网桥发送TC BPDU(FLAG字段中TC位为1的配置BPDU)。
交换机们收到根桥发出来的TC BPDU后,会将自己的MAC地址表的老化时间由缺省的300s减少为15s(转发延迟计时器的时间),根桥发送的这个TC置位一直会持续35s(20+15)。

2 术语解析

2. Bridge ID 

Bridge ID(8B)= 网桥优先级(2B)和 网桥MAC(6B)
  【STP】生成树协议及STP 802.1D (上)_第9张图片

每台运行STP的交换机都有一个唯一的身份标识,这个标识被称为桥ID(BridgeID),一共8个字节,由两部分构成:2字节的桥优先级,和6字节的MAC。桥ID是非常重要的STP标识符,根桥的选举就是依据桥ID的PK来产生的,在网络初始情况下,所有的交换机都会发送BPDU消息,在该消息中就包含着各自的桥ID,网桥优先级最小的交换机成为根桥,如果大家的优先级都相等,则MAC地址最小的交换机成为根桥。
交换机缺省的网桥优先级为32768,取值范围是0-65535,优先级的取值需是4096的倍数(至于为什么得是4096的倍数,见下文);网桥MAC地址在这里指的是交换机背板的MAC。 

2.2 根路径开销 Root Path Cost

本交换机到达根桥的路径的总开销,换句通俗的话说就是,从我这走到根桥“需要费多大劲儿,或者距离有多远“。
  【STP】生成树协议及STP 802.1D (上)_第10张图片
以上图为例,假设经过选举,SW1成为根网桥,那么它将周期性的发送BPDU,它发送出来的BPDU消息中,RootID字段填写的是自己的桥ID因为自己就是根网桥,BridgeID字段填写的依然是自己的桥ID因为这个BPDU消息是自己发出的,另外还有一个RootPathCost字段,值为0,从根桥发送出来的BPDU中根路径开销为0,因为自己就是根,自己到自己的距离当然是0。 
SW2作为非根桥,会从自己的根端口Port1上收到来自根桥的BPDU,这个BPDU从Port1上收到之后,SW2要计算一下自己从Port1到根桥的路径开销,算法就是把收到的BPDU中的RootPathCost值加上Port1接口的“接口Cost值“,结果就是0+10=10。于是SW2从Port1到根的路径开销就是10。当然SW2会将来自根桥的这个BPDU从自己的指定端口“中继“出去给SW3,此时发送出去的BPDU中,RootID字段填写的是根桥SW1的桥ID,BridgeID字段填写的是SW2的桥ID,而RootPathCost字段值为10。
SW3收到这个BPDU后,以此类推。
上面提到的“端口Cost“是什么概念呢?每一台参与STP的交换机端口都维护着几个接口级别的参数,其中非常重要的一个参数就是端口开销,这个值跟端口的带宽是有关系的,具体的对应关系看下表,看NEW IEEE定义这一列。
  【STP】生成树协议及STP 802.1D (上)_第11张图片

2.3 端口ID 

端口ID(2B)= 端口优先级(1B)和 端口编号(1B)
缺省情况下端口优先级为128,范围0-255。 
Catos交换机端口ID中优先级默认32(优先级6个bit) , IOS交换机默认128(优先级字段8个比特)

  【STP】生成树协议及STP 802.1D (上)_第12张图片

每一个配置BUDU里都包含着Port ID字段,这个字段与该BPDU的发送接口有关。例如上图中,SW2会收到来自根桥SW1的BPDU并且从自己的Port 22及Port23口发送出去,这两个发送出去的BPDU中PortID字段填充的就分别是这两个端口的PortID值,当然其中的端口编号与该端口本身的编号有关系,例如FastEthernet0/1口的端口编号就肯定比FastEthernet0/2口要小。
STP的计算如果进行到要比较BPDU中的PortID时,是先比较PortID中的优先级,比小,如果优先级相等,则再比较PortID中的端口编号,也是比小。 





红茶三杯

网络工程 | 项目管理 | 技术培训
学习 沉淀 成长 分享
微博:http://weibo.com/vinsoney
博客:http://blog.sina.com.cn/vinsoney
站点:http://ccietea.com

你可能感兴趣的:(网络技术(,ccna,cisco))