对路由系统的RIB和FIB学习
RouterOS v7 大幅升级和改动了路由引擎,/ip route配置功能开始弱化,有意将路由配置向/routing下迁移,如新建路由表,只能在/routing table中完成,不能在mangle或者ip route rule创建,只能做调用。
创建新的路由表在v7下配置:
/routing table add name=myTable fib
后面跟一个fib,可能因为v7开发中,这个fib在RouterOS各个版本中已经存在,只是后台运行。个人觉得官方还没有隐藏这个参数,那fib我通过学习后,给大家分享下。
发展
当前网络设备的开发,离不开Unix、FreeBSD和linux三大系统(Unix系统是源头,BSD是unix分支,而linux是类unix系统或者说是仿unix系统. 试图与unix相兼容的开源系统)
Cisco使用的是Unix系统开发的IOS(Internet OS),Juniper使用的是freeBSD开发的JunOS,华为和H3C,以及其他的路由厂商,如MikroTik的RouterOS都基于Linux开发。至于那种系统好,各有自己的优势,但网络协议标准是一样的,大家都在使用一个网络协议的标准,这里提到路由的RIB和FIB就是统一的路由处理过程。
早期的Cisco IOS版本对新路由数据包执行递归查找(过程交换),并为其后续数据包建立缓存结果(快速交换)。快速交换在早期互联网运行良好,但是随着互联网的发展和DoS攻击变得普遍,受攻击的路由器大量的数据包处于正在交换过程中,核心路由器经常遭受缓存破坏。从而导致很高的CPU利用率和偶尔的路由器崩溃。
因此引入了转发信息库(FIB)和Cisco快速转发(CEF)交换。将IP路由从RIB复制到FIB时,将解析其下一跳,并在下一跳解析导致到达同一目标的多个路径时计算出站接口并创建多个条目。例如,新建的BGP路由插入到FIB中时,其下一跳将更改为指向实际的下一跳网关。保留有关递归下一跳的信息,因为如果通往BGP下一跳的路径发生更改,它允许路由器更新FIB(CEF表)而无需重新扫描和重新计算整个RIB。
RIB (route information base) 和 FIB (forwarding information base)
RIB是由各种路由协议(如RIP、OSPF、IS-IS、BGP和静态路由等)是管理路由信息库,包含路由表信息以及路由相关联的信息(路由迭代信息、路由共享信息以及路由扩展信息)。RIB通过对路由表选出最佳路由后,把筛选的路由下发到 FIB,FIB来指导转发
FIB接收到RIB下发的路由表后,对每条转发项都指明了要到达某子网或主机的报文应通过路由器的哪个物理接口发送,FIB可以直接下发给硬件处理,如果出现的路由表信息不FIB中,再由RIB生成,并重新更新FIB表。
说的通俗点,RIB就像公司的领导层,制定了公司的章程制度、项目方案和工作计划,而FIB就像项目经理,拿到公司制定的方案后,按照工作岗位分配执行下去,每个人各司其职。RIB是不参与整个实际过程的,如果遇到不在计划中的某个问题,就上报RIB,重新讨论该问题,制定解决方案,方案主体不会改变,仅修补后再交给FIB继续执行。
这种RIB加FIB 的结构,使得决策层面 RIB和转发层面 FIB分离,决策和转发分离使路由器在开发和扩展方面更加有连续性。典型的三层交换机来说,CPU和交换芯片是独立分开的,CPU负责RIB的决策,然后生成FIB,而FIB下发到交换芯片处理。FIB 表中的条目数也是影响路由器性能的重要因素,通常来讲FIB 条目越多,查找花费的时间越长,但基于ASIC开发的交换芯片来说,随着技术的不断升级和功能的扩展,转发性能也不断提升,完全能实现路由查询转发达到线速。
举例
下面是CRS326-24S+2Q+RM的设计框架图:
CRS326-24S+2Q+RM是24个10G+2个40G端口产品,在RouterOS v7版本可以支持二层和三层线速转发,从上图框架图可以看到,该型交换机的CPU为QCA9531L连接Switch Chip 98DX8332的交换芯片,但他们之间总线只有1Gb/s,如果数据要交给CPU处理,只能跑1Gb/s,且采用的CPU是当前MikroTik在售路由器中性能垫底的一款,显然不合理。
其实处理二层和三层转发仅需要生成相应的策略下发给98DX8332的交换芯片,二层转发生成FBD表(MAC+VLAN和PORT的对应关系),三层生成FIB表。数据转发处理都给交换芯片完成,因此CPU负责日常RouterOS的系统运行,规则生成等任务,决策和转发功能分离是软件和硬件结合最好的解决方案。
这样设计路由交换产品时,可以选择一个弱鸡CPU(能有效处理RIB),搭配一个高性能交换芯片,也能达到三层路由线速转发的性能。只要大家遵循一个标准通信协议,CPU和交换芯片可以任意搭配。
对于系统构建 FIB需要一定的时间,它需要先接收路由信息包,建立路由表,选路,建立转发表并把转发表的适当的子集推送到线卡上,减少路由器 CPU到线卡的压力。对于特别大的 FIB 整个过程会需要大约几分钟。了解路由器FIB最大条目数十分重要,但厂商一般不会在产品指标说明中提供FIB的大小限制。
通过我对RIB和FIB的学习和了解分享给大家,希望有所帮助。