在多层交换机中都会利用高速内存表来创建路由选择表。这个路有表的生成方式有很多,CEF就是其中典型的一种。简单的说,CEF是一种基于拓扑的转 发模型。通过CEF可以将预先所有路由选择信息加入到转发信息库(FIB)中,并且将动态更新邻接表中的第二层重写信息。通过这种机制,可以提高数据交换 的性能。不过有时候CEF转发模型也会“生病”。作为网络管理员,需要学会对症下药。笔者根据自己的经验,将基于CEF的MLS排错总结为三部曲。希望能 够对大家的网络排错提供一点指导意义。
第一步:查看第三层引擎的CEF表
由于第三层引擎的CEF表决定了硬件交换的CEF表。所以如果CEF出现问题,网络管理员应该第一个想到的就是是否是这张第三层引擎的CEF表 出现了问题。这是一个资深网络管理员应该具有的职业习惯。总之,在对CEF问题进行排错的时候,首先就需要查看交换机的CEF表。要查看这个表的内容也很 简单,只需要使用show ip cef (detail)命令即可。不带参数detail其显示的比较简单的信息。而带上参数的话,显示的内容就比较完整。通常情况下,我们是先用不带参数的命令 试试看。如果信息不够的话,再加入参数。
另外这里需要注意的是,这个命令显示的内容并不是硬件交换组件中的FIB表。这是什么意思呢?硬件交换组件中的FIB表会有一个副本。通常情况 下,两者是同步更新的。为了安全起见,使用show ip cef命令显示的是这个副本中的内容,而不是真正的FIB表。故两者可能有时间差。不过这个时间差很小,一般情况下不会对我们的排错产生负面影响。
第二步:查看第三层引擎的邻接表
如果通过第一步还不能够得到问题的原因,那么接下去要查看的就是第三层引擎的邻接表。邻接表与CEF表是CEF转发模型的两个基本组件。通常情 况下CEF出问题的话,就是这两个表在作怪。当多层交换机通过ARP过程获得MAC地址之后,CEF转发模型将利用这些信息填充邻接关系表。在填充的过程 中,系统会利用邻接节点的MAC地址重新信息与目标接口。CEF表中的所有IP路有选择条目都会对应于一个下一跳地址。
要查看这个表的信息,需要使用命令show adjacency。同理在这个命令中也可以使用参数detail。使用这个参数之后,系统会显示详细的邻接关系表信息,如会包括第二层的信息等等。不过 这里需要注意的是,这个表并不是实时更新的。默认情况下,这个表的更新频率为一分钟。也就是说每60秒更新一次。为此网络管理员有时候可能需要运行这个命 令两次(中间隔一分钟),才能够得到自己想要的结果。
在查看这张表的时候,需要注意前缀的问题。在CEF表中,前缀可以分为子网前缀与主机前缀。系统设计的时候,如果直接连接了多台主机的话,则这 个路由器中的邻接表采用的是子网的前缀,而不是各台主机的前缀。子网前缀会指向一个探查邻接关系条目。当需要将数据报转发给特定主机的时候,系统将在邻接 关系数据库中查找具体的前缀。在查看这张表中,首先需要对这些前缀搞清楚。看看其对应的子网前缀是否有问题。或者说,本来应该是子网前缀的,但是系统中采 用的却是主机前缀。


