MLS有较大的缺陷,采用Flow Mask形式,每次流转发都要经过一次 路由,才能将后续报文进行交
换。当一个网络浏览特别大的时候,且过滤颗粒度非常小的时候,将会产生大量的流。因此会导致 路由
器转发丢失一些报文,
CEF 采用一个 4 级每级 256 条通道结构的转发表来指明转发条目的位置,转发表有 next  hop 等信
息,涵盖了整个IPv4的地址范围,并有指针指向另一个邻接表。转发条目(MAC地址之类)都存储在一个
单独的邻接表上。这两个表包括了所有的转发信息,而这些转发信息是根据 路由表和 ARP 来构造的。
CEF简化了查询的步骤,提高了单位时间的工作效率。而且从整体上来看, 路由信息和转发信息是分离
的,数据包的转发只根据转发信息而不用参照 路由信息,可以充分利用专用硬件的功能来达到线速转发,
而不受 路由变化或者其他因素的干扰,保证了转发的高速高效。
 
需要指出的是,CEF的转发信息不是存储在cache里的,因此也不存在过期作废或定时刷新,只有
根据 路由表的变化而进行的更改,通常很稳定。而且转发信息是从 路由信息经过一定处理后转换过来的,
也就是说,如果在转发信息里找不到某个数据包的转发信息,那么也不用费心到 路由那里去了,因为那
里肯定也没有。这个数据包的下场不是被扔掉就是转到其他转发线程中去,转发信息等于是 路由信息针
对于硬件转发的一个变形。
 
这样的结构布局保证了 路由功能和交换功能的分离(软件上)。 路由功能只处理三层以上信息,如路
由信息处理、策略等,然后形成一个 路由表,再根据这个 路由表生成相应的转发信息。转发功能很明确,
就是根据这些转发信息来工作,没有相关信息就拒绝。而不象 MLS 那样,遇到不认识的还得回头找路
由问明白,那样降低了转发效率。
CEF在软件形式上实现了 路由和交换功能的分离,而并不意味着 路由器物理结构上的分离,所以它
也可以在一些多层交换机和低端的 路由器上实施。它的高速表现在以下两个方面:
一.是在在查询方式上简化了步骤,提高了速度;
二.是在分离了 路由和转发功能。
22.2.2   支持CEF的硬件平台
Cisco首先在高端 路由器平台实现CEF,此后,Catalyst交换机也支持CEF 的转发,但是还存在一些
差别,但均提供如下特性:
1.  基于“最长地址匹配”查找的高速转发
2.  等价路径的负载均衡
3.  逆向路径转发检查(RPF)
4.  不详 路由的无效
 
有些CEF特性仅在 路由器上实现
1.  关闭基于CEF 的转发能力
2.  每个前缀和每个前缀长度的CEF统计
3.  从负载共享路径统计数据
4.  基于每个分组的负载均衡
 
当您在网络中使用CEF时,请先考虑以下项目:
  加载当前完整的Internet 路由信息的平台所需的最小内存(推荐):
-  集中 路由模块上需要128MB 
-  每个线路卡上需要64MB
  CEF不能在一个线路卡上和VIP-分布式快速交换同时运行。
  缺省情况下,如果 Cisco  IOS 软件在交换数据报时遇到 CEF 不支持的功能和封装类型,
它将采用其他交换方法(如最优交换、快速交换、过程交换)。
  当前CEF不支持以下功能:
-  策略 路由
-  网络地址翻译(NAT)
-  路由交换模块上的访问控制列表
-  多点PPP封装
-  SMDS
-  令牌环
-  ATM
-  ISL封装
 
以下平台支持CEF功能:
  Cisco7000系列 路由器(需要装备RSP7000)
  Cisco7200系列
  Cisco7500系列
  Cisco12000系列
  第二代接口模块(VIP2-20、VIP2-40、VIP2-50)支持CEF。
 
在不同的 路由器平台上,硬件对 CEF 的支持可能会有所不同,这要由 路由器中安装的 路由模块和
其他硬件所决定。例如在Cisco12000系列 路由器上,所有的线路卡都支持CEF交换;在Cisco7500系列
路由器上,要实现CEF交换,需要有RSP模块和VIP线路卡的支持。每个接口卡用自己的引擎独立地运
行CEF去转发数据包,并且都独自拥有一个对FIB 表的拷贝。每个接口卡独立的去交换数据包,减轻了
中心 路由处理模块的负担。
 
22.2.3   CEF操作
要了解CEF,必须先了解Supervisor的处理结构
Cisco Supervisor2结构如下
 
底板:主要提供交换矩阵,32Gbit/s 的总线,多播复制 ASIC,网络管理处理器,还有基于 GBIC 的
2个接口。此外还提供PFC2 和 MSFC2子板的连接器
 
PFC2:提供一组ASIC进行所有基于硬件的转发。通常CEF就是在这个卡上实现的。  他提供基于3
层的转发引擎。提供各种3 层表,如FIB,邻接表等。此外,PFC还包口基于硬件的访问控制列表和Qos
机制的ASIC。
 
MSFC2:MSFC2 提供一个处理所有 3 层控制板活动的 cpu  。控制板是处理 路由计算的硬件体系结
构的一部分。MSFC2 负责处理不能由 PFC2 硬件元素处理的功能,以及所有 路由选择协议活动的处理,
比如OSPF和BGP的 路由选择更新。MSFC2  也负责形成lP 路由选择表、FIB  表和邻近表。在这3个组件
中,监控底板和PFC2是强制构件,而MSFC2组件是可选的(尽管它是第3 层交换十分需要的,因为它包
括形成CEF表的CPU.  
MSFC2 子卡上的 CPU 运行任何所配置的 路由选择协议需要的所有实例。此外,CPU 还处理不能用
硬件处理的分组。MSFC2是基于cisco IOS 软件的 路由器,并以同样方式配置。配置参数与Cisco 7200  系
路由器上的一样。cEF 同 Supervisor 一起默认启用。事实上,它不能关闭。对于大多数通用的 cEF 功
能,不需要特别地配置来启用cEF  ,除了 路由选择协议、网络接口地址等的标准配置。在 路由器初始化
时,会根据 路由器软件配置中的信息构建一张 路由选择表(如静态 路由、直连 路由,以及通过 路由选择
协议交换动态学习到的 路由)。在构建了 路由选择表之后,CPU自动创建FIB和邻近表。FIB  和邻近表显
示了按照最佳转发方式进行的出现在 路由选择表中的数据。与基于通信流的流缓存不同,cEF 表是基于
网络拓扑。当一个分组进入交换机时,交换机的第 3 层转发引擎 ASIC 根据目的网络和最详细的网络掩
码澎于最长匹配查找。例如, PFC2不是基于目的地址172.31.10.3进行交换,而是查找网络172.31.10.0/24
并交换到连接该网络的接口上。并且不涉及除 路由选择表和预先建立的 FIB  表之外的任何软件。此外,
一旦 路由选择表中发生了变化,所有的cEF  表会立即更新。这使得这个方法是高效的,缓存不会由于路
由翻动而无效。CEF  更加适应网络拓扑的变化。
1.CEF转发信息库:
CEF利用转发数据库(FIB)来进行基于IP目的地前缀的交换决策。从概念上讲,FIB类似于一个
路由表或信息库,它维护着一个包含 IP 路由表转发信息的镜像。当网络中 路由或拓扑结构发生了
变化时,IP 路由表就被更新,而这些变化也将反映在FIB中。基于IP 路由表中的信息,FIB 维护着
下一跳的地址信息。因为FIB 条目和 路由表条目之间有一一对应的关系,所以FIB中包含了所有已
知的 路由,这样就不用维护 路由高速缓存了,而先前的交换方法(比如快速交换和最优交换)都要维
路由高速缓存。
 
CEF FIB  表由一棵4级层次的树组成,如图所示。4  级来源于IP  议所使用的犯比特地址。层
次的每一级是基于32比特中的8  位。CEF  依赖最长匹配转发算法,这意味着按降序搜索整棵树直
到“最长匹配”,即匹配最大比特数。FIB  树分层表示,树的顶端是最不详细的地址,底端是最详
细的地址。每个叶以8比特为边界,按降序排列更详细的表项。这棵树(通常被认为是一个256  路
的分支树)提供了一种用于快速查找的高效机制,确保查找过程中产生最少的延迟。这棵树也提供
一个高扩展性的体系结构,因为它能以相比与表效率来说最小的性能开销完全统计IPv4  编址。每
个树叶提供了一个到邻近表中相应下一跳表项的指针。
2.邻接表(Adjacency Table)  
如果网络中的网络节点只通过一跳就可以穿越链路层而彼此到达对方,那么它们是邻接的。
除了 FIB 外,CEF 还利用邻接表来提供第二层的寻址信息。邻接表为所有 FIB 条目维护第二层的下
一网段地址。
邻接的发现
路由器发现存在邻接时就增加在邻接表中,每次生成一个邻接条目(就像 ARP 协议一样),
CEF 会为那个邻接节点预先计算一个链路层头标信息,并把这个头标信息存储在邻接表中。
当决定 路由时,它就会指向下一跳以及相应的邻接条目。随后,在对数据包进行CEF交换时,
用预先生成的头标信息来对数据包进行封装。
分解邻接
一个 路由表中也许存在多条到达目标网络的路径,例如:当 路由器被配置成允许冗余路径和
允许负载均衡时。对于每一个被分解的转发路径,邻接条目会被附加一个头标信息指示出那
条路径的下一跳地址。这种机制可以用来在多条路径上实现负载均衡。
需要作特殊处理的邻接类型
另外,因为邻接条目和下一跳地址相关联,所以一些特殊的邻接类型可以被用来加速交换过
程。前缀被定义后,当存在以下被缓存的邻接条目存在时,前缀需要作特殊处理。
空邻接一个以 Null0 接口为目标地址的包会被抛弃,在访问过滤器时,这可以被用作一种有
效的机制。
邻接归纳
路由器直接和几台主机相连时,FIB 表中维持的是这个子网的前缀,而不是各个主机的前
缀。这个子网前缀是一个邻接的归纳。当要转发某个数据包到某个具体主机时,邻接数据库
使用这个被归纳的邻接。
转出邻接
当遇到某些作特殊处理的功能或者 CEF 不支持的功能时, 路由器将采用更高级别的交换方法
处理数据包。
丢弃邻接
数据包被丢弃。这种邻接类型仅仅在Cisco12000系列 路由器上出现。
释放邻接
数据包被释放,但是前缀仍然有效。
没有被分解的邻接
当链路层头标信息被附加到数据包上时,FIB需要头标指出下一跳的地址。如果FIB表中建立
了一个邻接,但是并没有找到第二层的寻址信息,比如没有通过ARP发现第二层的寻址信息,
这个邻接就被认为是不完整的。这个数据包就会交给 路由模块处理,邻接关系由ARP来决定。
22.2.4   CEF转发过程
CEF的两个表:
 
3层包从TCAM 开始查找;进行最长匹配,得到邻居信息,改写原有二层数据帧(下一跳MAC地址)
并转发。CEF表是从 路由表得来,邻居表是使用ARP解析得来的。
 
CEF多层交换的过程:
 
左侧MAC-M(MAC地址)是SW。右侧的MAC-M是SW。
如果目的 IP 地址的 MAC 不在邻居表内,则 SW 将使用 ARP 进行解析,以得到目的地址的 MAC 地
址。
ARP  Throttling(ARP抑制):在未获得目的MAC地址并且进行ARP解析时,除非ARP解析完成并且
在邻居表体现出来外,在解析期间,所有发往目的主机的包,将被丢弃,这就是 ARP抑制。如左下图。