先小结一下前三篇的内容:
CISCO ASR99作为高端路由器,一般在企业总部/DC出口、广域网核心,以及运营商城域边缘(Metro Edge)作为BRAS/SR使用,因此,整机采用了分布式和HA设计,包括NP+FIA+Switch Fabric构成的线卡和Switch Fabric+仲裁单元构成的交换网板。特别地,分布式交换网仲裁和VoQ交换的设计,避免了交换网内拥塞,也避免了线卡上单端口拥塞引发其他流丢包。
那么,ASR9900在控制平面的分布式HA实现是怎么做的呢?
如图,ASR9900的控制平面由主控CPU、线卡CPU以及NP的控制平面包处理单元构成。
当路由协议、BFD、生成树协议等数据包被送到NPU时,首先会由LPTS(Local Packet Transport Service)进行处理。由于控制平面处理能力大大低于转发平面,因此,LPTS会按照一定的策略进行限流,避免过多的本地数据包上送主控。
对于BFD这种数量大,周期频繁(3.3ms),处理简单(连续若干个周期没有收到即触发事件)的数据包,NP可以在本地硬件处理,不上送主控。
ARP,ICMP,OAM以及二层生成树协议等这种具有局部性的控制包则在线卡的CPU上处理。
什么控制包需要在主控CPU处理呢?
当然是涉及全局的控制包了。如路由协议、MPLS LDP,PIM,HSRP和VRRP等。
它们的工作界面划分如下:
记得我们提过的,FIB表项的生成过程吗?
对于分布式转发的路由器,实际上,FIB表项有软件FIB(SW FIB)和硬件FIB(HW FIB)的区别。为什么需要这样的设计呢?
原来,如果所有的线卡都向主控CPU发起查询,主控CPU的负担会比较重。因此,在主控CPU学习到路由后,会根据RIB选出合适的路由表项,生成软件FIB,并下发到各个线卡的CPU。当线卡NP收到转发不出去的数据包的时候,会在线卡CPU查询软件FIB,还查询不到的时候才会上主控查询。这样,就可以通过线卡上的CPU分担主控CPU下发FIB的工作,体现分布式系统的优势。
对于二层转发的情况,路由器与交换机的工作方式类似,需要对未知MAC学习。ASR9900的MAC学习分两步走:
控制平面还有一个重要任务,是处理OAM/BFD一类心跳报文。
由于BFD的数据包数量很多,以3.3ms周期计,每秒会产生300个。如果整机有480个接口,每秒钟整机需要处理144000个BFD报文。我们需要利用分布式的方法,避免这144K个BFD报文都在主控CPU处理。
如图,在主控(RP)上配置BFD之后,主控(RP)会维护一个BFD会话表,并将其下发到所在的线卡。每个线卡的NP芯片会处理BFD会话,并在BFD状态有变时,上报主控(RP)。RP会针对BFD状态倒换路由。
由于NP有着强大的数据包处理能力,在Tomahawk和LightSpeed线卡上支持NP处理BFD。
每个BFD Hello在NP上进行处理,NP发现连续三个BFD丢失,才会上报线卡CPU处理。
本期问题:
在一台ASR9906上配置了双主控,4块线卡和5块交换网板,那么,控制平面的功能由几颗CPU进行分担?
上期遗留问题解答:
既然ASR9900有N+1冗余的交换网板,而且同一线卡之间的NP也需要在交换网板上互通,为什么还要在线卡上设计Switch Fabric?
由于NP到接口的Serdes容量与到Switch Fabric的交换容量是相等的,因此,如果线卡上没有Switch Fabric提供到交换网板的冗余带宽,那么,无法实现交换网板的N+1冗余。