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. reactNative-解决react native使用fetch函数 Network request failed 问题

    解决react native使用fetch函数Network request failed问题 最近公司新开发一个app, 用react native架构好后,用xcode模拟器打开app,对接登陆接 ...

  2. postgresql spi开发笔记

    #include "postgres.h" #include "fmgr.h" #include <string.h> #ifdef PG_MODU ...

  3. C++输出中文字符

    注:本文转载自互联网,感谢作者整理!   1. cout 场景1: 在源文件中定义 const char* str = "中文" 在 VC++ 编译器上,由于Windows环境用 ...

  4. top100tools

    Top 100 Tools for Learning 2013 2142 EmailShare Here are the Top 100 Tools for Learning 2013 –  the ...

  5. html作业记录

    <html> <head> <title>Hello World</title> </head> <body> <!-- ...

  6. PAT_B数素数 (20)

    数素数 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 令Pi表示第i个素数.现任给两个正整数M &l ...

  7. Dubbo(四):深入理解Dubbo核心模型Invoker

    一.Dubbo中Invoker介绍 为什么说Invoker是Dubbo核心模型呢? Invoker是Dubbo中的实体域,也就是真实存在的.其他模型都向它靠拢或转换成它,它也就代表一个可执行体,可向它 ...

  8. NLP新秀 - Bert

    目录 什么是Bert Bert能干什么? Bert和TensorFlow的关系 BERT的原理 Bert相关工具和服务 Bert的局限性和对应的解决方案 沉舟侧畔千帆过, 病树前头万木春. 今天介绍的 ...

  9. lua学习之基础概念篇

    基础概念 程序块 (chunk) 定义 lua 中的每一个源代码文件或在交互模式(Cmd)中输入的一行代码都称之为程序块 一个程序块就是一连串语句或者命令 lua 中连续的语句不需要分隔符,但为了可读 ...

  10. bind() 理解 【转】

    bind()可稍后执行  call()  apply() 为了搞清这个陌生又熟悉的bind,google一下,发现javascript1.8.5版本中原生实现了此方法,目前IE9+,ff4+,chro ...