在一张路由表中,当存在多个路由项可同时匹配目的IP地址时,路由查找进程会选择掩码最长的路由项用于转发,即最长匹配原则。因为掩码越长,所处的网段范围就越小,网段的范围越小,就越能快速的定位到PC机的具体位置,从而加快转发效率。
例子1:在运行了RIP 的MSR 路由器上看到如下路由信息: <MSR>display ip routing-table 6.6.6.6 Routing Table: Public Summary Count: 2 Destination/Mask Proto Pre Cost NextHop Interface 6.6.6.0/24 RIP 100 1 100.1.1.1 GE0/0 6.0.0.0/8 Static 60 0 100.1.1.1 GE0/0 此时路由器收到一个目的地址为6.6.6.6 的数据包,那么 A A. 该数据包将优先匹配路由表中的RIP 路由,因为其掩码最长 B. 该数据包将优先匹配路由表中RIP 路由,因为其优先级高 C. 该数据包将优先匹配路由表中的静态路由,因为其花费Cost 小 D. 该数据包将优先匹配路由表中的静态路由,因为其掩码最短 |
尽管如此,路由表中路由项数量越多,所需查找及匹配的次数就越多,其转发效率就会降低。为了实现控制平面与转发平面完全分离,就需要系统构建一张专注于数据报文转发的表,即FIB表。全称为Forwarding Information Base,称为转发表。
FIB表的生成有2种方式,一种是源于路由表项,另外一种是通过ARP解析获得。
第一种方式,当开始计算路由信息的时候,因为在一个网络拓扑结构中,可能会运行多个路由协议,而不同路由协议所计算出的路径可能会不同。当出现这种情况时,路由器会选择较高路由优先级的路由协议所发现的路由作为最优路由,即比较路由的优先级将其选出,再置为Active(活跃)状态;而其他路由作为备份路由,置为Inactive(非活跃)状态。系统会再把Active状态的路由表项导入至FIB表中,作为系统转发的依据。
第二种方式,通过ARP解析,得到MAC地址与IP地址的映射关系,再得到本地网段内的主机路由信息,最后添加至FIB表中。
在FIB表生成过程中,需要注意的一点是,FIB表与路由表是同步更新的。系统的控制平面会发现新的路由信息,根据路由信息更新到自己的路由表中,生成新的Active状态的路由表项,再更新至FIB表。路由表属于控制平面,FIB表属于转发平面,这样便做到了控制平面与转发平面的分离。如果原路由表中处于Active状态的路由表项失效,系统也会删除相关FIB表项。
由于FIB表全是处于Active状态的路由,所以FIB表项的数量远远小于路由表项。基于这种特性,在设计的时候,系统可以将FIB表项加载到硬件中,从而加快数据转发速度。例如,在某些高端交换机启动后,FIB表被系统加载到接口业务板的硬件中,数据报文再通过硬件转发,不需要再通过CPU转发,可以大大降低转发时延。
通过输入"display fib"命令,即可查看到相关FIB表项。
Flag字段的含义:
U | 可用路由 |
G | 网关路由 |
H | 主机路由 |
B | 黑洞路由 |
D | 动态路由 |
S | 静态路由 |
R | 迭代路由 |
F | 快速重路由 |
路由器常规转发报文的流程:路由器接收到一个报文后,将它从接口存储器拷贝至CPU中,CPU会根据报文的目的地址寻找FIB表中与之匹配的转发项,最终确定一条最佳的路径。与此同时,再将报文按照数据链路层上使用的协议进行封装,最后,封装后的链路层帧通过DMA(Direct Memory Access,直接内存访问)拷贝至输出队列中进行报文转发。这一个过程经过了2次系统总线,每一个报文都要重复这个过程。
衡量路由器性能因素之一是报文的转发效率,报文的转发效率越高,性能就越强。所以需要再用到快速转发表来进行转发,快速转发表采用高速缓存来处理报文,使用基于数据流的技术来处理。
什么是基于数据流,数据流是指在计算机系统中,数据在各个组件(如程序、模块、子系统等)之间传输和处理的过程。在数据流中,数据经过一系列处理后,输出到下一个组件或者最终输出到终端用户。例如,访问HTTP服务的一次操作。
在计算机网络中,一般用一个5元组来描述一个数据流,源IP地址、源端口号、目的IP地址、目的端口号、协议号。当一个数据流的第一个报文通过查找FIB表转发后,在高速缓存中生成相应的转发信息,该数据流后续报文的转发就可以通过直接查找高速缓存来实现。
例如,当一个主机需要访问服务器时,主机发出的第一个报文到达路由器的接口后,路由器会查找快速转发表实现快速转发。但由于这个报文是第一个报文,快速转发表中并没有这条数据流的转发信息高速缓存,所以系统无法进行快速转发。便会退而求其次,将报文移交至普通的FIB表,由CPU负责在FIB表中查找相关转发项,然后进行封装,再从接口转发出去。与此同时,系统记录报文中的5元组信息,再高速缓存中会生成相应的快速转发信息。
系统会根据5元组信息生成相应的快速转发信息缓存的同时也会记录转发时的封装信息及接口信息。在当后续报文来到后,系统会查看报文中的5元组,如果命中了快速转发缓存,则会根据缓存中的封装信息直接进行二层数据帧的封装。然后在中断中直接送到出接口发送,这样,就不需要上报CPU进行查表操作,也不需要内存访问操作,更不用占用系统总线资源。
快速转发技术就在很大程度上缩减了IP报文的排队流程,也减少了报文的转发时间。
【本文章技术支持:武汉科云信息技术有限公司】