路由选择:特异性与度量

Eug*_*ash 19 linux routing route metrics iproute2

我知道 Linux在进行路由选择时会选择到达目的地的最具体的路由。但是路由的度量呢?它的优先级是否比路由的特殊性更高?

参考 Linux 使用的路由选择算法的细节也将不胜感激。

Kyl*_*ndt 30

路由度量是在具有相同特异性的路由之间设置优先级。对于一般路由(即 Cisco、Windows 等)而言,情况确实如此。所以模型的工作原理如下:

  1. 找到最具体的路由(又名最长前缀匹配*
  2. 如果有多条路由具有相同的特性,则选择管理距离最小的路由(这可以区分直接连接路由、静态路由和各种路由协议)。
  3. 在该路由协议和特定路由中(如果路由特定性和管理距离相同),选择具有最低度量的路由

请注意,这种基于策略的路由可能会发生其他事情,让您可以执行诸如基于源 IP 地址的路由之类的操作。但是路线特异性、管理距离和指标是我认为的主要三件事。

*它被称为最长前缀匹配,因为二进制的子网(例如/24)看起来像11111111.11111111.11111111.00000000. 因此,路由器只需扫描二进制 1 的前缀,并在遇到零时停止,然后匹配前缀。


jch*_*jch 10

Linux 提供了许多用于灵活路由选择的工具。

单路由表

在最简单的情况下,只有一个内核路由表,没有具有 SRC 属性的路由。该表包含许多路由,这些路由ip route add由 DHCP 守护程序或路由守护程序手动 ( )放置在那里。在这种情况下,内核选择:

  • 最具体的路线;
  • 如果有多个同样特定的路由,则是具有最小内核度量的路由。

请注意,内核度量(由 显示ip route show)由路由守护程序选择,不一定与任何特定路由协议的度量相关。例如,Quagga 对它安装在内核中的所有路由使用相同的度量,独立于协议的度量。

特定于源的路由

Linux 还支持具有 SRC 属性的路由,该属性仅匹配具有给定源地址的数据包。SRC 仅适用于 IPv6,直到最近才出现问题(3.11,如果没记错的话);我不建议使用它,除非您知道自己在做什么。

多个路由表

如果您需要比上面提供的更多的灵活性,您将需要使用多个路由表,并编写规则来为每个数据包选择一个特定的路由表。一种常见的技术是在源地址上调度以模拟特定于源的路由。另一种技术是在自己的路由表中运行每个路由守护程序,并模拟 Cisco 的“管理距离”。LARTC 第 4 章详细描述了所有这些。