4.5 静态路由配置及其可能产生的路由环路问题
# 4.5 静态路由配置及其可能产生的路由环路问题
本节课我们介绍静态路由配置及其可能产生的路由环路问题,静态路由配置是指用户或网络管理员使用路由器的相关命令,给路由器人工配置路由表,这种人工配置方式简单,开销小,但不能及时适应网络状态(流量、拓扑等)的变化,一般只在小规模网络中
采用使用静态路由配置,可能出现以下导致产生路由环路的错误,一个是配置错误,另一个是聚合了不存在的网络,还有一个是网络故障。
接下来我们首先举例说明静态路由配置,我们采用如图所示的网络拓扑和相应的IP地址配置,这是路由器R1的路由表,路由器R1通过自己的接口0所配置的IP地址和地址掩码,可以自动得出接口0所在的网络。由于接口0与该网络直连,则下一跳不是路由器地址,而是通过接口0转发IP数据报给该网络中的某个主机,这属于直接交付。这条自动得出的路由条目的类型属于直连路由。同理,R1还可自行得出接口1的直连网络路由条目,
这是路由器R2的路由表,这是其接口0的直连网络路由条目,这是其接口1的直连网络路由条目。
假设R1要转发1个IP数据报给该网络中的某个主机,从图中可以看出,R1应该将该IP数据报转发给路由器R2的接口0,
但R1的路由表中并没有关于该目的网络的路由条目,换句话说,R1并不知道目的网络的存在。因此我们可以使用路由器的相关配置命令,给R1添加1条到达该目的网络的路由条目,这是该目的网络的地址,下1跳为路由器R2的接口0的地址,该路由条目是我们人工配置的静态路由,
假设R2要转发1个IP数据报给该网络中的某个主机,从图中可以看出,R2应该将该IP数据报转发给路由器R1的接口1,但R2的路由表中并没有关于该目的网络的路由条目,因此我们可以给R2添加1条到达该目的网络的路由条目,这是该目的网络的地址。下1跳为路由器R1的接口1的地址,类型为静态。以上就是我们举例说明的静态路由配置。
接下来我们举例说明默认路由的概念,假设路由器R的接口2连接到了因特网,这是路由器R1的路由表,这是其接口0的直连网络路由条目,这是其接口1的直连网络路由条目,这是我们人工配置的到达该目的网络的静态路由。假设R1要转发1个IP数据报给因特网中某个网络中的某个主机,从图中可以看出,R1应该将该IP数据报转发给路由器R的接口0。由于因特网中包含了众多的网络,如果我们给R1添加针对这些网络的每1条路由条目,则会给人工配置带来巨大的工作量,并且使R1的路由表变得非常大,降低了查表转发的速度。
实际上对于具有相同下一跳的不同目的网络的路由条目,我们可以用一条默认路由条目来替代。默认路由条目中的目的网络地址为0.0.0.0,地址掩码也为0.0.0.0,其CIDR形式为0.0.0.0/0。对于本例默认路由条目中的下一跳,是路由器R2的接口0的地址。
由于默认路由也是由我们人工配置的,因此其类型也是静态。在配置了默认路由条目后,我们甚至可以删除这条路由条目。
接下来我们举例说明特定主机路由的概念,有时候我们可以给路由器添加针对某个主机的特定主机路由条目,一般用于网络管理人员对网络的管理和测试。另外在需要考虑某种安全问题时,也可以采用特定主机路由,假设这是该网络中的某台特定主机,我们可以在R1的路由表中添加1条到达该主机的特定主机路由条目。特定主机路由条目中的目的网络地址为该特定主机的IP地址,地址掩码为255.255.255.255,其CIDR形式为特定主机IP地址斜线32。对于本例特定主机路由条目中的下一跳,是路由器R2的接口0的地址。由于特定主机路由也是由我们人工配置的,因此其类型也是静态。
可以看出特定主机路由的目的网络前缀最长,路由最具体,默认路由的目的网络前缀最短,路由最模糊,当路由器查表转发IP数据报时,若有多条路由条目可选,则采用最长前缀匹配的原则,选用目的网络前缀最长的路由条目进行转发
接下来我们举例说明,静态路由配置错误可能导致的路由环路问题,如图所示,这是各路由器自动得出的直连网络,这是我们给各路由器人工配置的静态路由。
我们来看看路由器R中的这条人工配置的静态路由条目,它表明 R2要转发IP数据报到该网络,下一跳,应转发给R1的接口1,
假设我们将下一跳错误的配置成了该地址,也就是错误的指向了R3的接口0,则当R2要转发IP数据报到该网络时,下一跳会错误的转发给路由器R3的接口0,R3收到该IP数据报后进行查表转发,找到了匹配的路由条目,下一跳,应该转发给该地址,也就是转发给R的接口1
R2收到该IP数据报后进行查表转发,找到了匹配的路由条目,下一跳应该转发给该地址,也就是转发给R3的接口0。
很显然由于我们静态路由配置错误,导致R2和R3之间产生了路由环路。为了防止IP数据报在路由环路中永久兜圈,在IP数据报首部设有生存时间、TTL字段。IP数据报进入路由器后,TTL字段的值被路由器减1,若TTL字段的值减1号不等于0,则被路由器转发,否则被丢弃。
我们再来举例说明,聚合了不存在的网络可能导致的路由环路问题,这是路由器R1的路由表,这是其自动得出的直连网络,这是我们给其人工配置的默认路由,下一跳指向路由器R2的接口0
这是路由器R2的路由表,这是其自动得出的直连网络,这是我们给其人工配置的1条聚合路由,它是由这两个网络地址聚合而来的,具体方法就是找这两个网络地址的共同前缀,然后将共同前缀保持不变,将剩余比特全部取0,写成点分10进制形式,在其后面写上斜线,斜线后面写上共同前缀的数量。
假设R2要转发IP数据报到该网络,进行查表转发,找到了匹配的路由条目,下一跳应该转发给该地址,也就是转发给R1的接口1。
R1收到该IP数据报后进行查表转发,找到了匹配的路由条目,下一跳,是通过接口2直接交付。
我们再来看看这条聚合路由的细节,它实际上包含了以下4个网络,该网络存在于我们的网络拓扑中,该网络也存在于我们的网络拓扑中,而该网络不存在,该网络也不存在。
当R2要转发IP数据报到这个不存在的网络时,进行查表转发,找到了匹配的路由条目,下一跳应该转发给该地址,也就是转发给R1的接口1,但对于这个不存在的网络,路由器R2应该不予转发,却错把它转发给了路由器R1。
R1收到该IP数据报后进行查表转发,只能走默认路由,下一跳,应该转发给该地址,也就是转发给R的接口0。很显然R1和R2之间产生了路由环路。
针对这种情况,我们可以在R2的路由表中添加针对所聚合的不存在的网络的黑洞路由,黑洞路由的下一跳为null0,这是路由器内部的虚拟接口,可以把它形象的看成是1个黑洞,IP数据报进入它后就有去无回了,也就是路由器丢弃了该IP数据报,而不是转发该IP数据报。
现在假设R2要转发IP数据报到这个不存在的网络,进行查表转发,找到了两条可选的路由条目,根据最长前缀匹配的原则,将会选择这条到达该不存在网络的黑洞路由,下一跳为虚拟接口null0,因此该IP数据报会进入这个黑洞
接下来我们再来举例说明,网络故障可能导致的路由环路问题,假设路由器R1检测到其接口0所直连的网络出现了故障,而不可达,就会自动在其路由表中删除该直连网络的路由条目。
之后,R2要转发IP数据报到该网络,进行查表转发,找到匹配的路由条目,下一跳,应该转发给该地址,也就是转发给R1的接口1。
R1收到该IP数据报后进行查表转发,找不到该IP数据报的目的,网络的相关路由条目,只能走默认路由,下一跳应该转发给该地址,也就是转发给R2的接口0,
这样就将该IP数据报错误的转发给了R2,,很显然 R1和R之间产生了路由环路。
针对这种情况,我们可以在R1的路由表中添加针对该直连网络的黑洞路由,这样当R2要转发IP数据报到该网络时,进行查表转发,找到匹配的路由条目,下一跳转发给R1的接口1,R1收到该IP数据报后,进行查表转发,找到匹配的路由条目,这是1条黑洞路由,下一跳为虚拟接口null0,因此该IP数据报会进入这个黑洞。
假设一段时间后之前的故障消失了,则R1又自动的得出了其接口0的直连网络的路由条目,并将我们之前人工配置的针对该直连网络的黑洞路由条目设置为失效状态。
假设R1再次检测到其接口0所直连的网络出现了故障而不可达,则会自动在其路由表中删除该直连网络的路由条目,并将我们之前人工配置的针对该直连网络的黑洞路由条目设置为生效状态。
本节课的内容小节如下