spanning Tree

环形网络中造成大量的流量即“广播风暴”,导致网络的瘫痪,从而影响学校的正常工作,本文根据生成树协议实现网络冗余链路管理的技术手段,从协议的原理、配置、管理等角度进行分析,探讨实现网络冗余链路管理的方法。
 
关键词: 生成树协议 冗余链路
 
由于以太网网桥采用了基于 MAC 地址实现在不同端口之间的数据转发机制,每一个端口对应的是一个以太网的网段,通过学习每个端口的 MAC 地址表的方式,网桥只转发不同端口间的通信。但由于网桥依赖运行网络中存在的MAC 地址和端口的地址对应表来进行数据的转发,若收到目的地址未知的数据包,只能利用广播的形式来寻址,其后果就是在一个环形网络中造成大量的流量即“广播风暴”,从而导致网络的瘫痪。
 
为了解决基于二层的“广播风暴”问题,IEEE(电机和电子工程师学会)制定了 802.1D 的生成树协议(Spanning Tree Protocol),它在防止产生环路的基础上提供路径冗余。生成树协议(STP)是通过生成树算法(STASpanning Tree Algorithm)计算出一条到根网桥的无环路路径来避免和消除网络中的环路,它是通过判断网络中存在环路的地方并阻断冗余链路来实现这个目的。通过这种方式,它确保到每个目的地都只有唯一路径,不会产生环路,从而达到管理冗余链路的目的。
 
为了实现对冗余链路的管理,找出存在的冗余链路,STA在网络中选举根网桥作为依据,跟踪该可用路径。若发现存在冗余路径,它将选择最佳路径来进行数据包转发,并阻断其它冗余链路。
 
Spanning Tree 的工作原理
 
Spanning Tree 的工作方式如同生成一棵的树,树的根就称为“根网桥”,每个设备会定义一个优先级,数值越小代表它成为根桥的可能性越大。参与STP的所有交换机都通过数据消息的交换来获取网络中其它交换机的信息,这些消息被称为桥接协议数据单元(BPDU)。BPDU主要内容包括:根信息 、路径开销、端口信息、记时器。
 
实现管理冗余链路,建立无环路生成树的首先选举一个根网桥。根网桥是所有交换机用来决定网络中是否存在环路的依据。通过网桥ID决定谁将成为根网桥,根网桥ID由两部分组成:优先级域(两字节)和MAC地址域(六字节)。以上两个部分决定了根网桥的选定结果。数值越低,就越有可能成为根网桥。如果交换机发现一个比它自己更低的根ID ,就将根IDBPDU中进行宣告。通过交换BPDU报文,交换机决定谁是根网桥。
 
当根网桥选举完后,每台交换机与根网桥建立关联。交换机首先判断路径开销。路径开销是根据链路速率和BPDU从根网桥到达本端口所经过的链路数量而计算出来的。如果一个端口有最低的路径开销,它将被置于转发模式。接收BPDU的所有其它端口将被置于阻断模式。 若各端口接收到BPDU的路径开销相同,交换机将根据网桥ID以决定哪个端口应该进行转发。有最低网桥ID的端口将被选为转发端口,所有其它端口将被阻断。
 
经过BPDU的交换,可实现根网桥交换机的选举,并计算出每台交换机到根交换机的最短距离,离根交换机最近的交换机被称为指定交换机,每台交换机的根端口被选举出来。这是一个提供从该交换机到根交换机最佳路径(通常是最低开销路径)的端口,不进行数据帧转发的端口被置于阻断状态。这些端口可继续发送和接收BPDU信息,但禁止发送或接收用户数据。
 
为了建立一个无环路网络,生成树使交换机的各个端口经历几种不同的状态:阻断、倾听、学习、转发、关闭 倾听和学习状态都是生成树所实施的过渡状态,指挥交换机端口等待从其它交换机上获得BPDU报文。端口状态转换如下:
当生成树通过了STP状态时,采用一系列记时器来防止网络中桥接环路的发生。
 
快速生成树协议(Rapid Spanning Tree ProtocolRSTP
 
生成树协议IEEE 802.1d虽可在50秒内恢复连接,但已不能满足现代交换式网络和应用的需要,在 802.1w中定义的RSTP协议可解决802.1d的自恢复问题。快速生成树协议(RSTP)是从生成树算法的基础上发展而来的,通过配置消息来传递生成树信息,并通过优先级比较来进行计算。快速生成树能够完成生成树的所有功能,优异之处在于快速生成树减小了端口从阻塞到转发的延时,快速恢复网络的正常工作状态。它采用桥-桥握手机制,并不采用802.1d中根桥所指定的计时器。  
 
快速生成树协议与生成树协议的区别不少:如端口状态迁移方式不同;配置消息的格式不同;拓朴改变消息的传播方式不同。
 
RSTP 除了对根端口和802.1d中的指定端口进行了定义之外,还增加了两种新的作用:一是备份端口。指定端口向生成树提供的路径备份。二是替代端口。为当前根端口所提供的根桥提供了替代路径。RSTP中新定义的端口作用使替代端口可以进行快速转换,能转发根端口的故障。
 
为了防止环路,RSTP利用网桥之间的握手来确保通过网络分配的端口任务能够保持一致。由于这种握手机制不依赖于定时器,因此可以迅速地传送到网络各处,随着拓朴结构的改变而在很短的时间内恢复连接。802.1w仅工作在点到点的连接中,否则802.1w协议将回到802.1d模式。
 
新的根端口从阻塞到转发的实现:原有根端口已经知道自己不再是根端口了,进入阻塞状态。新的根端口连接的网段的指定端口处于转发状态,这个新的根端口就可以无延时地进入转发状态。
 
非边缘指定端口从阻塞到转发:此个端口连接着其他网桥。等待进入转发状态的指定端口向下游网桥发送一个握手请求报文,若下游的网桥响应了,则这个指定端口就可以无延时地进入转发状态。
 
边缘端口从阻塞到转发:边缘端口直接和终端设备相连,不再连接任何网桥的端口。网桥启动后这些端口即无延时地快速进入转发状态。
 
通过STP实现链路冗余管理
 
正确理解STP原理和配置,对于维持交换网络的正常运行有重要的影响。设计好生成树,可以使网络保持良好的性能。
 
通过人工设定的方法为网络指定网桥的优先级别,将其置于网络的中心位置,保证该网桥能被选举为根网桥,并配备备份根网桥是实现链路优化管理的手段之一。为更好地定制生成树,可通过调整交换机的端口ID、端口成本、网络直径等方法来实现。
 
快速生成树改进的只是生成树的收敛时间,没有解决在整个桥接网络只应用一个单生成树实例的不足。网络设计时最好使网络直径不超过7
 
在交换上Spanning-tree的设置:
Switch(config)#spanning-tree
上面的命令全局启用spanning-tree功能。
Switch (config)#spanning-tree ethernet 2/1 path-cost 30 priority 9
上面的命令设置e2/1端口的路径消费为30,端口优先级为9
 
Spanning-tree 也可应用于特定的VLAN或者某一个端口上面:
Switch (config-vlan-10)#spanning-tree
Switch (config-if-2/1)#spanning-tree
查看Spanning-tree:
Switch #Show span detail
Switch (config)#Show span detail
 
STD 对实现网络冗余链路的优化管理,维持网络的稳定,快速修复交换网络故障有重要的影响。对交换网络的生成树设计,可通过人工设定参数的方法来优化管理。
 
STP/生成树(Spanning Tree Protocol)

冗余带来网络环路
产生的3大问题:
 1:Multiple Frame Copies/多帧复制
 2:MAC Database Instability /MAC地址数据库的不稳定
       /端口漂移
 3:Broadcast Storms/广播风暴
 
 
解决方案:STP
STP是链路管理协议
 将特定的端口置于阻塞状态,来实现既没有环路,也可以冗余的网络.
 
STP核心:
 Provides a loop-free redundant network topoloty,by placing certain ports in the blocking state.

STP信息是通过BPDU来传输的
    桥接协议数据单元BPDU(Bridge Protocol Data Unit)
作用:
 在交换网络中由根桥RB(Root Bridge)发送,用于STP的计算和收敛;发送周期为2秒;

两种类型:
 配置DPDU 是所有端口上的根网桥以周期性间隔而发出的
 TCN(Topology Change Notification) BPDU 当交换机检测到拓扑变更时所产生的
(TC发送时间持续35秒,即delay time+BPDU老化时间).

BPDU完成的任务:
 选举根桥
 确定冗余路径的位置
 阻塞特定端口防止环路
 通告网络的拓扑变更
 监控生成树的状态

 
协议ID(0)  表示协议 802.1d
版本号(0)  STP的版本,802.1D的版本是0
BPDU类型 BPDU类型(配置BPDU=0,TCN BPDU=80)
信息寿命 从根桥发出BPDU之后的秒数,每经过一个网桥都递减1,本质上是到达网桥的跳计数
标记域  包括 拓扑变化(TC)位,置位了就指明该BPDU是一个拓扑变化通告  或  拓扑变化确认(TCA)位
 

交换机对BPDU的处理:
    如果交换机从一个接口接收到优先级高的BPDU,会把该BPDU保存下来并且该接口不再往外发送BPDU;
    在收敛时只有根桥产生BPDU,其余交换机只能从RP接收BPDU后才从DP发送出去;这样非根桥可能从DP或者NDP接受到BPDU;
    如果交换机从DP接收到优先级低的BDPU会丢弃,并给源MAC发送自己较新的BPDU;如果从NDP收到优先级低的BPDU会只丢弃了事。
 
端口的不同状态:
    堵塞(Block,默认20s):只监听流入的BPDU
    监听(Listen,默认15s):监听和发送BPDU(根桥、根端口、指定端口等的选举在该阶段完成,如果接口没有成为DP则重新回到Block):
    学习(Learning,默认15s):监听和发送BPDU,并且会在该接口上学习流入帧的MAC地址
    转发: 监听和发送BPDU,会在该接口上学习流入帧的MAC地址,接收和转发数据帧
    禁用: 不参与STP,并且不能转发任何数据.
STP定时器: 
 Hello time(2s)  用于确定根交换机多长时间向其他的交换机广播一次配置BPDU.
 Forward delay(15s) 监控每个端口在学习和监听状态上停留的时间
 Max Age(20s)  控制端口保存配置BPDU信息的最大时间
作用:让网络有足够的时间来获得有关拓扑的正确信息,并确定是否存在冗余链路.
STP的默认最大寿命计时器为7,表示最大的网络直径可达7台设备.
所以BPDU的Forward delay为20秒
bpdu广播2s一次,允许有3个包丢失即6s,当假设最大为7跳的时候,则一共要用20s,所以BPDU的有效时间为20s
命令:
(config)#spanning-tree vlan 2 hello-time 2 //范围1-10s
    spanning-tree vlan 2 forwad-time 4 //范围4-30s
    spanning-tree vlan 2 max-age 6
 
STP执行的4步判决顺序
 
确定根交换机    lowest root BID 
计算到根交换机的最小路径开销 lowest path cost to root bridge
确定最小的发送者BID   lowest sender BID
确定最小的端口ID   lowest port ID 
 

LAB1:根桥的选举
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引用原则1:
Lowest BID那个交换机,就是root Bridge.
BID:(Bridge ID)
由本交换机的网管MAC地址,和交换机的优先级组成,一共8个字节的16进制.
Step1:察看交换机的网管IP 所对应那个MAC地址
SW1#show version
Base ethernet MAC address: 00:07:EC:A8:4B:80
Step2:
察看STP的相关信息:(察看本机BID)
SW3#show spanning-tree 
交换机的STP的优先级,默认都是0x8000(32768)
Boot ID /Bridge ID
如果Root ID=本交换机的Bridge ID,说明本交换机就是根桥.
Step3:人为控制,根桥的选举(控制根桥/后备根桥的选举)
SW3(config)#spanning-tree vlan 1 priority 0 (0x0000)
SW1(config)#spanning-tree vlan 1 priority 4096 (0x1000)

SW-A(config)#spanning-tree vlan 1 root priority
      (24576=0x6000)
SW-B(config)#spanning-tree vlan 1 root secondary
      (28672=0x7000)
 

LAB2:非根桥交换机的根端口选择:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引用原则2:
Lowest path cost to root bridge
Spanning-Tree Path Cost
根端口:
在非根桥交换机上,到达根桥所需的路径开销,最小的那个端口. 
链路带宽与cost
cost是如何叠加的?

每个非根桥,都只有一个根端口.
SW1#show interface status
SW1(config)#int fa 0/12
   speed 10
SW1#show spanning-tree interface fastethernet 0/12 detail
 port path cost 100
根桥上,没有根端口,"所有与交换机相连的端口"都是"指定端口"

(config-if)#spanning-tree vlan 1 cost ?  //修改端口开销
 
designated port
LAB3:每条segment上的,的选择:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引用原则3:
Lowest sender BID
Step1:判断SW1的SW3之间的segment上,哪个是D-PORT? (8)  
Step2:
SW1(config)#spanning-tree vlan 1 priority 36864
       (0x9000)

LANB4:sender BID相同的情况下,designated port的选择:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果sender BID相同,则引用原则4:
Lowest (对方的) port ID
Step1:
SW2(根桥)# 察看端口的Port-ID
show spanning-tree interface fastEthernet 0/12 detail
     port identifier 128.12
SW2(config-if)#spanning-tree port-priority 32 (16进)
 
LAB5:观察 blocked端口
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
查看所有segment:
观察除了指定端口,和根端口以外的端口,都是被堵塞的.
show spanning-tree vlan 1 detail //显示各个端口上所接收的BPDU数目
 

STP的的特性:(CISCO私有)
1:PortFast 加快终端主机连接入stp网络的收敛.
只适用于,在交换机与主机(电脑)相连的端口, 不应该在交换机与交换机,路由器,hub互连的网络设备的端口使用.
interface FastEthernet0/1 (交换机上,在连接主机的端口)
 switchport mode access (接入链路)
 spanning-tree portfast
spanning-tree portfast default //全局模式下使用,全局启用portfast.

2.uplink-fast:
在所有接入层/分布层(非核心层)交换机上,配置uplink-fast,用于加速因为直链故障/直链检测错误,所引起的STP网络变化的收敛速度.
block - forward
1~5s
sw1(config)#spanning-tree uplink-fast //启用uplink-fast
show spanning-tree uplinkfast //查看uplinkfast信息
 
将网桥优先级增加49152,并且将交换机上所有接口的生成树端口开销增加3000
3.BackBone-Fast:
当遇到非直链检测错误时,加速其收敛速度:
大约为30s
indirect Link Failure
所有的交换机上,配置BackBone-Fast
sw1/2/3(config)#spanning-tree backbonefast //启用backbonefast
show spanning-tree backbonefast //查看backbonefast信息

4.portfast bpduguard (在已经是portfast端口上配置)
交换机端口的"portfast bpduguard"是指:
 在交换机的端口一旦收到BPDU包时,立刻关闭端口(进入err-disable状态),避免了更大范围的广播风暴.
如果要打开必须先shutdown,再NO SH
设置自动重新启用老化时间:
(config)#errdisable recovery cause bpduguard //默认300秒
     errdisable recovery interval ?  //修改等待间隔
 

在连接主机的端口上:
Sw1(config-if)#spanning-tree bpduguard enable
bpduguard Don't accept BPDUs on this interface

5:portfast bpdufilter (在portfast端口配置)
防止交换机在启用"portfast"的接口上发送BPDU,并且将接收到的所有BPDU都丢弃.
在特定的portfast端口上配置:
sw1(config-if)#spanning-tree bpdufilter enable 
 (bpdufilter: Don't send or receive BPDUs on this interface)
sw3(config)#spanning-tree portfast bpdufilter default  //全局的portfast端口上,都生效
注意:BPDU过滤可能导致环路,不推荐配置.配置过滤之后防护将不起作用.
6:root guard (推荐在所有的接入端口上配置)
将接口强制成为指定端口,从而防止周围的交换机成为根交换机.
(config-if)#spanning-tree guard root 
show spanning-tree inconsistentports //显示"不一致根"
 
debug spanning-tree events
logging buffered

你可能感兴趣的:(职场,tree,休闲,Spanning)