RIB (route information base) 和 FIB (forwarding information base),又称Ip路由表 和 CEF表,它们之间的关系可以用下面这张图片来高度概括。

本质上,RIB(route information base) 是由节点上各种路由过程通过路由协议(例如OSPF,IS-IS,BGP,甚至是静态路由条目)提供的信息来构建的。从RIB中的所有路由中选出最佳路由后,将它们复制到FIB。因此,RIB包含节点愿意保留的所有路由以及路由协议正在使用的信息,硬件使用FIB来指导转发,物理上将数据包从移入和移出接口。

RIB维护每种协议的网络拓扑和路由表。这将包括许多到达相同目的地前缀的路由。

FIB是从下推的RIB中可能的许多协议到快速转发查找内存的最佳路径的最佳路由。

下面详细展开:

1. 路由器具有学习到达各个Ip前缀的最佳路径的多种方法:它们可以通过直连路由配置静态路由或者通过动态路由协议学习

每个动态路由协议(包括RIP)都有自己内部的数据结构集,称为OSPF / IS-IS数据库,EIGRP拓扑表或BGP表。路由协议基于与其邻居交换的路由协议来更新其数据结构,最终收集所有相关信息。在本文中,我们将处理通过OSPF学习的10.0.1.1/32和通过BGP学习的10.0.11.11/32,因此,让我们检查相关的OSPF / BGP数据结构。

RR#show ip bgp | begin Network
Network Next Hop Metric LocPrf Weight Path
r>i10.0.1./ 10.0.1.1 i
r>i10.0.1./ 10.0.1.2 i
*>i10.0.11./ 10.0.1.1 i
RR#show ip ospf database router 10.0.1.1

            OSPF Router with ID (10.0.1.5) (Process ID )

                Router Link States (Area )

  LS age:
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 10.0.1.1
Advertising Router: 10.0.1.1
LS Seq Number:
Checksum: 0xC764
Length:
Number of Links: Link connected to: a Stub Network
(Link ID) Network/subnet number: 10.0.1.1
(Link Data) Network Mask: 255.255.255.255
Number of MTID metrics:
TOS Metrics: Link connected to: another Router (point-to-point)
(Link ID) Neighboring Router ID: 10.0.1.6
(Link Data) Router Interface address: 10.0.7.9
Number of MTID metrics:
TOS Metrics: Link connected to: a Stub Network
(Link ID) Network/subnet number: 10.0.7.8
(Link Data) Network Mask: 255.255.255.252
Number of MTID metrics:
TOS Metrics:

2. 每个路由协议都运行自己的路由选择算法(如果是OSPF或IS-IS,则为SPF算法;如果是BGP,则为相当复杂的规则集),通过路由协议和下一跳Ip信息获得可到达的IP前缀集。可以使用针对特定协议的show命令查看这些路由选择算法的结果(例如,用于BGP的show ip bgp 前缀和用于OSPF的show ip ospf rib 前缀)

BGP routing table entry for 10.0.11.11/, version
Paths: ( available, best #, table default)
Not advertised to any peer
Local
10.0.1.1 (metric ) from 10.0.1.1 (10.0.1.1)
Origin IGP, metric , localpref , valid, internal, best
RR#show ip ospf rib 10.0.1.1 OSPF Router with ID (10.0.1.5) (Process ID ) OSPF local RIB
Codes: * - Best, > - Installed in global RIB *> 10.0.1.1/, Intra, cost , area
SPF Instance , age ::
Flags: RIB, HiPrio
via 10.0.2.1, FastEthernet0/, flags: RIB
LSA: /10.0.1.1/10.0.1.1

3. BGP和OSPF都将IP下一跳与IP前缀相关联,但是BGP仅使用附加到BGP路由的next-hop属性的值,而OSPF使用SPF算法计算下一跳OSPF路由器的IP地址。
路由内协议路由选择的结果基于管理距离插入到IP路由表(RIB)中(如果两个路由协议具有相同的AD,则会产生有趣的结果)。

BGP有一个特殊的show命令,可以显示RIB故障。在本文的方案中,通过OSPF和BGP分别匹配到10.0.1.1/32前缀,将优先选择OSPF路由,因为OSPF的AD值比BGP路由低。

RR#show ip bgp rib-failure
Network Next Hop RIB-failure RIB-NH Matches
10.0.1.1/ 10.0.1.1 Higher admin distance n/a
10.0.1.2/ 10.0.1.2 Higher admin distance n/a

4. 理想情况下,我们将使用RIB转发IP数据包,但是实际上,我们并没有这样做,因为其中某些条目(静态路由和BGP路由)可能具有未直接连接的下一跳。

将IP路由表(RIB)中的IBGP与OSPF路由进行比较:

RR#show ip route 10.0.11.11
Routing entry for 10.0.11.11/
Known via "bgp 65000", distance , metric , type internal
Last update from 10.0.1.1 :: ago
Routing Descriptor Blocks:
* 10.0.1.1, from 10.0.1.1, :: ago
Route metric is , traffic share count is
AS Hops
MPLS label: none
RR#show ip route 10.0.1.1
Routing entry for 10.0.1.1/
Known via "ospf 1", distance , metric , type intra area
Last update from 10.0.2.1 on FastEthernet0/, :: ago
Routing Descriptor Blocks:
* 10.0.2.1, from 10.0.1.1, :: ago, via FastEthernet0/
Route metric is , traffic share count is

5. OSPF路由具有传出接口;它是由SPF算法计算得出的,并已在IP路由表中传输。BGP路由没有出接口,下一跳没有直接连接;路由器必须执行递归查找以找到传出接口(递归查找还用于通过环回接口实现EBGP负载平衡)。

早期的IOS版本对发送到新目的地的第一个数据包执行递归查找(过程切换),并为后续数据包缓存结果(快速切换)。快速交换在早期Internet(几乎没有全局IP前缀)中运行良好,但是随着Internet的发展和DoS攻击变得普遍,核心路由器经常遭受缓存破坏。大量的数据包正在进行过程交换,从而导致很高的CPU利用率和偶尔的路由器崩溃。现在是时候从缓存辅助转发转向确定性转发了。

引入了转发信息库(FIB)和Cisco快速转发(CEF)交换,以使第3层交换具有确定性。将IP路由从RIB复制到FIB时,将解析其下一跳,并在下一跳解析导致到达同一目标的多个路径时计算出站接口并创建多个条目。例如,将来自上一个打印输出的BGP路由插入到FIB中时,其下一跳将更改为指向实际的下一跳路由器。保留有关递归下一跳的信息,因为如果通往BGP下一跳的路径发生更改,它允许路由器更新FIB(CEF表)而无需重新扫描和重新计算整个RIB。

RR#show ip cef 10.0.11.11 detail
10.0.11.11/, epoch , flags rib only nolabel, rib defined all labels
recursive via 10.0.1.1
nexthop 10.0.2.1 FastEthernet0/ label

因此,经过全面评估的FIB(CEF表)可直接用于第3层交换。

FIB表与RIB表的区别与联系的更多相关文章

  1. hive 内部表和外部表的区别和理解

    1. 内部表 create table test (name string , age string) location '/input/table_data'; 注:hive默认创建的是内部表 此时 ...

  2. SQL Server 表变量和临时表的区别

    SQL Server 表变量和临时表的区别 一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯 ...

  3. 第三章(附)mysql表类型MyISAM和InnoDB区别(决定了是否支持事务)

    mysql表类型MyISAM和InnoDB区别 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问 ...

  4. 查询优化--小表驱动大表(In,Exists区别)

    Mysql 系列文章主页 =============== 本文将以真实例子来讲解小表驱动大表(In,Exists区别) 1 准备数据 1.1 创建表.函数.存储过程 参照  这篇(调用函数和存储过程批 ...

  5. Mysql清空表(truncate)与删除表中数据(delete)的区别

    来源:http://blog.is36.com/mysql_difference_of_truncate_and_delete/ 为某基于wordpress搭建的博客长久未除草,某天升级的时候发现已经 ...

  6. hive表与外部表的区别

    相信很多用户都用过关系型数据库,我们可以在关系型数据库里面创建表(create table),这里要讨论的表和关系型数据库中的表在概念上很类似.我们可以用下面的语句在Hive里面创建一个表: hive ...

  7. MySQL表类型MyISAM/InnoDB的区别(解决事务不回滚的问题)

    MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与 ...

  8. hive 内部表与外部表的区别

    hive 内部表: hive> create table soyo55(name STRING,addr STRING,money STRING) row format delimited fi ...

  9. hive内部表与外部表区别详细介绍

    问题导读:1.创建内部表与外部表的区别是什么?2.external关键字的作用是什么?3.外部表与内部表的区别是什么?4.删除表的时候,内部表与外部表有什么区别?5.load data local i ...

随机推荐

  1. Warshall算法求传递闭包及具体实现

    传递闭包 在数学中,在集合 X 上的二元关系 R 的传递闭包是包含 R 的 X 上的最小的传递关系. 例如,如果 X 是(生或死)人的集合而 R 是关系“为父子”,则 R 的传递闭包是关系“x 是 y ...

  2. Shell考题中级篇

    写脚本实现,可以用shell.perl等.把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数. grep -v -x bbb -f aaa > ccc && ...

  3. linux 移动复制删除

    linux下文件的复制.移动与删除命令为:cp,mv,rm一.文件复制命令cp    命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination)        ...

  4. MySQL8.0 MIC高可用集群搭建

    mysql8.0带来的新特性,结合MySQLshell,不需要第三方中间件,自动构建高可用集群. mysql8.0作为一款新产品,其内置的mysq-innodb-cluster(MIC)高可用集群的技 ...

  5. 把"重试"抽象出来做个工具类吧

    背景介绍 我们在工作中难免会写一些重复性的代码,所以需要我们具备一定的抽象能力,比如把共同的逻辑抽取到抽象类中,也可以通过一些工具类来避免冗余代码 今天这篇文章就是把一个调用服务的重试功能抽取出一个工 ...

  6. 如何利用开源解码项目开发js视频解码的web应用 系列

    介绍web上开发视频业务相关程序的技术演变历程 https://www.cnblogs.com/maoliangwu/articles/12046495.html 介绍ffmpeg asm.js we ...

  7. windows 使用ssh连接docker容器

    在Windows上搭建docker服务器需要在Windows模拟一个Linux平台,然后在Linux平台上搭建的docker服务器,所以在使用ssh工具连接docker容器的时候,使用的ip地址不是d ...

  8. POJ_1006_中国剩余

    http://poj.org/problem?id=1006 中国剩余定理用来解求模方程组,用到了逆元. 这题三个数互质,直接用扩展欧几里德可得逆元. #include<iostream> ...

  9. HDU_4496_逆向并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=4496 逆向并查集,先读取,然后从后向前join每次保存答案即可. #include<iostream> ...

  10. python练习——第0题

    原GitHub地址:https://github.com/Yixiaohan/show-me-the-code 题目:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种 ...