标题：CEF技术
基本介绍
传统路由器的基本作用是路由计算和包转发，通常基于共享存储器体系结构，采和集中式CPU，即单个CPU（或多个CPU，联结成路由器簇）控制共享总线，连接到多个接口卡上，接口卡包含简单的队列等结构，与CPU通信，通过共享总线实现数据包转发。随着Internet的快速发展和大量新的服务需求的不断出现，对网络的路由和交换性能提出了更高的要求，要同时提高包转发速率和系统的性能，必须对传统路由器与交换设备的设计体系结构进行改进，并加入一些新的设计方案以完善系统性能。CEF（Cisco Express Forwarding,Cisco特快交换）技术是思科公司推出的一种全新的路由交换方案，它具有良好的交换性能，增强的交换体系结构和极高的包转发速率。采用CEF技术的GSR1200系列千兆交换路由器，在体系结构，路由方式和接口卡性能等方面都有质的改变，特别适用于大业务量的ISP网络的核心层，同时也广泛应用于高速企业网的主干。　　
路由器交换算法的简单回顾
过程交换最初的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是一种高级的第三层交换技术，它主要是为高性能、高伸缩性的第三层IP骨干网交换设计的。为优化包转发的路由查找机制，CEF定义了两个主要部件：转发信息库（Forwarding Information base）和邻接表（Adjacency Table）。
转发信息库（FIB）是路由器决定目标交换的查找表，FIB的条目与IP路由表条目之间有一一对应的关系，即FIB是IP路由表中包含的路由信息的一个镜像。由于FIB包含了所有必需的路由信息，因此就不用再维护路由高速缓存了。当网络拓扑或路由发生变化时，IP路由表被更新，FIB的内容随之发生变化。
CEF利用邻接表提供数据包的MAC层重写所需的信息。FIB中的每一项都指向邻接表里的某个下一跳中继段。若相邻节点间能通过数据链路层实现相互转发，则这些节点被列入邻接表中。
系统一旦发现邻接关系，就将其写到邻接表中，邻接序列随时都在生成，每次生成一个邻接条目，就会为那个邻接节点预先计算一个链路层头标信息，并把这个链路层头标信息存储在邻接表中，当决定路由时，它就指向下一网络段及相应的邻接条目。随后在对数据包进行CEF交换时，用它来进行封装。欲查看邻接表的有关信息，可以使用Cisco IOS的命令：show adjacency/show adjacency detail。当我们查看邻接表信息时，会发现有以下两种主要邻接类型：Host adjacency和Point to Point。Host adjacency类型通常的显示是一个IP地址，它表示邻接的下一跳IP地址；Point to Point类型的显示是“point 2point”，表示这是一条点对点电路。此外还有其他一些特殊类型，如Null adjacency、Glean adjacency等，此外不再赘述。CEF操作模式CEF有两种模式：集中式和分布式。集中式允许一个路由处理模块运行特快交换，即FIB和邻接表驻留在路由处理模块中，当线路卡不可用或不具备分散CEF交换的功能时，就可使用集中CEF交换模式。
分布式（一般记作dCEF）允许路由器的多个线路卡（VIP）分别运行特快交换功能，前提是线路是VIP线路卡或GSR线路卡。中央路由处理器完成系统管理/路由选择和转发表计算等功能，并把CEF表分布到单个线路卡；每个线路卡维护着一个FIB和邻接表的相同的拷贝。线路卡在端口适配器之间执行快速转发，这样，交换操作就无需路由交换模块的参与了。DCEF采用一种“内部过程通信”机制来保证路由处理器和接口卡之间FIB和邻接表的同步。
Cisco 12000系列路由器只运行dCEF模式，由线路卡执行交换功能。在其它路由器中，可以在同一个路由器中混合使用各种类型的接口卡，如果一个不支持CEF的接口卡收到数据包后，将把数据包转发到路由处理器来进行处理，或把该数据包转发到下一个网络段处理。
CEF在路由器上是全局激活的，但可在每个接口（或VIP的底板）上启用/禁用CEF；CEF和快速交换模式也可同时运行，但不推荐这样使用，因为会占用大量的系统维护资源。
CEF与快速交换的比较
与快速交换相似，CEF也使用自己建立的数据结构（而不是路由表）来执行交换操作。快速交换通过生成并查找路由高速缓存交换数据包，该路由高速缓存交换数据包，该路收高速缓存的条目（包括目的IP地址，输出接口，MAC地址头信息等）是在第一个数据包到来时，对整个路由表执行最长匹配查找算法获得下一跳IP地址，然后查找ARP缓存获得第二层的MAC地址信息，并写入路由高速缓存，之后的数据包则根据已经生成的高速缓存的条目直接重写MAC头信息完成交换操作。
CEF通过FIB和邻接表对数据包进行交换，但FIB和邻接表是在数据包到来以前，由CPU根据路由表生成并定时更新的，因此到达路由器的第一个数据包也无须执行查找路由表的过程，直接由FIB和邻接表获得新的MAC头信和卢，就可进行交换了，对于拥有大容量路由表的路由器来说，这种预先建立交换查找条目的方式能够有效地提高交换性能。
基于CEF的负载平衡的实现
当到达某一目的IP地址存在多条路径时，每条路径都有一个反映其代价的metric值，路由协议通过计算获得到达目的地址的具有最短metric值的路径，数据包通过该路径到达目的地址。负载平衡的目的则是要把流量分配到多条路径中，这样可优化资源的使用。CEF特快交换支持两种类型的负载平衡－－－按目的地配置的负载平衡和按数据包配置的负载平衡。按目的地配置负载平衡基本原理是：对于给定的一对源/目的IP地下，即使有多个路径可用，也可保证数据包采用同一路径；通往不同源/目的IP地址的数据流则倾向于采用不同的路径。通过采用按目的地负载平衡的方法，可以保证对某个源/目的IP地址对的数据包以一定的次序到达。当启用CEF时，按目的地配置的负载平衡被默认启用。按数据包配置负载平衡基本原理是：采用轮转法确定各个数据包按哪条路径到达目的地。这种负载平衡方法可使路由器在路径上连续发送数据包，即保证路径的使用状况比较好，但针对一个源/目的IP地址对的数据包可能会采用不同的路径，从而导致目的端对数据包的重新排序。这种类型的负载平衡对某些类型的数据流传送不是很合适（如VoIP数据流）。当然，若在某一源/目的IP地址对之间有大量的数据流，通过并行链路传送，如果按目的地负载平衡方式，将会使某条链路负担过重，而其他链路上的数据流很少，此时采用按数据包的负载平衡是合理的。
小结
CEF是专门为高性能、高伸缩性的IP骨干网络设计的一种高速交换方式。从上述介绍我们不难看出，在大规模的动态IP网络中，CEF能够提供前所未有的交换的一致性和稳定性。它能够有效弥补快速交换的高速缓存条目频繁失效的缺陷，采用dCEF分布式交换可使每个线路卡进行完全的交换，提供更优越的性能；CEF比快速交换的路由高速缓存占用内存要少，并能提供负载平衡，网络记账等功能。借助CEF特快交换技术和其它一些革命性的创新技术，Cisco的GSR路由器在全球取得了巨大的成功，在中国互联网基础设施建设中发挥着极其重要的作用。