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来决定。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Rockyw | If it solves your problem, please mark as answer. Thanks !