CEF简介

CEF是专门为高性能、高伸缩性的IP骨干网络设计的一种高速交换方式。在大规模的动态IP网络中,CEF能够提供前所未有的交换的一致性和稳定性。它能够有效弥补快速交换的高速缓存条目频繁失效的缺陷,采用dCEF分布式交换可使每个线路卡进行完全的交换,提供更优越的性能;CEF比快速交换的路由高速缓存占用内存要少,并能提供负载平衡,网络记账等功能。借助CEF特快交换技术和其它一些革命性的创新技术,Cisco的GSR路由器在全球取得了巨大的成功,在中国互联网基础设施建设中发挥着极其重要的作用。
 

CEF名词解释

CEF(Cisco快速转发)――CEF是一种第三层交换技术,CEF有两种模式:集中模式和分布模式,集中模式允许一个路由处理器执行快速转发。
DCEF(分布式CEF)――分布式CEF允许路由器的多个线路卡在端口适配器间分别运行快速转发。
FIB(转发数据库)――CEF的一个组件。它是路由器决定目标交换的查找表,是一个包含IP路由表中转发信息的镜像。
GSR(千兆交换路由器)――思科12000系列路由器。
线路卡――Cisco产品线中广泛应用的接口处理器的总称,例如:VIP就是7500系列路由器中的一种线路卡。
前缀――可以指出IP地址中的网络地址部分,它是IP地址和子网掩码的组合。子网掩码可以指出IP地址中有多少比特是网络比特。前缀的格式是:IP地址 /子网掩码。例如:10.0.0.0/16意味着IP地址中的前面16比特被标记了,它可以过滤出网络地址和主机地址,此例中网络地址是10.0。
route processor(路由模块/处理器)――Cisco7000或者Cisco7500路由器上路由处理模块的总称。
RP(路由模块/处理器)――Cisco7000系列路由器上的路由处理模块,它包含CPU、系统软件和路由器中的大部分内存组件。
RSP(路由交换模块/处理器)――Cisco7500系列路由器中结合路由模块(RP)和交换模块(SP)功能的模块。交换模块(SP)在Cisco7000系列路由器中扮演管理所有数据总线活动的管理员的角色。
VIP(通用接口模块)――Cisco7000和7500系列路由器使用的接口卡。VIP可以提供多层交换和CiscoIOS软件的运行。最新的版本是VIP和VIP2。
IPC(模块通讯)――这是一种机制,它可以确保在使用分散CEF模式时,RSP和线路卡的转发数据库(FIB)和邻接表信息同步。

CEF由来

    路由器和交换机其最主要的目的有两个:一是如何准确的把数据包(帧)从源地址送到目标地址,二是如何更快速的送达。
    一般来说对于一个路由器会有以下三步:
       查看这个包的目标地址是否可达
       决定目标地址的下一跳和接口。
       改写MAC的包头使得它可以成功的到达下一跳。

   以上三步是路由器包交换的根本,到现在为止所有衍生出来的包交换方法都必须完成以上三个过程。
到目前为止,包交换的方法有N种,其重要的有两类,第一个就是进程交换,而第二类名字叫做“Interrupt Context Switching”
   进程交换,顾名思义,就是要创建进程,我们知道处理器在工作的时候是按照schedule(计划)进行工作的,而进程交换就是这样的,它会创建一个名 为“IP_INPUT”(假设讨论的是IP包),然后放入到处理器的SCHEDULE中等待,什么时候排到了什么时候执行这个进程。
   Interrupt Context Switching跟进程交换的区别之一就是“不排队”,只要有包过来就先 处理它,等它处理完了,处理器再回去干它SCHEDULE中的工作。另外一个不同点,就是增加了“缓存”,处理器在查找目标地址可达、下一跳这些信息的时候不是直接去查找路由表而是去查找缓存。即通过中断与缓存来实现。
   根据缓存的技术不同又有了fast switching、optimum switching、CEF


fast switchig


这也是快速交换中的缓存数据结构,快速交换把外出接口信息和需要重写的MAC地址放到二叉树中相应的节点上,而需要转发到的目的地址就是二叉树上节点所代表的地址。如果这是一个真实的IPV4地址的话,我们最多需要32次查找便可以找到我们需要的网段。鉴于IPV4地址的长度原因,快速交换的二叉树深度是32。但不足是:
1、由于这个快速缓存是凭空建立的,并没有和路由表以及MAC缓存建立联系,所以当我们想应用快速交换进行查找的时候必须要先进行一次完整的过程交换。
2、由于在快速缓存中一个节点对应着一个地址,而且没有指针可以链接各个节点,所以无法实现递归查询。
不过这并不影响路由器使用递归查询,因为当每一个新的数据包进来之后都要进行一次进程交换,其间已经完成了递归查询。
3、由于节点信息的建立是由路由表和ARP缓存而来,当路由表或者是ARP缓存刷新时,对应的节点应该无效,这时就必须重新建立一个二叉树,在这个过程中 快速交换是无法使用的,只能用传统的进程交换,试想如果这是一个非常大的网络,其网络状态不断变化,这将会大大影响快速交换的效率。


optimum switching

主要就是改进了快速交换的数据结构,它重新构造了一个多枝(256-way mtree),如图所示,这样一来它最多只需要四次查找就可以达到目的,而一般来说只需要一到三次查找就可以了。

CEF

 

 

CEF是在快速交换和Optimum Switching的基础上发展起来的第三代基于 Interrupt Context Switching的交换方式,它很好的克服了前两种方法带来的弊端。为了更快速的找到目的地址可达性信息,它依旧采用了Optimum Switching的mtree方式,唯一有区别的是CEF构建的mtree节点中并没有包含外出接口MAC地址这些信息,而是变成了一个指针,指向一个单独建立的表。

路由交换算法简史

过程交换
最初的Cisco路由器采用集中式CPU包交换,所有的包通过共享总线传到CPU,经路由表查找,CRC重算,再通过共享总线把包传到适当的线路卡上。
快速交换
到达某特定目的地址的IP包通常会引起数据包流,即假设交换过到特定目标的包之后,另一个很可能不久也会到达。通过构建最近交换目标的高速缓存,可以减少包在全路由表中查找同一目标的次数,这种“一次路由,然后交换”的方式称为快速交换,快速交换大大提高了路由器的包转发速率,因而成为Cisco路由器平台上缺省的交换机制。但有一点需要注意,IP路由表的改变会使得高速缓存无效,在路由状况不断变化的环境中,路由高速缓存的优势将受到很大限制。
自治交换
自治交换的特点是从CPU中卸载了一些交换功能。在效果上,将路由高速缓存功能从CPU移到辅助交换处理器上,线路卡上的接收包先在交换处理器中完成本地路由高速缓存目标的查找,若查找失败时才中断CPU执行路由表查找。在此,Cisco将周期性计算路由的CPU改名为路由处理器,把辅助交换处理器改名为交换处理器。Cisco 7000系列的路由器上执行自治交换,可使吞吐量等性能进一步提高。
分布式交换
随着VIP(Versatile Interface Processor,通用接口处理器)卡引入,路由器的交换体系逐渐向对等多处理器结构发展。每个VIP卡都包含RISC处理器,维护最新的由路由交换处理器产生的快速交换高速缓存的拷贝,并能独立实现路由交换的功能,高速完成两种类型的交换---本地VIP的交换和VIP之间的交换。
CEF特快交换
如前所述,快速交换的高速缓存机制在Internet之类的高速动态路由选择环境(经常存在网络拓扑变化,路由改变、路由震荡等)中不能很好地伸缩,路由的改变导致高速缓存无效,而重建高速缓存(即执行“过程交换”的过程)在计算上开销很大;同时,随着互联网及其业务的迅猛发展,基于WEB的各种应用和交互式业务使得通信次数多而通信时间短的实时数据流大量增加,快速交换的高速缓存内容处于不断变化之中,重建高速缓存的负担加大,从而导致路由器性能的降低。CEF特快交换技术正是针对上述不足而设计提出的。

CEF原理

CEF的组件

CEF邻接表
邻接表用于MAC或者第二层信息的重写。第二层信息能通过ARP,ATM,FrameRelay的映射状态等方式学到。下图中就有对应的第二层字段以及这些字段是如何被学习到的。

CEF转发表(FBI)

用于进行3层的转发决策。路由表中关于转发比较核心的内容如:IP前缀,递归的下一跳,出站接口会记录在CEF表中。但是非核心的东西比如管理距离和度量值就被CEF表忽略了。

当报文进入路由器的时候,路由器将报文的二层信息剥掉。在CEF表中查找相关的IP地址,进行转发决策。决策结果会指向邻接表的一条条目。在邻接表中找回二层需要重的写信息,构建新的二层头部,转发到对应的下一跳接口。通过这两张表,CEF同时扮演了第3层查找和第2层祯重写的角色。

CEF转发过程

 

3层包从TCAM开始查找;进行最长匹配,得到邻居信息,改写原有二层数据帧(下一跳MAC地址)并转发。 CEF表是从路由表得来,邻居表是使用ARP解析得来的。

如果目的IP地址的MAC不在邻居表内,则SW将使用ARP进行解析,以得到目的地址的MAC地址。

ARP Throttling(ARP抑制):在未获得目的MAC地址并且进行ARP解析时,除非ARP解析完成并且在邻居表体现出来外,在解析期间,所有发往目的主机的包,将被丢弃.FIB最多支持6个到达同一目的的邻居条目。

CEF操作模式

  集中式 允许一个路由处理模块运行特快交换,即FIB和邻接表驻留在路由处理模块中,当线路卡不可用或不具备分散CEF交换的功能时,就可使用集中CEF交换模式。   

   分布式(一般记作dCEF)允许路由器的多个线路卡(VIP)分别运行特快交换功能,前提是线路是VIP线路卡或GSR线路卡。中央路由处理器完成系统管理/路由选择和转发表计算等功能,并把CEF表分布到单个线路卡;每个线路卡维护着一个FIB和邻接表的相同的拷贝。线路卡在端口适配器之间执行快速转发,这样,交换操作就无需路由交换模块的参与了。DCEF采用一种“内部过程通信”机制来保证路由处理器和接口卡之间FIB和邻接表的同步。   Cisco 12000系列路由器只运行dCEF模式,由线路卡执行交换功能。在其它路由器中,可以在同一个路由器中混合使用各种类型的接口卡,如果一个不支持CEF的接口卡收到数据包后,将把数据包转发到路由处理器来进行处理,或把该数据包转发到下一个网络段处理。   CEF在路由器上是全局激活的,但可在每个接口(或VIP的底板)上启用/禁用CEF;CEF和快速交换模式也可同时运行,但不推荐这样使用,因为会占用大量的系统维护资源。

基于CEF的负载平衡的实现

  当到达某一目的IP地址存在多条路径时,每条路径都有一个反映其代价的metric值,路由协议通过计算获得到达目的地址的具有最短metric值的路径,数据包通过该路径到达目的地址。负载平衡的目的则是要把流量分配到多条路径中,这样可优化资源的使用。CEF特快交换支持两种类型的负载平衡---按目的地配置的负载平衡和按数据包配置的负载平衡。

1.按目的地配置负载平衡

  基本原理是:对于给定的一对源/目的IP地下,即使有多个路径可用,也可保证数据包采用同一路径;通往不同源/目的IP地址的数据流则倾向于采用不同的路径。通过采用按目的地负载平衡的方法,可以保证对某个源/目的IP地址对的数据包以一定的次序到达。当启用CEF时,按目的地配置的负载平衡被默认启用。

2.按数据包配置负载平衡

  基本原理是:采用轮转法确定各个数据包按哪条路径到达目的地。这种负载平衡方法可使路由器在路径上连续发送数据包,即保证路径的使用状况比较好,但针对一个源/目的IP地址对的数据包可能会采用不同的路径,从而导致目的端对数据包的重新排序。这种类型的负载平衡对某些类型的数据流传送不是很合适(如VoIP数据流)。当然,若在某一源/目的IP地址对之间有大量的数据流,通过并行链路传送,如果按目的地负载平衡方式,将会使某条链路负担过重,而其他链路上的数据流很少,此时采用按数据包的负载平衡是合理的。

CEF与快速交换的比较

  与快速交换相似,CEF也使用自己建立的数据结构(而不是路由表)来执行交换操作。快速交换通过生成并查找路由高速缓存交换数据包,该路由高速缓存交换数据包,该路收高速缓存的条目(包括目的IP地址,输出接口,MAC地址头信息等)是在第一个数据包到来时,对整个路由表执行最长匹配查找算法获得下一跳IP地址,然后查找ARP缓存获得第二层的MAC地址信息,并写入路由高速缓存,之后的数据包则根据已经生成的高速缓存的条目直接重写MAC头信息完成交换操作。   CEF通过FIB和邻接表对数据包进行交换,但FIB和邻接表是在数据包到来以前,由CPU根据路由表生成并定时更新的,因此到达路由器的第一个数据包也无须执行查找路由表的过程,直接由FIB和邻接表获得新的MAC头信和卢,就可进行交换了,对于拥有大容量路由表的路由器来说,这种预先建立交换查找条目的方式能够有效地提高交换性能。

CEF配置命令 

 

启用标准CEF模式 ip cef switch

禁用标准CEF模式 no ip cef switc

启用dCEF模式    ip cef distributed switch

禁用dCEF模式    no ip cef distributed switch

在某个接口上禁用CEF或dCEF,可以在接口配置模式:    no ip route-cache cef

尔后又想重新启用CEF,在接口配置模式下,可以使用: ip route-cache cef

 

基于数据包的负载均衡:

当启用基于数据包的负载均衡功能时,必须先禁用基于目的地的负载均衡功能。

为了禁用基于目的地的负载均衡功能,可以在接口配置模式下,

no ip load-sharing per-destination

要启用基于数据包的负载均衡功能,可以在接口配置模式下,

ip load-sharing per-packet

 

为CEF配置网络记账功能

启用收集被快速转发到某个目的地的数据包个数和字节数

ip cef accounting per-prefix

启用收集通过某个目的地被快速转发的数据包的个数

ip cef accounting non-recursive

查看网络记帐信息 show ip cef