linux路由表,策略路由,路由查找


路由表

内核中路由表有2种:

l 一个是缓存路由(fib),是自动学习生成自动管理的,用户没必要去干预,但是内核还是提供了方法让用户可以去清空它。但是用户不能设置它的项,但是可以根据这个缓存更新的原理从外部影响他。

l 路由表:一共有256个,在内核中是一个数组,可以配置让内核使用其中的一个或者多个。默认的是使用0254255这三个。一般大家关系都是254号的main路由,route 命令看到的和操作的都是这个路由表。255local路由,还包含了广播地址等,0是全路由,还包括了ipv6的,是最全面的。但是254的主路由是最容易看,也是用户最关心的,所以route命令只操作这个路由表。选择使用哪个路由表叫做留有策略,这个也是可以通过ip rule命令配置的。

路由表里面的路由类型有6种,我们平时见的最多的是单播和网段类型的:

l 单播。目的地址是某一个ip,一般是手动添加的。

l 网段。这个是最常见的,到达某个网段需要从哪里发送出去

l Nat。是的,nat也是路由的一种,他会修改掉ip的地址域为要到达的地址。之所以nat也是路由的一种是因为,nat也是一种形式的路由。这个natiptablenat是同时存在的两种不同的机制。

l Unreachable:不可达类型的路由。我们经常看到不可达,通常是因为没有配置到目的地址的路由,或者是配置的不对。但是还可以单独的配置一个不可达类型的路由,即使他是可达的。

l Prohibit:禁止类型的路由。到某个地址的路由默认都是添加的如何到达,但是也可以添加如何禁止。同样是到某个网段或地址的路由,可以在某个网口上设置其禁止,这个与实际的到不了不再一个层次。这个是查路由的时候路由表告诉你的这个网段是被禁止的。

l Blackhole:到达目标网段的所有数据包都可以查到,但是都会直接被丢弃。也就是这是一个欺骗的路由条目。你以为你查到了,你以为你发出去了,其实都被悄悄地丢掉了。

 

这些种类的路由由于功能和路由策略重合,同时使用比较混乱,所以如果要实现复杂的路由,就应该使用路由策略规则,而不是这里的路由类型。

路由表查询匹配算法

路由表的查询匹配算法一般是lpmlongest prefix match),这种算法适合于不同精细度的网段,允许匹配最精细的网段设置,如果没有更精细的则匹配当前的。最不精细的等级就是0.0.0.0网段,可以匹配全部的网段。

 

路由策略

每一个路由表都对应一个路由策略,默认的路由策略最简单,就是查询表即可。默认也有3个路由策略:


 

所以,我们自己添加了一个0254255之外的路由表之后,这个路由表也是不会正常的工作的,路由表只是数据库,查不查询,怎么查询是由路由策略决定的。自己添加了路由表之后要想让这个路由表被查询,需要添加一个对应的路由策略。默认的路由策略都是lookup,就是我们通常意义的查询行为,还有其他的路由策略行为:

l Nat:查询到的路由是用来做nat的。对应的路由表中一般是有很多nat类型的路由表

l Unreachable:所有在对应的路由表中查到的路由条目都给出unreachable的答案

l Prohibit:所有在对应的路由表中查到的路由条目都给出prohibit的答案

l Blackhole:所有在对应的路由表中查到的路由条目都直接丢弃

 

路由策略从第一个开始向后查询,进入查询每个策略对应的路由表,如果查到了,就采取对应的路由策略规定的行为。

路由查找流程

路由会现在缓存(fib)中查找,找不到则到路由表中查找。但是这个在路由表中查找并不但单纯的去查表,网上很多资料都是描述的仿佛是直接去查路由表,匹配目的地址,但这已经是2.2版本内核之前的事情了。现在的流程复杂的多。

以前的路由查找,只是单纯的根据目的ip地址来进行lpm匹配查询,而现在的策略路由支持根据其他的域,比如源地址,tos,来的端口等来决定匹配的策略(这些叫做selector)。当然,路由表还是单纯的目的地址匹配,支持多种匹配的是路由策略(rule)。

你可能感兴趣的:(linux路由表,策略路由,路由查找)