CISCO快速转发

路由器最基本的功能是在网络中转移报文,这种报文的转移基于一张转发表完成的。路由器对于每一种转发报文的协议都有一张独立的转发表,这些协议可能包括IP,IPX,AppleTalk,MPLS等。

有3种基本的方式实现转发:进程交换,干扰交换,ASIC(通用集成电路)。因为我没有查到干扰交换的具体内容,本文不做介绍。

进程交换是所有交换方式中最慢的一种。当通过路由器交换报文的时候,CISCO IOS进程会将报文复制到CPU缓存,并在IP路由表中进行查找。查到后进行一些管理性处理,包括改TTL,重新计算CRC。整个过程由中央CPU监控,没有其他的基于硬件的帮助。

快速转发
快速转发会创建一张按需转发表,对于去往每个目的地的一个报文实行进程交换,通过中央CPU完成,然后创建一个IP快速交换路由缓存。这个缓存不是永久的,它有一些计时器管理,只要有报文转发,这些条目就会存在,如果经过一段时间没有报文转发,条目将被删除以释放空间。
下图就是一个IP快速交换路由缓存的示例:



可以看出,对于每一个prefix都有一些参数:老化时间,接口,下一跳和第二层重写信息。这张图中你看到的二层信息是0F000800。其中,0F00是表明使用HDLC封装,0800是IPv4的协议号。

CEF交换
虽然有了快速交换,使得交换报文变的快速。但是到达每个目的的第一个报文依旧要实行进程交换,这样就很麻烦。而且,当目的地变的多起来的时候,时间的消耗就变得非常明显。避免这个问题的解决办法就是预先创建交换信息表。
这个CEF交换表就是根据路由表创建的,路由表发生变化的时候它相应的也会变化。

组成CEF的两个组件
CEF由两张表组成:CEF邻接表和CEF转发表

邻接表:
邻接表用于MAC或者第二层信息的重写。第二层信息能通过ARP,ATM,FrameRelay的映射状态等方式学到。下图中就有对应的第二层字段以及这些字段是如何被学习到的。



CEF表:
也叫FIB,用于进行3层的转发决策。路由表中关于转发比较核心的内容如:IP前缀,递归的下一跳,出站接口会记录在CEF表中。但是非核心的东西比如管理距离和度量值就被CEF表忽略了。



当报文进入路由器的时候,路由器将报文的二层信息剥掉。在CEF表中查找相关的IP地址,进行转发决策。决策结果会指向邻接表的一条条目。在邻接表中找回二层需要重的写信息,构建新的二层头部,转发到对应的下一跳接口。通过这两张表,CEF同时扮演了第3层查找和第2层祯重写的角色。