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数据结构。spa
RR#show ip bgp | begin Network Network Next Hop Metric LocPrf Weight Path r>i10.0.1.1/32 10.0.1.1 0 100 0 i r>i10.0.1.2/32 10.0.1.2 0 100 0 i *>i10.0.11.11/32 10.0.1.1 0 100 0 i
RR#show ip ospf database router 10.0.1.1 OSPF Router with ID (10.0.1.5) (Process ID 1) Router Link States (Area 0) LS age: 1612 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: 80000003 Checksum: 0xC764 Length: 60 Number of Links: 3 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: 0 TOS 0 Metrics: 1 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: 0 TOS 0 Metrics: 64 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: 0 TOS 0 Metrics: 64
2. 每一个路由协议都运行本身的路由选择算法(若是是OSPF或IS-IS,则为SPF算法;若是是BGP,则为至关复杂的规则集),经过路由协议和下一跳Ip信息得到可到达的IP前缀集。可使用针对特定协议的show命令查看这些路由选择算法的结果(例如,用于BGP的show ip bgp 前缀和用于OSPF的show ip ospf rib 前缀)code
BGP routing table entry for 10.0.11.11/32, version 6 Paths: (1 available, best #1, table default) Not advertised to any peer Local 10.0.1.1 (metric 66) from 10.0.1.1 (10.0.1.1) Origin IGP, metric 0, localpref 100, valid, internal, best RR#show ip ospf rib 10.0.1.1 OSPF Router with ID (10.0.1.5) (Process ID 1) OSPF local RIB Codes: * - Best, > - Installed in global RIB *> 10.0.1.1/32, Intra, cost 66, area 0 SPF Instance 2, age 00:48:15 Flags: RIB, HiPrio via 10.0.2.1, FastEthernet0/0, flags: RIB LSA: 1/10.0.1.1/10.0.1.1
3. BGP和OSPF都将IP下一跳与IP前缀相关联,可是BGP仅使用附加到BGP路由的next-hop属性的值,而OSPF使用SPF算法计算下一跳OSPF路由器的IP地址。
路由内协议路由选择的结果基于管理距离插入到IP路由表(RIB)中(若是两个路由协议具备相同的AD,则会产生有趣的结果)。orm
BGP有一个特殊的show命令,能够显示RIB故障。在本文的方案中,经过OSPF和BGP分别匹配到10.0.1.1/32前缀,将优先选择OSPF路由,由于OSPF的AD值比BGP路由低。router
RR#show ip bgp rib-failure Network Next Hop RIB-failure RIB-NH Matches 10.0.1.1/32 10.0.1.1 Higher admin distance n/a 10.0.1.2/32 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/32 Known via "bgp 65000", distance 200, metric 0, type internal Last update from 10.0.1.1 00:00:55 ago Routing Descriptor Blocks: * 10.0.1.1, from 10.0.1.1, 00:00:55 ago Route metric is 0, traffic share count is 1 AS Hops 0 MPLS label: none
RR#show ip route 10.0.1.1 Routing entry for 10.0.1.1/32 Known via "ospf 1", distance 110, metric 66, type intra area Last update from 10.0.2.1 on FastEthernet0/0, 00:33:47 ago Routing Descriptor Blocks: * 10.0.2.1, from 10.0.1.1, 00:33:47 ago, via FastEthernet0/0 Route metric is 66, traffic share count is 1
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/32, epoch 0, flags rib only nolabel, rib defined all labels recursive via 10.0.1.1 nexthop 10.0.2.1 FastEthernet0/0 label 19
所以,通过全面评估的FIB(CEF表)可直接用于第3层交换。