CEF(Cisco的加速包交换技术)的软件版本如何实现算法在FIB(转发信息库)中搜索前缀?
它是否使用哈希表或基于树的搜索算法,或者它使用什么?
CEF(Cisco的加速包交换技术)的软件版本如何实现算法在FIB(转发信息库)中搜索前缀?
它是否使用哈希表或基于树的搜索算法,或者它使用什么?
CEF 使用 trie:
思科快速转发
Cisco Express Forwarding,也使用 256 路数据结构来存储转发和 MAC 报头重写信息,但它不使用树。Cisco Express Forwarding 使用 trie,这意味着要搜索的实际信息不在数据结构中;相反,数据存储在一个单独的数据结构中,而 trie 只是指向它。
可达性信息(在 Cisco Express Forwarding 表中)和转发信息(在邻接表中)的这种分离提供了许多好处:
- 邻接表可以与 Cisco 快速转发表分开构建,允许在不进行任何数据包交换的情况下构建两者。
- 用于转发数据包的 MAC 报头重写不存储在缓存条目中,因此 MAC 报头重写字符串中的更改不需要缓存条目无效。
- 您可以直接指向转发信息,而不是指向递归的下一跳,以解析递归路由。
本质上,所有的缓存老化都被消除了,缓存是根据路由表和ARP缓存中包含的信息预先构建的。无需处理交换任何数据包来构建缓存条目。邻接表中的其他条目
邻接表可以包含除 MAC 头重写字符串和出站接口信息之外的条目。可以放置在邻接表中的一些不同类型的条目包括:
- 缓存— MAC 标头重写字符串和用于到达特定相邻主机或路由器的出站接口。
- 接收— 发往此 IP 地址的数据包应由路由器接收。这包括广播地址和路由器本身配置的地址。
- drop — 应丢弃发往此 IP 地址的数据包。这可以用于被访问列表拒绝的流量,或路由到 NULL 接口。
- punt — Cisco Express Forwarding 无法切换此数据包;将其传递给下一个最佳切换方法(通常是快速切换)进行处理。
- glean — 直接附加下一跳,但当前没有可用的 MAC 标头重写字符串。