您的位置:首页 > 编程语言 > PHP开发

stp

2016-06-27 11:02 951 查看
STP(Spanning Tree Protocol) (IEEE 802.1D) 生成树协议

·在一个交换网络中有可能会出现单点失效的故障,所谓单点失效,指的是由于网络中某一台设备的故障,而影响整个网络的通信。为了避免单点失效,提高网络的可靠性,可以通过构建一个冗余拓扑来解决。但是,一个冗余的拓扑,又会给我们的网络造成环路,而产生其它的影响。为了解决二层环路问题,而设计了SPT协议。

·当2个Segment之间,只有一个物理设备连接时,就有可能“单点失效”。

·Segment:(段的概念)

  1.STP:一段网络介质(网线/光纤)。

  2.数据封装:携带4层报头的用户数据。

  3.路由:一个逻辑子网。

·避免单点失效的方法就是构造冗余网络。

·但冗余网络会导致新的问题:

 1.多帧复制

 2.MAC地址表的翻动

 3.广播风暴

·STP是为克服冗余网络中透明桥接的环路问题而创建的。

 STP通过判断网络中存在环路的地方,并阻断冗余链路来实现无环网络。

·STP采用STA(Spanning Tree Arithmetic)算法。

 STA会在冗余链路中选择一个参考点(生成树的根),将选择到达要的单条路径,同时阻断其他冗余路径。一旦已选路径失效,将启用其他路径。

BPDU(Bridge Protocol Data Unit)

·STP的各种选举是通过交换BPDU报文来实现的,BPDU是直接封装在以太网帧中的。

·对于参与STP的所有SW,它们都通过数据消息的交换来获取网络中其他SW的信息,这种消息就被称为BPDU。

·BPDU是直接封装在二层的协议,其MAC地址最后封装数为:00。(01:80:c2:00:00:00)

·BPDU的功能:

 1.选举根桥

 2.确定冗余路径的位置

 3.通过阻塞特定端口来避免环路

 4.通告网络的拓扑变更

 5.监控生成树的状态

·BPDU每2S由根桥发送一次。

 最初的网络,每个SW都认为自己是根桥,都会发送BPDU,比较Lowest BID,选举出一个根桥,当根桥选出来以后。此时就只有根桥发送BPDU。非根桥只进行转发。

BPDU分两种类型:

1、配置BPDU--通常由根网桥以周期性间隔发出,包括了STP参数,用于进行各种选举。

2、TCN(topology change notification 拓扑变更通告)BPDU--这种BPDU是当交换机检测到拓扑发生变更时所产生。

·配置BPDU包含以下的字段

  1、Protocol ID      : 固定为0

  2、Version          : 802.1D (0)

  3、Message Type     : (Config BPDU=0x00 / TCN BPDU=0x80)

  4、Flags

  5、Root ID

  6、Cost of Path

  7、Bridge ID

  8、Port ID

  9、Message age

  10、Max age

  11、Hellotime

  12、Forward delay

·TCN(Topology Change Notification) BPDU

 这种BPDU是交换机检测到拓扑变更时产生的。只包含下列三个字段

   1、Protocol ID 

  2、Version 

   3、Message Type : (Config BPDU=0x00 / TCN BPDU=0x80)

<STP的4大工作流程>(STP里选举参数都是越小越优)

One root bridge per network

One root port per nonroot bridge

One designated port per segment

Nondesignated ports are blocked

One root bridge per network(每个网络只有一个根桥)

·根桥的选举:Lowest BID (最小的BID)

·STP为每台SW分配唯一的一个标识符,称为BID(Bridge ID)。

 BID的组成:2(Bridge Priority优先级)+6(MAC)=8 Bytes

 默认Priority:32768(0x8000) 

  2950以上的交换机会在这个值上再加上VLAN号,因为CISCO默认启用PVST

  每个交换机都有一个基准的MAC地址,用下面的命令可以看到

  Sw2#show version 

 Base ethernet MAC Address: 00:0D:28:61:35:00

  交换机的每一个端口都有一个MAC地址,就是以Base(基准) MAC地址加上端口号得到的。

  Show interface f0/1   这一命令可以看到交换机端口的MAC地址

查看STP信息--

Sw2#show spanning-tree 

Sw3# show spanning-tree brief(低版本用)2900以下的交换机用这一命令

·PVST(Per Vlan Stp)

 Cisco SW 默认为每个VLAN生成一个STP,互不影响。

  由于是为不同的VLAN生成不同的生成树。所以每一台交换机需要为不同的VLAN生成一个不同的桥优先级,所以在CISCO交换机上,交换机在每一个VLAN中的优先级是默认的32768再加上VLAN的号码。

可通过以下命令指定一台交换要为根桥:

Sw1(config)#spanning-tree vlan 1-10 root primary (24576=0x6000) (建立优先级,成为根桥)

Sw2(config)#spanning-tree vlan 1-10 root secondary (28672=0x7000) (备份根桥,防止优先级根桥showdown了)

Sw1(config)#spanning-tree vlan 1-10 priority 4096 

                   (设置必须是4096的倍数)

One root port per nonroot bridge(每个非根桥都要选出一个根端口)

·根端口(RP):每个非根桥有且只有一个根端口

选举RP/DP的方法:

1.Lowest RID(最小的RID)  是SW1(根桥)的BID

2.Lowest path cost to root bridge(到达根的最小路径开销)

3.lowest sender BID (最小的发送BID)

4.Lowest sender port ID  当两台交换机之间有两条线路直连时会用到这一项来选

·Path Cost:根桥发出的COST值是0,在下一交换机的入口处才加上COST值,出口处COST值不变。

 10Mbps:100/ 100Mbps:19/ 1Gbps:4/ 10Gbps:2

Sw1#show interfaces status 

Sw1#show spanning-tree 

Sw1(config-if)#spanning-tree (vlan 1) cost 22 每个VLAN都能生成一个自已的生成树,通过改动每个VLAN的COST值可以达到让每个VLAN选择不同的根端口,产生不同的生成树,充分利用了链路

Sw1(config-if)#spanning-tree cost 22   修改所有Vlan的Cost值

Port ID是由优先级+端口号组成

修改端口优先级:默认情况下是128

Sw1(config-if)#spanning-tree port-priority 16  注意:必须是16的倍数才行

One designated port per segment(每个Segment只有一个指定端口)

4000

   

选举RP/DP的方法:

1.Lowest RID(最小的RID)  是SW1(根桥)的BID

2.Lowest path cost to root bridge(到达根的最小路径开销)

3.lowest sender BID (最小的发送BID)

4.Lowest sender port ID

·根桥的所有端口都是指定端口(DP)。

Nondesignated ports are blocked(非指定端口将被堵塞)

·最后,既不是根端口,又不是指定端口的哪些接口被称为非指定端口,这些端口将被block掉。从而达到防环的目的。

<生成树的收敛>

当网络出现故障导致拓朴发生变化时,生成树要进行收敛,在收敛过程中,一个block接口变到forward状态时会经历以下四种状态变化。

生成树端口状态:

1、blocking--阻塞状态,不转发帧,监听流入的BPDU,不学习MAC地址

2、listening--监听状态,不转发帧,不学习MAC地址,能够决定端口角色

3、learning--学习状态,不转发帧,能学习MAC地址

4、forwarding--转发状态,能够进行正常的帧转发

当拓扑发生变化时,端口从阻塞状态过渡到正常转发状态的时间是30-50S

如果是直连接口down掉,端口状态过渡最大需要30S

如果是非直连故障,最大需要50S

<二层MAC地址表的收敛>

注意:在网络拓朴发生改变后,不仅会有STP的收敛,还会导致二层MAC地址表的收敛。

·当发生如下事件时,SW会发送TCN:

 1.链路故障(FWD -> BLK)

 2.端口进入转发状态,并且SW已经拥有DP

 3.非根桥从它的DP接收到TCN,并将其转发

 

MAC地址表的收敛过程如下:

  1、拓扑发生改变的交换机向RP端口发出TCN的BPDU

  2、上级交换机做两件事:先回应一个TCA置位的BPDU,再继续向自已的RP接口发出TCN的BPDU

  3、TCN的BPDU就这样一跳跳的传到根交换机上

  4、然后根交换机将自已MAC地址表的老化时间由默认的300S改为转发延迟时间(15S)。

  5、根交换机再向网络中发出TC置位的BPDU

  6、网络中的其他交换机收到TC置位的BPDU后,也将自已MAC地址表的老化时间由默认的300S改为15S。

这样,每台交换机就快速的老化了MAC地址表,清除掉了已经失效的MAC地址条目。

<BPDU Timer>

三个计时器:

·Message Age:最大存活时间(20S)

 Hello Time:根桥连续发送BPDU的间隔(2S)

 Forward Time:SW在监听和学习状态所停留的时间(15S)

spanning-tree vlan 1-10 hello-time 3   修改发送BPDU的时间间隔

spanning-tree vlan 1-10 forward-time 13   修改forward时间

spanning-tree vlan 1-10 max-age 33    修改最大存活时间

注意:必须在根桥上修改,否则不起作用。

1.老化时间(blocking)(loss of BPDU detected)max age=20s

2. 监听时间(listening)forward delay=15s

3.学习时间(learning)forward delay=15s

      监听BPDU 学习MAC 帧转发

Blocking   √    ×   ×

Listening   √    ×   ×(选举Root/RP/DP)

Learning   √    √   ×

Forwarding  √    √   √

<STP和802.1Q>

·CISCO交换机上,在采用802.1Q的Trunk中,SW为Trunk中所允许的每个VLAN维护一个STP。

 (PVST)

 

·对于不支持802.1Q的SW,所有VLAN维护一个STP。(SSTP)

·在交换网络中,STP是始终运行的,如果链路没有Trunking.STP只维护VLAN1的信息。

Per VLAN Spanning Tree

优点:1.基于Vlan的负载均衡;

缺点:1.BPDU是基于Vlan 的基础上运行的;

<STP的一些增强特性>

·802.1D STP设计初衷:网络中断后能够在1分钟之内(Max=50S)恢复。

 伴随着LAN出现3层交换,很多的路由协议(OSPF/EIGRP)都能在几秒之内收敛。

·Cisco为加快收敛时间,提出了一些私有的优化特性来加速STP的收敛:

 1、PortFast

  2、UpLinkFast

  3、BackboneFast

·PortFast: 

 能够让2层的接入端口(接host)跳过LIS/LRN状态立即进入FWD。30S->0S

 基于接口,用于接非交换机接口,不要设置在接SW的端口。

Sw1#show spanning-tree 

 Type: Edge [Shr/P2p]

测试:把交换机的端口shut down,再no shut down,观察状态。启用前和启有后是不一样的。

Sw1(config)#spanning-tree portfast default (所有接口启用)全局下用

一般用在接入层的交换机上。

Sw1(config-if)#spanning-tree portfast  接口下单独启用

Sw1(config-if)#spanning-tree portfast disable (某个口禁用,通常是连接另一台交换机的口)

·UplinkFast:

 在接入层SW上配置,用于检测直连到分布层SW的链路故障,并加速STP的收敛速度。

  也可以在分布层交换机上配置,用于检测直连到核心层交换机的链路故障

  30S->0S

Sw2(config)#spanning-tree uplinkfast 

(Uplinkfast是一个全局命令,将影响SW上的所有VLAN)

Debug spanning-tree events

测试:将有效链路口shut,原来BLK口立即转发,

·Uplinkfast将网桥PRI增加到49152,将端口Cost增加3000

 使SW不能成为Root。所以一般配置在接入层SW。

Sw2#show spanning-tree 

  ........  Uplinkfast enabled

Sw2#show spanning-tree uplinkfast 可以看到哪些接口成为备份

Sw2(config)#spanning-tree uplinkfast max-update-rate 200

(每秒所发包的数目,默认值150)

·BackboneFast:

 BackboneFast是对UplinkFast的一种补充。用于检测主干SW间的链路故障。(50S -> 30S)

·要求BackboneFast应用在所有SW上。

当交换机检测到次级BPDU后,将使用替代路径发送RLQ BPDU(根链路查询BPDU),RLQ BPDU通过中间交换机向根交换机传播,并且根交换机将最终响应。

Sw1(config)#spanning-tree backbonefast 

Sw1#show spanning-tree backbonefast 可以查看RLQ消息和次级BPDU

LAB 

DEBUG SPAN EVENT (可以观察 STP 时间)

正常802.1D

直连的 上行链路DOWN , BLOCK 端口 立即切到 listenning —>forwarding,一共用时30S

非直连的BB 链路DOWN ,BLOCK 端口 等待50S ,从blocking------>forwarding, 一共用时50S

802.1D CISCO 增强特性:

(接口模式)        SPANNING-TREE PORT FAST :   STP: VLAN0001 Fa0/4 ->jump to forwarding from blocking

(接入层全局模式)  SPANNING-TREE UPLNKFAST : The move to forwarding.  此时 直接上行链路DOWN ,2S 之内切换block接口到forwarding 。 为什么增加 优先级和 COST 呢? 不增加会怎么样?

所有SW 全局模式:  spanning-tree backbone fast:  当非直接BB 链路DOWN,  block接口直接切到listenning ->forwarding ,用时30s 。 全局配是因为所有的SW 都要转发 RLQ.

如果 PORTFAST 接口 接了SW ,收到 BPDU 之后不会马上进入forwarding ,而是进入 listenning 状态,30S 后到 forwarding.
若此时  span  bpduguard enable后 ,当接口收到BPDU 后,进入 LISTENNING 后进入DISABLING .
此时sh int f0/4 -->er-disable.
自动恢复err-disable接口——> errdisable recovery cause bpduguard  interval 30s   -不断循环,不好

如果 BLOCK 接口 配成 span bpdufilter ,则此接口忽略入向 BPDU,从而形成 永久环路。但是如果 在接入层 配置 BPDU FILTER,则可以加强对根的保护(一个接入层再接一个优先级小的或MAC 地址小的BPDU 时,)。 一个接口即配置了bpduguard ,又配置bpdufilter ,则 pgdufilter 生效。 
换句话说: bpduguard 如果生效了,则所有流量都DROP 掉,可以对根产生保护。
bpdufilter 如果生效,则是过滤BPDU ,但是转发数据流量,同时可以对根产生保护。

RSTP:
  以端口角色而不是以端口状态

全局# spannint-tree rapid-pvst ,CISCO没有单纯的RSTP ,而是 PVST+ RSTP

disable                discard     

block(20)              discard 

listenning (15)->      discard 

learning(15)

forwarding

RP         RP

DP         DP

AP : --> RP

BP : --> DP

SHOW SPAN SUM 可以查看STP 模式

MST:  多STP 实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: