路由转发表的构造流程
路由器的转发表 (Forwarding Information Base, FIB) 的构建是一个多步骤、动态且高度优化的过程。它不像路由表 (Routing Information Base, RIB) 那样只是简单的路由信息集合,而是为了实现高速、高效的数据包转发而专门设计的数据结构。
要理解转发表的构造,我们需要先理解它的“上游”——路由表 (RIB),以及各种路由信息的来源。
转发表的构造流程概览
可以把转发表的构造理解为以下几个阶段:
- 信息收集: 路由器从各种来源收集路由信息。
- 路由选择: 路由器评估所有收集到的路由信息,选出到达每个目的网络的最佳路径,并将其放入路由表 (RIB)。
- 转发表生成: 路由器将路由表中选出的最佳路径进行优化和预处理,生成转发表 (FIB)。
阶段一:信息收集
路由器通过以下主要方式获取路由信息:
- 直连路由 (Directly Connected Routes):
- 来源: 当路由器的物理接口被配置了 IP 地址并处于“up/up”状态时,路由器会自动得知如何到达与该接口直接相连的网络。
- 特点: 这些路由具有最高的信任度(通常管理距离最小),且无需额外协议。
- 静态路由 (Static Routes):
- 来源: 由网络管理员手动配置的路由条目。
- 特点: 它们是固定的,不会动态变化,除非管理员手动修改。常用于特定的、不常变化的网络路径或作为默认路由 (0.0.0.0/0)。
- 动态路由协议 (Dynamic Routing Protocols):
- 来源: 路由器运行各种路由协议(如 RIP, OSPF, EIGRP, BGP 等),与其他路由器交换路由信息。
- 特点: 能够自动发现网络拓扑、学习路径、适应网络变化,并计算到达各个目的网络的“最佳”路径。
- 距离矢量协议 (Distance-Vector Protocols): 如 RIP, EIGRP。路由器向其邻居发送完整的路由表,并根据邻居的更新来更新自己的路由表。
- 链路状态协议 (Link-State Protocols): 如 OSPF, IS-IS。路由器构建整个网络的拓扑图,然后使用 SPF (最短路径优先) 算法独立计算到达所有目的地的最短路径。
- 路径矢量协议 (Path-Vector Protocols): 如 BGP。主要用于自治系统 (AS) 之间,它不只考虑距离,还会考虑路径属性和策略。
阶段二:路由选择 => 填充路由表 (RIB)
一旦路由器从各种来源收集到路由信息,它需要决定哪条路径是“最佳”的,以便将其放入主路由表(RIB)。
这个选择过程通常遵循以下优先级原则:
- 管理距离 (Administrative Distance, AD):
- 定义: 衡量路由信息来源的“可信度”。AD 值越小,表示路由来源越可信。
- 示例 (思科):
- 直连路由:0
- 静态路由:1
- EIGRP:90
- OSPF:110
- RIP:120
- 外部 BGP:20
- 内部 BGP:200
- 选择规则: 如果有两条或多条到达同一个目的网络的路由,路由器会选择管理距离最小的那条。
- 度量值 (Metric):
- 定义: 当管理距离相同时(即来自同一个路由协议或同一类型来源),路由器会使用该协议自身的度量值来选择最佳路径。度量值是衡量路径“成本”或“距离”的指标。
- 示例:
- RIP 使用跳数 (hop count)。
- OSPF 使用成本 (cost),通常基于链路带宽。
- EIGRP 使用复合度量值(带宽、延迟、可靠性、负载)。
- 选择规则: 在管理距离相同的情况下,选择度量值最小的那条路径。
- 最长前缀匹配 (Longest Prefix Match):
- 这个原则不是用来选择哪条路由放入路由表的,而是用来选择路由表中哪条路由用于转发数据包的。
- 当数据包到达时,路由器会查找路由表中与目的 IP 地址最匹配的条目。如果同时存在 192.168.1.0/24 和 192.168.1.128/25 两个路由条目,并且数据包的目的地址是 192.168.1.130,那么路由器会选择更具体的 /25 路由进行转发。
RIB 的内容: RIB 中存储的条目就是经过上述选择后,路由器认为到达每个目的网络的“最佳”路径。
阶段三:转发表生成
转发表 (FIB) 是从路由表 (RIB) 中派生出来的。它的主要目标是优化查找过程,使得数据包转发可以由硬件(ASIC)而非软件(CPU)来完成,从而达到线速转发。
FIB 的构造过程和优化:
-
复制最佳路由: 路由表中所有的最佳路径(即那些被选定用于转发的路径)会被复制到转发表中。
-
预计算下一跳信息:
-
递归查找消除:
在复杂的网络中,路由表中的下一跳地址可能不是直接相连的。例如,“要到达 10.0.0.0/8,下一跳是 172.16.1.1”。
那么路由器还需要查找如何到达 172.16.1.1。为了提高转发效率,FIB 会预先完成这些递归查找,直接将最终的出接口和直接相连的下一跳 IP 地址存储在 FIB 条目中。
-
二层重写信息 (Layer 2 Rewrite Information):
FIB 不仅存储下一跳 IP 地址,还会预先包含将 IP 数据包封装到相应数据链路层帧(例如,以太网帧)所需的下一跳 MAC 地址。
这些 MAC 地址通常存储在邻接表 (Adjacency Table) 中,FIB 条目会直接指向邻接表中的对应条目。这样,路由器在转发数据包时,只需一步查找即可获得所有必要的二层信息,无需再执行 ARP 请求等操作。
-
-
硬件优化格式:
- FIB 通常以一种硬件友好的格式存储,例如使用树形结构(如 IP 地址查找树 Tries 或 CAM/TCAM),以便 ASIC 芯片可以进行非常快速的查找。这使得查找时间与表的大小无关,或者查找时间极短。
- 这意味着,当一个数据包到达路由器时,路由器不需要像软件路由那样,逐条比对路由表中的每个条目,而是直接在硬件中进行一次高速查找。
举例说明 (FIB 的优化):
假设路由表中有以下条目:
- 192.168.1.0/24 通过 Next-Hop 10.0.0.2 (Out Interface GigabitEthernet0/1)
- 而 10.0.0.0/30 是 GigabitEthernet0/1 接口的直连网络。
在构建 FIB 时,对于 192.168.1.0/24 这条路由,FIB 不仅会存储 10.0.0.2 和 GigabitEthernet0/1,还会预先查询 10.0.0.2 的 MAC 地址(假设是 AA:BB:CC:DD:EE:FF),然后将所有这些信息(目的网络、下一跳IP、出接口、下一跳MAC地址)打包成一个可以直接用于二层封装的条目。
总结
路由转发表 (FIB) 的构造是一个从各种路由信息来源开始,经过严格的路由选择算法,最终将最佳路径优化为适合硬件快速转发的数据结构的过程。
它将复杂的路由决策和地址解析过程提前完成,从而使得路由器能够以非常高的速度处理大量传入的数据包,是现代高速路由器的核心所在。