STP(生成树协议的实现)STP乃交换部分的核心所在!!!!!
生成树协议是一种二层管理协议,它通过有选择性地阻塞网络冗余链路来达到消除网络二层环路的目的,同时具备链路的备份功能。
生成树协议和其他协议一样,是随着网络的不断发展而不断更新换代的。“生成树协议”是一个广义的概念,并不是特指IEEE 802.1D中定义的STP协议,而是包括STP以及各种在STP基础上经过改进了的生成树协议。
STP/RSTP
在网络发展初期,透明网桥的运用。它比只会放大和广播信号的集线器聪明得多。它的学习能力是把发向它的数据帧的源MAC地址和端口号记录下来,下次碰到这个目的MAC地址的报文就只从记录中的端口号发送出去,除非目的MAC地址没有记录在案或者目的MAC地址本身就是多播地址才会向所有端口发送。通过透明网桥,不同的局域网之间可以实现互通,网络可操作的范围得以扩大,而且由于透明网桥具备MAC地址学习功能而不会像Hub那样造成网络报文冲撞泛滥。
透明网桥也有它的缺陷,它的缺陷就在于它的透明传输。透明网桥并不能像路由器那样知道报文可以经过多少次转发,一旦网络存在环路就会造成报文在环路内不断循环和增生,出现广播风暴。
为了解决这一问题,后来提出了生成树协议。
STP协议中定义了根桥(RootBridge)、根端口(RootPort)、指定端口(DesignatedPort)、路径开销(PathCost)等概念,目的就在于通过构造一棵自然树的方法达到裁剪冗余环路的目的,同时实现链路备份和路径最优化。用于构造这棵树的算法称为生成树算法SPA(Spanning TreeAlgorithm)。
要实现这些功能,网桥之间必须要进行一些信息的交流,这些信息交流单元就称为配置消息BPDU(BridgeProtocol Data Unit)。STP BPDU是一种二层报文,目的MAC是多播地址01-80-C2-00-00-00,所有支持STP协议的网桥都会接收并处理收到的BPDU报文。该报文的数据区里携带了用于生成树计算的所有有用信息。
生成树协议的工作过程:
首先进行根桥的选举。选举的依据是:网桥优先级和网桥MAC地址组合成的桥ID(Bridge ID),桥ID最小的网桥将成为网络中的根桥。在网桥优先级都一样(默认优先级是32768)的情况下,MAC地址最小的网桥成为根桥。:
《 网桥的优先级由 2个字节的优先级和6字节的MAC地址组成》
接下来,确定根端口,根据与根桥连接路径开销最少的端口为根端口,路径开销等于‘1000’除于‘传输介质的速率’假设中SW1和跟桥之间的链路是千兆GE链路,跟桥和SW3之间的链路是百兆FE链路,SW3从端口1到根桥的路径开销的默认值是19,而从端口2经过SW1到根桥的路径开销是4+4=8,所以端口2成为根端口,进入转发状态。
根端口是非根网桥到达网桥路径成本最低的那个端口。不同的链路带宽根据IEEE 802的标准个为下:
10000MB 开销为(2)1000MB(4)100MB(19)10MB(100)
根桥和根端口都确定之后然后是裁剪冗余的环路。这个工作是通过阻塞非根桥上相应端口来实现的。
生成树经过一段时间(默认值是30秒左右)稳定之后,所有端口要么进入转发状态,要么进入阻塞状态。STPBPDU仍然会定时从各个网桥的指定端口发出,以维护链路的状态。如果网络拓扑发生变化,生成树就会重新计算,端口状态也会随之改变。
(以上所讲我得补充一下,,,课堂上老师讲到这样一个问题,在同一交换机上当拓扑发生变化时,阻塞端口立即进入了侦听状态。免去前面20s的准备等待时间。这只是在同一交换机上才行```)
拓扑变化后生成树的重新计算(收敛)(当拓扑发生变化时。端口所在的交换机指定端口向上级交换机发送TCN(拓扑变化通知)上级接收到后回应一个TCA(确认信息)于此同时上级交换机也会把TCN信息送到根交换机。根交换机收到TCN后立即向各交换机传播TC 报文信息 。其他交换机收到来自根桥发来的TC报文信息。然后将MAC老化时间更改为15s(默认情况下是300s)·········
当然生成树协议还有很多内容,其他各种改进型的生成树协议都是以此为基础的,基本思想和概念都大同小异。
STP协议给透明网桥带来了新生。但是它还是有缺点的,STP协议的缺陷主要表现在收敛速度上。
当拓扑发生变化,新的配置消息要经过一定的时延才能传播到整个网络,这个时延称为Forward Delay,协议默认值是15秒。在所有网桥收到这个变化的消息之前,若旧拓扑结构中处于转发的端口还没有发现自己应该在新的拓扑中停止转发,则可能存在临时环路。为了解决临时环路的问题,生成树使用了一种定时器策略,即在端口从阻塞状态到转发状态中间加上一个只学习MAC地址但不参与转发的中间状态,两次状态切换的时间长度都是Forward Delay,这样就可以保证在拓扑变化的时候不会产生临时环路。但是,这个看似良好的解决方案实际上带来的却是至少两倍Forward Delay的收敛时间!
为了解决STP协议的这个缺陷,在世纪之初IEEE推出了802.1w标准,作为对802.1D标准的补充。在IEEE 802.1w标准里定义了快速生成树协议RSTP(Rapid Spanning Tree Protocol)。RSTP协议在STP协议基础上做了三点重要改进,使得收敛速度快得多(最快1秒以内)。
第一点改进:为根端口和指定端口设置了快速切换用的替换端口(Alternate Port)和备份端口(Backup Port)两种角色,当根端口/指定端口失效的情况下,替换端口/备份端口就会无时延地进入转发状态。
第二点改进:在只连接了两个交换端口的点对点链路中,指定端口只需与下游网桥进行一次握手就可以无时延地进入转发状态。如果是连接了三个以上网桥的共享链路,下游网桥是不会响应上游指定端口发出的握手请求的,只能等待两倍Forward Delay时间进入转发状态。
第三点改进:直接与终端相连而不是把其他网桥相连的端口定义为边缘端口(Edge Port)。边缘端口可以直接进入转发状态,不需要任何延时。由于网桥无法知道端口是否是直接与终端相连,所以需要人工配置。
可见,RSTP协议相对于STP协议的确改进了很多。为了支持这些改进,BPDU的格式做了一些修改,但RSTP协议仍然向下兼容STP协议,可以混合组网。虽然如此,RSTP和STP一样同属于单生成树SST(SingleSpanning Tree),有它自身的诸多缺陷,主要表现在三个方面。
第一点缺陷:由于整个交换网络只有一棵生成树,在网络规模比较大的时候会导致较长的收敛时间,拓扑改变的影响面也较大。
第二点缺陷:在网络结构对称的情况下,单生成树也没什么大碍。但是,在网络结构不对称的时候,单生成树就会影响网络的连通性。
第三点缺陷:当链路被阻塞后将不承载任何流量,造成了带宽的极大浪费,这在环行城域网的情况下比较明显。
(忘了说下STP的防护功能了。简单的略说下STP的防护作用,和CISCO公司的三个重要的特性)。
portfast(速端口)配置在二层接口,只能写终端机器相连接,在交换机之间不能连接。不然会出现新的环路。
原理:抑制TCN,使用伪多播帧连接根,通告链路故障MAC地址,进而便于上游交换机能够将MAC地址表从发生故障的链路立即移动到新端口。(vlan优先级配置过这不能再开启uplinkfast,这个命令影响的是所有的vlan.)配置了速端口特性的端口只能接收BPDU不能发送BPDU。
配置命令在接口模式下:(config-if)# spanning-tree portfast
uplinkfast :在接入层交换机上配置,使交换机端口发生变化时,即刻进入转发状态。不需要在经过侦听和学习。“有一种情况当端口处于同一交换机时在毫秒级间完成端口状态的转换,如果端口不在同一交换机上,还是需要30s时间才能完成转换。”
在全局模式下:(config)#spanning-tree portfast uplinkfast
backbonefast:用于核心中,收敛能从50s降到30s,但用的少,因为核心都是跑的路由,靠路由收敛了。原理。加快STP收敛通过RLQ查询报文来工作,cisci似有,到底层交换机收到来自其他骨干交换机的次优BPDU时。通过RLQ探测根是否还健在,如果在,将告知备用ROOT。
当骨干链路出现故障后,备用链路在3个周期6s内没有收到root的BPDU然后会主动发送次优BPDU通过底层交换机的RLQ来查询ROOT是否存在,之后通过30s时间完成转接口状态的转换。
在全局模式下:(config)#spanning-tree portfast backbonefast
stp的防护:(提高生成树的弹性:BPDU防护:防止交换设备接到portfast口,引起环路,如果接上了,使其进入err状态
比如说,在一个稳定的STP拓扑里,加入了一台新的交换机。要是这台交换机不小心接入到配置了PORSTFAST!!ROOT是不能检测到括扑的变化。因为portfast只接受BPDU不能发送。这会造成临时的环路)
配置过程:
方法一:全局配置模式
1) 全局配置模式 configure terminal
2) 配置bpdu保护
(config)#spanning-tree portfast bdpuguard default
3) 进入接口模式 interface 接口
4) 接口使能portfast,bpdu保护才能启用
(config-if)#spanning-tree portfast
方法二:接口模式
1) 接口模式下 interface 接口
2) 使能bpdu保护
(config-if)#spanning-tree bpduguard enable
验证过程:
show running-configure
根防护:ROOT GUARD
防止收到更优的BPDU网桥成为根桥,根桥的一种保护机制。 根收到superior bpdu后端口进入ROOT-INCINTET根不一致状态中,该状态不会收发数据,知监听BPDU不会成为根,当收到次优BPDU后端口才进入正常STP操作状态,开始转发数据。
BPDU过滤:
用于过滤接终端interface发bpdu影响终端设备(接口在接入终端后。接口依然会接收根桥发来的BPDU,因为根桥第隔2s发送一次BPDU。主机接收到后也不能识别,然后只能丢弃,这其实是大大浪费了带宽。)
如果全局配置了bpdu过滤功能,但当某个端口接收到了任何的bpdu,那么交换机将把接口更改回正常的stp操作,也就是它将禁用portfast和 bpdu过滤特性。
如果在接口上明确配置了bpdu过滤功能,那么交换机将不发送任何的bpdu,并且将把接收到的所有bpdu都丢弃。
注意,如果在链接到其他交换机的端口上配置了bpdu过滤,那么就有可能导致桥接环路,所以在部署bpdu过滤时要格外小心,一般我们不推荐使用bpdu 过滤!!!!
如果在与启用了bpdu过滤的相同接口上配置了bpdu保护,因为bpdu过滤的优先级高于bpdu保护,所以bpdu保护将不起作用。 (呵~其实老师讲的满详细的!!!!高人就是高人呢?)
配置过程:
方法一:全局配置模式
1) 全局配置模式 configure terminal
2) 配置bpdu保护
(config)#spanning-tree portfast bdpufilter default
3) 进入接口模式 interface 接口
4) 接口使能portfast,bpdu保护才能启用
(config-if)#spanning-tree portfast
方法二:接口模式
1) 接口模式下 interface 接口
2) 使能bpdu保护
(config-if)#spanning-tree bpduguard enable
验证过程:
show running-configure
BPDU时滞:核心交换机上使用的技术,防止交换机过忙无法正常发bpdu,如果出现这种情况,通告snmp引起网管的戒备;
根保护:抵制新接入的交换机因为priority高而成为根;
(config)#spanning-tree guard root
loop防护:该技术不能与根保护一起用。
如果同时配置BPDU防护和BPDU过滤,过滤生效
!!!!!!!!!!
在IEEE 802.1D里的缺陷是显而易见的收敛就是一个大问题 ,于是支持VLAN的多生成树协议出现了。
这一节:
(PVST)VLAN 的生成树)基于CISCO私有的,没办法谁叫CISCO是网络设备的龙头企业呢····?
上节大概的介绍了STP整个运作的过程,,但是同时,也给网络带来了更多的麻烦,,第一点,它的收敛太慢,一般的正常时间都要(50s)这要是在一个大的网络是不允许的。并且在整个网络里,只运行一棵生成树,没有考虑到VLAN。正因为这样,CISCO公司又推出了PVST(基于VLAN的生成树)每一个VLAN运行一棵生成树。
每个CISCO的交换机上,默认的VLAN1运行STP 其他的VLAN运行PVST,PVST的好处是 在多个VLAN里。根桥可以在不同交换机上(这当然了也可以在同一交换机)。在数据传输中可以实现负载均衡,相互备份。
PVST的缺点:它不向下歉容STP(谁叫他是私有的呢)后面CISCO有推出了PVST的加强版(PVST+)可以实现STP的PVST的互通。同时如果有太多的VLAN的话,过多的运行生成树会影响交换机的性能。在CISCO的交换机上,只能支持64个生成树吧好像!!)
在其它厂商并不支持CISCO的STP所以下了节的笔记是IEEE802 这个委员会制定的新的生成树标准。。(哎国庆7天呢~要是不放假的话可能这STP都要讲完了,自学的话不是弄的很明白,我想只要是对前面IEEE802.1D的生成树有一个深度的了解后,后面在学习改进过的新生成树应该不会很陌,因为所有的生成树都是通过它为基础的吧,通过自己反复的研究后,在课堂上老师在讲。效果真的好很多了.
期待下一次课)。。。。。
老师一般很少写自己的板书的。很多的都是自己用笔记记的,有时候久了就连自己都忘了。
(笔记在不段的完善中)!!
快速生成树(RSTP)
快速生成树又名为IEEE802.1W为提高生成树的加快收敛而提出。和IEEE802.1D的区别在于。
1.RSTP明确了端口特性状态,更加的优化了。
在STP的学习状态中,数据进来是不会被丢弃的,通过学习玩MAC地址后,才会把进来的数据丢弃
所以他不会转发数据。
STP 5种状态,D\B\L\L\F 前三种状态是不会转发数据,数据不能从端口进来,所以在RSTP
中去掉了前面三种状态,简化了只有三种状态,D/L/F。并且RSTP明确了端口角色,RP(AP).DP(BP)
同时AP和BP状态都是阻塞的。替换口是给根口做备份的,备份口是给指定口做备份的。STP并没有明确端口的角色。
EDGEport 相对于cisco 的portfast ,说白了这三点改进就是利用了cisco的三个特性结合又将名字改了而的得到的、
RSTP的BPDU结构。在一个字节的协议位里从0到7个字节的bit位中,RSTP明确了各个状态的角色。
7 6 5 4 3 2 1 0
TCA agrement F L port role propasal TC
在端口角色(port role)中有四种角色(00 未知 01 根口 10 alternate/backup 11 指定口
RSTP P/A 协商机制。
采用分段收敛的协商过程。在进行P/A协商过程间不能有环路,两两间确保无环路才能进行P/A协商
当括扑发生变化后RSTP和STP的操作区别。
STP:从底层SW向上层发送TCN,上层交换机在向ROOT转发TCN,于此同时在给予他下层TCA回应
确定收到TCN。TCN到达ROOT后,ROOT向所有交换机转发TC置位。底层交换机收到ROOT下发的TC
然后将MAC地址设置为15s也就是说在15s内将无用的MAC地址从自己的MAC表中清除。之后重新学习,
所以说整个过程都要等到根桥发送发送来的TC在会触发。被动的等待。
RSTP:具有主动的机制,从下层交换机收到TC上层交换机收到后在本身的端口触发一个TCwhile(计时器)
默认时间是4s然后将无用的MAC地址从MAC表里面清除。然后重新学习,在进行清除的同时向外转发TCN
使其能够让其他交换机清除无用的MAC地址!注“在TCWhile4s超时后,交换机将暂停向外转发TCN
”。
使用P/A协商机制的三个条件:
1、P/A只会出现在点到点的线路中。
2、端口发送P协商位必须为指定端口
3、并且状态为丢弃或者学习状态。
(环路要以根为主)
完善中!