每日学习之路由
路由子系统
路由器
一台网络设备,配备了多个网络接口卡,转发入口流量
路由
一组参数,参数中存储了往一个给定目的地转发流量所需要的信息
路由表
一个数据库,储存了决定一个入口封包应当送给本地主机还是转发,以及在转发时正确转发封包所需要的信息。路由表就是许多路由的一个集合。路由表是路由子系统的核心
非路由多接口主机
有些非路由主机,特别是服务器,跟路由器一样有着多个NIC,但是他们不转发任何封包,他们是因为以下几个原因才配备了多个NIC
1.高可用性:如果一个接口故障,可以让另一个接口接管流量
2.更强的路由能力:服务器可以配置多条路由而不只是一条默认路由,可以使用静态路由或者多个NIC来到达特定的主机或子网
3.多路传输:可以捆绑多个接口,当作一个接口使用,可以起到增加带宽的作用
Scope
路由和IP地址都可以指定一个scope,用来告诉内核在哪些情况下是有意义的,是可以被使用的。在Linux中,路由的scope表示到目的网络的距离。IP地址的scope表示该IP地址距离本地主机有多远。
IP地址常用的scope:
主机:当一个地址只用于主机自身的内部通信时,他的scope就是主机。在这个主机之外不知道该地址,并且不能被用于外部通信。例如,回环地址127.0.0.1
链路:当一个地址只在一个局域网内有意义且只在局域网内使用时,该地址的scope为链路,例如,子网的广播地址
全域:当一个地址可以在任何地方使用时,其scope为全域,这是大多数地址的scope
上面IP地址常用的scope被用作路由时,有不同的含义:
主机:一条路由表示的目的地址为本地主机
链路:一条路由表示的目的地址为本地网络
全域:一条路由表示的目的地址超过一个下一跳
默认网关:经常作为0.0.0.0/0路由,就是当没有其他到达目的地的确定路由时使用的路由
定向广播:定向广播的目的地是远端子网的广播地址,只有位于定向广播封包中指定子网中的主机才能识别定向广播,因为定向广播只能由达到目的子网路径上的最后一个网关识别。滥用定向广播可以产生拒绝服务攻击,但同时恶意的定向广播和善意的定向广播很难被区分开,但是有一种情况很可能是恶意的:定向广播发送ICMP ECHO REQUEST封包(即ping)
主地址和辅助地址
在同一个NIC上可以配置多个IP地址,但是他们会被区分为主地址和辅助地址。当配置一个地址时,如果该地址与同一个NIC上已经配置的地址在同一个子网中,那么该地址就会被视为辅助地址,因此,地址的配置顺序对于他们是主地址还是辅助地址起很大的作用。在一个接口上,可以配置多个主地址和多个辅助地址,但是对于一个特定的子网掩码,只能有一个主地址。
当CPU正好运行使用IP配置的程序时,主地址可以降低其开销;在删除一个主地址时,与之相关联的辅助地址也会被删除,但是可以通过配置/proc,使在主地址被删除时,将辅助地址提升为主地址;当主机为本地生成的流量选择源IP地址时,只考虑主地址
路由类型与动作
默认动作是根据从路由表得到的该路由的转发信息,即下一跳路由器地址和出口设备来转发该封包
但Linux同时允许用户根据需要来定义其他动作:
黑洞:与这类型路由相匹配的封包将被悄悄丢弃
不可到达:与这一类型的路由相匹配的封包被丢弃,并生成一个互联网控制消息协议主机不可达的消息
禁止:与这一类型的路由相匹配的封包被丢弃,并生成一个ICMP封包被过滤的消息
放弃:与这一类型匹配,路由表将放弃查找当前路由表,如果还存在其他路由表时继续查找下一张表
路由缓存
在一Linux系统中可能创建多张独立的路由表来支持策略路由功能,但是无论Linux中无论路由表的数量有多少,只使用一个路由缓存。如果支持策略路由,那缓存就不能够提高任何的公平性,即各个路由表在缓存中占用的空间是不均等的,但是这种方法可以提高整个系统的路由吞吐量
路由缓存的垃圾回收
垃圾回收负责清理路由子系统中不再被使用的数据结构。但是如果出现更加重要的信息需要被存储,那么正在被使用的数据结构也可以被删除。
垃圾回收有两种机制:
1.同步回收:当路由子系统认为需要释放内存时,立即进行清理
2.异步回收:使用一个周期性定时器来触发定期的清理操作,使缓存的容量在一个合理的范围内,异步回收的缓存项分为两类,一是过期且应当被删除的 缓存项;二是没有过期,但是内核需要释放内存的可以被牺牲的缓存项
查找
Linux同时使用路由缓存和路由表来进行查找工作。路由缓存查找是从一张hash表中寻找匹配项,而路由表查找要更为复杂一些,它是基于最长前缀匹配算法(即选择子网掩码最长的路由),若同时存在两个相同前缀长度的路由,则通过TOS、优先级来进行选择

策略路由
Linux内核在默认情况下使用两张路由表:一张用于本地路由,另一张由管理员来配置。但是如果内核编译时支持策略路由,那最多可以有255张不同的、相互独立的路由表。策略路由的主要思想是允许用户除了可以根据目的IP地址配置路由外,还可以根据其他多个参数来配置路由。使用策略路由进行查找分为两个步骤,先根据配置策略选择路由表,然后再从选择的路由表中查找路由,这比普通的直接从路由表中查找,不可避免的增加了路由查找时间
策略路由在选择路由表时,会根据以下四个参数:源IP地址和目的IP地址、入口设备、TOS、Fwmark
多路径路由
多路径指管理员为一条路由的目的地指定多个下一跳,一般来说,一个路由器只使用一个ISP,但当由于某种原因第一个ISP失效时,会转向另一个ISP。
Linux允许管理员通过weight关键字为每个下一跳分配一个权值,如此在选择算法方面就有着很大的操作空间。如果所有下一跳的权值相同,那该算法就被称为等价多路径算法。还有一种算法叫做加权循环算法,管理员根据带宽、开销等因素来确定权值
今天的路由学习就到这里了!
浙公网安备 33010602011771号