路由select:特异性与度量

我知道当select路由select时,Linuxselect最具体的路由到目的地。 但是路线的指标呢? 它比路线的特异性有更高的优先权吗?

也可以参考Linux所使用的路由selectalgorithm的细节。

路由度量用于在具有相同特性的路由中设置偏好。 一般情况下(即思科,Windows等)的路由也是如此。 所以模型的工作原理是:

  1. find最具体的路线 (又名最长的前缀匹配*
  2. 如果有多条具有相同特征的路由,则selectpipe理距离最小的路由(区分直接连接的路由,静态路由和各种路由协议)。
  3. 在该路由协议和特定路由中(如果路由特性和pipe理距离相同),select度量值最低的路由

请注意,在基于策略的路由中还可能会有其他的事情,例如根据源IP地址执行路由等。 但是路线的特殊性,行政距离,然后是度量是我认为是主要的三件事情。

*称为最长前缀匹配,因为二进制子网(例如/ 24)看起来像11111111.11111111.11111111.00000000 。 所以路由器只能扫描二进制1的前缀,一旦遇到零就停止,然后匹配前缀。

Linux为灵活的路由select提供了许多工具。

单路由表

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

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

请注意,内核指标(由ip route show )是由路由守护进程select的,并不一定与任何特定路由协议的指标相关。 例如,Quagga对其安装在内核中的所有路由使用相同的度量,而与协议的度量无关。

源特定的路线

Linux也支持具有SRC属性的路由,它只匹配给定源地址的数据包。 SRC只适用于IPv6,直到最近才有bug(3.11,如果内存服务); 除非你知道你在做什么,否则我不build议使用它。

多个路由表

如果你需要比上面提供的更多的灵活性,你将需要使用多个路由表,并且编写规则为每个数据包select一个特定的路由表。 一个常见的技术是在源地址上分派以模拟源特定的路由。 另一种技术是在自己的路由表中运行每个路由守护进程,并模拟思科的“pipe理距离”。 所有这些在LARTC的第4章中都有详细的介绍 。