路由表和转发表网络层的关系

路由表和转发表网络层的关系

在某些路由算法(例如距离矢量算法)中,确定到下一个路由器的最短路径。

另一方面,转发表根据 IP 地址到路由器接口的最长前缀匹配告诉我们要转发到哪个路由器接口。

因为每个路由器的路由表都包含距离向量,它告诉我们到网络中所有其他路由器的最短距离(稳定状态)。

基于此,我有几个问题。

1) 既然路由表包含到下一跳路由器的最短距离,为什么需要转发表来告诉我们要转发到哪个路由器接口?如何将这两个概念协调在一起?还是我遗漏了什么

2) 路由算法需要确定数据包从客户端到达服务器的最短路径,例如,这是否意味着每次与不同的服务器建立 TCP 连接时,都会通过查看路由器的路由表来确定最短路径。这究竟是怎么发生的?我只知道路由器存储网络中所有路由器的距离向量,即到该网络中的所有路由器的最短距离。他们如何使用这些信息来确定数据包的最短路径?

希望我的问题清楚。

答案1

有两种东西可以称为“转发表”:L2 交换机的 MAC→端口映射和 L3 路由器的 FIB。根据您问题的其余部分,我假设您实际上是在问后者。(如果您真的想问前者,请参阅 @harrymc 的回答。)

1) 既然路由表包含到下一跳路由器的最短距离,为什么需要转发表来告诉我们要转发到哪个路由器接口?如何将这两个概念协调在一起?还是我遗漏了什么

路由协议通常被描述为具有两个数据库:

  • “RIB”(路由信息库)包含输入路由协议使用它来做出决策 - 例如,它存储所有候选路由、距离向量、链路状态等。在 BGP 中,它将包含从其他 BGP 对等体收到的所有路由通告。RIB 条目可能尚未在路由与其接口之间建立直接关联。

  • 'FIB'(转发信息库)是结果路由算法的决策。它只包含算法选择的特定路由,以及解析的网关地址和设备。基本上,它是您从 Linux/BSD 中了解的“路由表”。

RIB 由路由协议守护进程内部保存,而 FIB 则导出到操作系统的路由表(或硬件加速的路由/转发芯片)。换句话说,您在ip routeLinux 上运行所看到的实际上是 FIB。

分离是一种优化,因为确定最佳路径是不是快;它可能占用相当多的 CPU 和内存(并且它不像总是使用“最短”路径那么简单)。

但是,我们不需要为每个数据包计算最短路由,只需要在 RIB 内容实际发生变化时进行计算即可,因此,路由是预先计算的,并放入 FIB 中,而 FIB 只需要执行查找每个数据包最长匹配前缀的最后步骤。

2) 路由算法需要确定数据包从客户端到达服务器的最短路由,例如,这是否意味着每次与不同的服务器建立 TCP 连接时,都通过查看路由器路由表来确定最短路由。

不是。如上所述,每当网络拓扑发生变化时,都会预先计算“最佳”路由。然后将它们加载到 FIB 中,这样各个连接只需进行快速“最长前缀匹配”查找即可。

互联网是一个分组交换网络,这意味着路由查找不仅在建立 TCP 连接时进行,而且在以下情况下也进行:每一个包稍后再进行。(是的,这意味着即使现有的 TCP 连接也可能突然开始采用与之前不同的路径。)这与电路交换网络形成对比。

这究竟是怎么发生的?我只知道路由器存储了网络中所有路由器的距离向量,即到该网络中的所有路由器的最短距离。他们如何使用这些信息来确定数据包的最短路径?

对于一般确定最短路径的机制,Dijkstra 算法是一个很好的开始。它是 OSPF 和其他几种协议的基础。

也就是说,每个路由协议都以不同的方式执行。BGP 有自己的规则,OSPF 和 IS-IS 有自己的规则,RIP 和 Babel 有自己的规则。(有些协议是距离矢量,有些是链路状态,有些同时是两者。例如,OSPF 在区域内是链路状态,但在区域之间是距离矢量。)路由器甚至会有全局规则,告诉它优先选择 OSPF 路由而不是 RIP,优先选择 RIP 而不是 BGP,等等。

注意并非全部路由器甚至运行自动路由协议。FIB 中的所有路由完全可以由管理员手动输入。

答案2

他们肯定不会保留相同的信息。

路由表是第 3 层表,其中规定X.X.X.X/YIP 目的地要经过z.z.z.z路由器。
转发表是第 2 层表,其中规定与 z.z.z.z路由器通信时,要将数据包发送到 MAC 地址aa:bb:cc:dd:ee:ff

例如,转发表可能会表明绑定到目的地的数据包192.168.1.0/24应该从物理端口 ethernet1/2 发送出去。

在本地网络中,您使用转发表获取其他主机的 MAC 地址并向其发送数据包。您的网络设备将arp whohas ip z.z.z.z在第 2 层广播数据包以获取相关的 MAC 地址。

要与不同子网中的主机通信,您应该通过本地网络内的路由器进行路由。路由表将告知此路由器拥有哪个 IP,因此使用转发机制即可到达哪个路由器。

换句话说,路由表包含节点愿意保留的所有路由,以及路由协议正在使用的信息。硬件使用转发表来物理地将数据包移入和移出接口。硬件可以根据转发内容继续转发,而路由表仍在更新。

相关内容