《计算机网络微课堂》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 所直连的网络出现了故障而不可达,则会自动在其路由表中删除该直连网络的路由条目,并将我们之前人工配置的针对该直连网络的黑洞路由条目设置为生效状态。

本节课的内容小节如下:

posted @ 2024-05-28 09:03  peterjxl  阅读(35)  评论(2编辑  收藏  举报