码迷,mamicode.com
首页 > 其他好文 > 详细

Layer2-STP生成树协议

时间:2016-07-08 11:54:41      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:

session 1 STP
       STP(Spanning Tree Protocol)是生成树协议的英文缩写。该协议可应用于在网络中建立树形拓扑,消除网络中的环路,并且可以通过一定的方法实现路径冗余,但不是一定可以实现路径冗余。生成树协议适合所有厂商的网络设备,在配置上和体现功能强度上有所差别,但是在原理和应用效果是一致的。
STP的基本原理是,通过在交换机之间传递一种特殊的协议报文,网桥协议数据单元(Bridge Protocol Data Unit,简称BPDU),来确定网络的拓扑结构。BPDU有两种,配置BPDU(Configuration BPDU)和TCN BPDU。前者是用于计算无环的生成树的,后者则是用于在二层网络拓扑发生变化时产生用来缩短MAC表项的刷新时间的(由默认的300s缩短为15s)。
Spanning Tree Protocol(STP)在IEEE802.1D文档中定义。该协议的原理是按照树的结构来构造网络拓扑,消除网络中的环路,避免由于环路的存在而造成广播风暴问题。
在cisco中私有的是PVST+生成树,每vlan的STP,目前所有cisco交换机默认运行的协议,针对于每个vlan建立一颗生成树,原理及选举与IEEE802.1d相同。

Spanning Tree Protocol(STP)的基本思想就是按照"树"的结构构造网络的拓扑结构,树的根是一个称为根桥的桥设备,根桥的确立是由交换机或网桥的BID(Bridge ID)确定的,BID最小的设备成为二层网络中的根桥。BID又是由网桥优先级和MAC地址构成,不同厂商的设备的网桥优先级的字节个数可能不同。由根桥开始,逐级形成一棵树,根桥定时发送配置BPDU,非根桥接收配置BPDU,刷新最佳BPDU并转发。这里的最佳BPDU指的是当前根桥所发送的BPDU。如果接收到了下级BPDU(新接入的设备会发送BPDU,但该设备的BID比当前根桥大),接收到该下级BPDU的设备将会向新接入的设备发送自己存储的最佳BPDU,以告知其当前网络中根桥;如果接收到的BPDU更优,将会重新计算生成树拓扑。当非根桥在离上一次接收到最佳BPDU最长寿命(Max Age,默认20s)后还没有接收到最佳BPDU的时候,该端口将进入监听状态,该设备将产生TCN BPDU,并从根端口转发出去,从指定端口接收到TCN BPDU的上级设备将发送确认,然后再向上级设备发送TCN BPDU,此过程持续到根桥为止,然后根桥在其后发送的配置BPDU中将携带标记表明拓扑已发生变化,网络中的所有设备接收到后将CAM表项的刷新时间从300s缩短为15s。整个收敛的时间为50s左右。


session 2 STP选举步骤和详细过程
一、STP中的选举步骤和端口状态
选举步骤:
1、选举ROOT-SW根网桥
2、选举根端口RP(root port)
3、选举指定端口DP(Designate port)
4、其余的端口被Block阻塞
stp选举时候端口状态(15s 到listening,选举就结束了):
STP的5种状态
Disabled - 可以理解为此时交换机端口没有active,或者强行关闭该端口或者该端口的STP。丢弃所有收到的数据帧,不学习MAC地址,能收BPDU,但是不做处理。
Blocking - 端口监听BPDU,但是不转发BPDU,丢弃所有收到的数据帧,丢弃所有收到的数据帧,丢弃所有收到的数据帧,丢弃所有收到的数据帧,丢弃所有收到的数据帧,丢弃所有收到的数据帧,丢弃所有收到的数据帧,不学习 MAC MAC地址,也不产生任何的CAM表项.
Listening - 持续15s,接收并且发送BPDU,不转发用户数据,不产生该端口的CAM表项,在该状态下完成STP的收敛.在此状态,交换机能够决定根,并且可以选择根端口,指定端口,非指定端口
Learning - 持续15s,接收并且发送BPDU,不转发用户数据,完成部分端口的CAM表项,目的是为了减少当用户开始转发数据时,带来的flooding.(解释了为什么SW启动后30秒的时间过后才能通信的原理)
Forwarding - 接收并且发送BPDU,开始转发用户数据.

二、BPDU的结构和作用

      BPDU是STP中用来选举的报文,是 网桥之间传递 STP 信息的一种二层数据帧,By default,BPDUs are sent out every two seconds.交换机会比较每个接口收到的BPDUs和相应的接口发送的BPDU,如果接受的BPDUs或者自己从那个接口发送的BPDU有更低的值,则会替换那个接口保存的BPDU。 在STP协议中BPDU发送的组播地址是0180.C200.0000(BPDU),在PVST+中发送的BPDU组播地址是(0100.0CCC.CCCD-PVST报文)


BPDU的帧格式:35个字节12个字段
技术分享
Protocol ID(协议ID):该值总为0
Version(版本):802.1D的版本是0,用于表明使用的是哪种stp协议(802.1d还是pvst+等等)
Message type(消息类型):配置BPDU是0x00,TCN BPDU是0x80
Flags(标志):用于TCN-BPDU(Topology Change Network)来宣告网络拓扑变化后重新选举生成树使用

Root ID:根网桥的网桥ID表明ROOT是谁(由priority+MAC组成),在网络刚开始时RootID=Bridge ID,root选举出来后就是root-ID。


下图为IEEE802.1d的BID和cisco私有的PVST+的BID
技术分享
      IEEE802.1d的BID是:一个8Bytes(64bits)组成的字段,分为2部分组成,最高2个字节表示Priority,后6个字节用于表示MAC地址.MAC地址用十六进制表示。Prirotiy取值范围:0-65535,缺省值32768.Cisco交换机都针对优先级字段穷特性Spanning-tree extend system-id该特性对网桥优先级产生一个扩展系统ID(ID用VLAN的编号或者MST的实例号表示)。
      PVST+的BID是:最高4bits表示交换机优先级,后面12bis表示扩展系统ID(可以支持范围为4096个VLAN,为每个一个LAN产生一个单独的ID)。两个字段相加得到网桥优先级。(所有实例的MAC用的都是交换背板或者监控引擎里面最小的那个MAC)
      BID的比较是先计较Priority,如果优先级相同,再比较MAC,数值低的一方优先.

      Cost of path(路径开销):发送BPDU的SW到达根网桥的路径开销
      Bridge ID(BID,桥ID):每个交换机都会有一个BID表明自己(由网桥priority+MAC组成),在802.1D中,开始的时候每个网桥都发配置BPDU,当一台交换机发现收到的BPDU中的BID比自己更适合做根网桥,此时,此交换机就不在发送BPDU了
      Port ID(端口ID):Port Priority+Port Number
      Message age(消息寿命):开始的时候表示从根网桥发出以后所经过的秒数,现在演变为每经过一个网桥都会加1,有点像TTL值
      Max age(最大寿命):网桥在将根网桥看作不可用之前保留根网桥ID的最大时间,有点像hold time(保持时间),默认是20秒,可以手工配置在6-40s之间
      Hellotime(Hello时间):根网桥发送BPDU的时间间隔,默认是2秒,2s,可以手工配置在1-10s之间
Forward delay(转发延迟):网桥在侦听和学习状态所停留的时间间隔,默认是15秒,可以手工配置在4-30s之间

三、STP选举过程
A、确定Root Bridge -通过BID的比较判决。在同一个二层网络中需要选举,即一个广播域内要选举,并且一个网络中只能选举一台根交换机(ROOT)。Birdge-ID中优先级数字小的为根交换机,优先级范围为0-65535,如果优先级相同,则MAC地址小的为根交换机。

B、所有非根桥交换机选举RP(Root Port) - 每个非根桥有且只有一个RP(主要作用是负责接收并且监听根桥的BPDU)
1、比较每个端口到达Root的Cost,具有最小Cost的端口成为RP端口的,开销是指本端口收到一个对端网桥的BPDU以后,累加本端口的COST之后的总路径开销。cost相同比较Sender BID
技术分享
2、比较Send BID,收到BPDU中Send BID最小的端口成为RP,负责转发根网桥BPDU的交换机每次转发都将其中BID替换为自己的,先优先级后MAC 越小越好,Sender BID相同的话比较port ID
3、比较Port ID,收到BPDU中,Port ID最小的端口成为RP。Port ID由2个字节组成.包含一个数字有序对。第一个数字作为Port priority,第二个数字作为Port Number。排列顺序不一定和物理端口顺序一样,但是具体数字丌一定一样。
技术分享
C、所有链路上确定DP(Design Port) - 转发BPDU的端口。在每个冲突域需要选举,简单的理解为为每条连接交换机的物理线路的两个端口中,有一个要被选为指定端口,每个网段选举指定端口后,就能保证每个网段都都链路能够到达根交换机。根端口的对端一定是指定端口(主要作用是用来转发来自跟桥的BPDU)
1、比较同一段链路上2个端口发送BPDU到根的cost,较小的一个端口成为DP,如果相同再比较Sender BID
2、比较同一段链路上的2个端口发送BPDU的Sender BID(发送SW一般是这个端口所属的SW),较小的一个端口成为DP

D、网络中剩余的端口不全就是Block,只接受和监听BPDU,但是不发送接受数据。

session 3 STP选举实例分析总结及配置命令
看下面的拓扑进行STP选举实例分析:F是百兆链路cost=19,E是10M链路cost=100
绿色数字是端口的优先级
技术分享
问题:
1、STP选举的收敛时间是多少?
答:15秒,stp运行第一阶段,端口没有任何电信号disable,当借口有电信号或者no shutdown后转化为blocking状态,经过短暂的时间可能不到1秒,会转化为listening状态进行生成树的选举,包括root、rp、dp等,15秒的listening过后选举完成,接口进入learning状态用15秒来构建CAM表(防止flood),15秒后接口正式进入forwarding转发数据包状态。所以STP的选举时间为15秒。
2、STP多久可以转发数据?
答:30秒,要过了learning的创建CAM表的时间才能进入forwarding状态
 
3、网络中root是谁?
答:A,root的选择依据为发送者的BPDU中的BID,由priority+mac组成,越小越优先,拓扑中A的priority优先级数字最小,所以A被选举为ROOT。A、B、C所有接口会同时向外发送带有自己BID的BPDU,当A被选举为ROOT时,B和C不在发送BPDU。
 
4、网络中的RP是哪些?(RP永远是接受方向,永远是计算接受端口的参数,比如从哪个接口收到的BPDU就计算接受方向上所有接收端口的路径cost)

答:A上没有根端口,B上RP为1口,C上的RP为2口。选举依据是:1、比较接收端口的port path cost(该端口到达root的cost) 。2、比较 send BID 。 3、比较portID,port-priority+mac(小的优)。

A是根,根没有RP。
B上面:1口的cost=A的1口的cost+B的1口的cost=0+19=19,被选为RP(其中0为根的默认可以省略,下面也一样)
            3口的cost=A的1口的cost+D的3口的cost=19+19+19=57(因为sw收到bpdu以后只会在接口的cache中存储到达root路径最短的bpdu,所以cost计算的是最快短到达root的cost,这里3号口是从A1发出经过B1经过B4经过D3然后发送给B3的,其中B和D都是传递A的BPDU,用A的BPDU来计算RP和DP的,在ROOT选举后B和C本身不再发送BPDU了,而右边有10M链路到达root带宽小,所以SW会默认选择带宽大的路径来计算cost)
            4口的cost=A的1口的cost+D的4口的cost=19+19+19=57
C上面:2口的cost=A的2口的cost+C2口的cost=0+19,被选为RP
            6口的cost=A的1口cost+D11口cost=0+19+19+100
            8口的cost=A的1口cost+D10口cost=0+19+19+100
D上面:3口:A1口cost+B3口cost=0+19+19   被选为RP(cost与4口相同,比较sendBID(也就是B的BID)B来的(A)的BPDU,BID也相同
             4口:A1口cost+B4口cost=0+19+19
            10口:A2口cost+C8口cost=0+19+100
            11口:A2口cost+C6口cost=0+19+100
 
5、网络中的DP是哪些?永远是发送(转发)BPDU端口的send-BID(一般为该端口所属的SW)和端口到根的cost的值作为比较参数
答:根上所有端口是DP,所以A上1口、2口是DP
所有非根SW上直连RP的端口是DP。所以:
B上面:3口是DP
剩余比较选举DP,规则发送send-BID的端口到root的cost
显然B的BID小于D的BID,而C的BID小于D的BID。所以B连接D的4口是DP,D的4口自然是BLK。而C的8口和6口是DP,D的10口和11口自然是BLK。
假如说B和C和D的BID都一样的情况(当然不可能,除非是同一台设备,这里只是给出cost的算法),使用cost算法计算的话:
B上面:B4口和D4口进行比较,B4口send cost=19,D4的send cost=19+19(D4+B1的cost),B4口为DP
C上面:C6口和D11口比较,C6口send cost=19,D11口send cost=100+19,C6口被选为DP
            C8口和D10口比较,C8口send cost=19,D10口send cost=100+19,C8口被选为DP
D上面:10口和11口发送方向只能走C,所以D上面除了3口RP外都被Block了,只接收BPDU但是不处理,不接收数据帧。
 以上ROOT、RP、DP都选举完成,整个STP的选举过程结束,进入learning状态构建CAM表
 
6、网络拓扑改动的话需要多久能stp再次收敛?
答:50秒,因为SW的接口存储BPDU的默认时间是20秒,然后重新开始STP选举在经过30秒,故拓扑改变后需要50秒的切换才可以正常转发数据。
 
7、修改什么值能够改变RP和DP
答: cost值、bandwiteh

总结:1、root上所有接口都是DP
          2、RP面向(脸对着BPDU发来的方向)、DP背向BPDU数据流的发送方向
          3、Block端口不处理数据但是监听BPDU

          4、当拓扑改变时STP会强制使CAM表cache在选举过程中(15S)清除


STP的配置命令:
1、启用生成树命令
switch(config)#spanning-tree vlan vlan-list
通过在此命令前加no ,也可以关闭某个VLAN 的生成树。
2、配置根网桥的命令
switch(config)#spanning-tree vlan vlan-list root primary | secondary
可以使用此命令指定交换机的根网桥,如果配置为primary ,则交换机的优先级变成24576,配置为secondary,优先级变成28672,固定的。
3、修改网桥的优先级
switch(config)#spanning-tree vlan vlan-list priority 4096
4、修改端口成本
swithc(config)#spanning-tree vlan vlan-list cost 19
5、修改端口优先级
switch(config)#spanning-tree vlan vlan-list port-priority 64
6、配置上行速链路
switch(config)#spanning-tree uplinkfast
7、配置速端口
switch(config-if)#spanning-tree portfast
8、查看生成树的配置
switch#show spanning-tree
9、查看某个VLAN的生成树详细信息
switch#show spanning-tree vlan vlan-id brief
10、以太网通道的配置
switch(config)#interface range fastEthernet 0/1 - 2
switch(config-if-range)#channel-group 1 mode on 
creating a port-channel interface port-channel 1    出现此条信息说明成功配置
11、查看以太网通道的配置
switch#show etherchannel 1 summary
以上配置不加vlan选项则是对所有vlan生效,IEEE802.1d默认是没有所有vlan生效,而PVST+是单个vlan,可以实现多vlan负载减少带宽压力。

session 4 TCN-BPDU
       当转发端口关闭(例如被阻塞)或某端口在交换机已具有指定端口的情况下转换为转发状态时,交换机会认为自己检测到了拓扑更改。如果检测到更改,交换机会通知生成树的根桥。然后根桥将该信息广播到整个网络。
      在常规 STP 运行中,交换机通过根端口从根桥接收配置 BPDU 帧。不过,它绝不会向根桥发出 BPDU。为了能够通知根桥,人们引入了一种特殊的 BPDU,称为拓扑更改通知 (TCN,Topology Change Notification) BPDU。当交换机需要将拓扑更改信号发出时,它便开始通过根端口发送 TCN,接收交换机(称为指定网桥)会立即回送设置了拓扑更改确认 (TCA) 位的常规 BPDU,以确认收到 TCN,此交换过程会持续到根桥做出响应为止。TCN 是一种非常简单的 BPDU,它按 hello 时间间隔发送,其中不包含任何信息。
       正常情况下,交换机只会从它的Root Port上接收configuration BPDU包,但是绝不会主动发送configuration BPDU包给root bridge。  这里就需要提到第二种类型的BPDU包了,也就是Topology Change Notification(TCN) BPDU。  这样,当一台交换机检测到拓扑变化后,它就可以发送TCN给root bridge,注意TCN是通过root port向root bridge方向发出的.  当交换机从它的designate port接收到TCN类BPDU时,它必须为其做转发,从它自已的root port上发送出去TCN类型的BPDU包,这样一级一级地传到root bridge后,TCN的任务才算完成.  在以上的过程中,无论是哪台交换机从它的designate port上收到了TCN类型的BPDU包,它都必须给一个回复,必须从designate port上发出TCA位被置1的normal configuration BPDU包,注意,这里是正常的configuration BPDU包.它的TCA位被置1,表明是要给TCN以回复的,但它跟TCN不是一类型的包.  那么当TCN传遍全网,直至到达ROOT BRIDGE后,root bridge也要做出一种回应,它会发出一个正常的                      configuration BPDU包,当然会有一些不同,就是包内的TC字段会被置1,TC即topology change,表示发现拓扑变化.这个包会被所有交换机转发,同样的TC位会置1,直至传遍全网,所有交换机都得知拓扑变化为止. 
Configuration BPDU:从根桥沿着活动路径向外流动。交换机会一直在自己每个端口发送configuration BPDU,直到接收到了更好的configuration BPDU。如果邻居停止发送这些更加好BPDU,那么20秒后交换机又会从该端口发送BPDU
技术分享

Configuration BPDU originated by Root Bridge, 配置BPDU的特点是Root ID=BID
Topology Change Notification(TCN) BPDU:沿着活动路径向根桥流 动,主要作用是通知根桥当前活动拓扑已经发生变化。如果没有TCN BPDU那么拓扑一旦变化,收敛速度就不是50秒,而是300秒 (mac-address-table的aging-time) Topology Change Notication BPDU alert the Root Bridge that the  active topology has changed.
技术分享
最后:总结的重点
1、所有RP都用来接收BPDU
2、所有DP都用来发送BPDU
3、所有SW收到比自己BID优先级更小的BPDU后都会停止发送自己的BPDU而会为BID优先级更小的SW来转发它的BPDU给其他的SW

Layer2-STP生成树协议

标签:

原文地址:http://blog.csdn.net/alone_map/article/details/51858078

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!