速读原著-TCP/IP(RIP:选路信息协议)

第10章 动态选路协议

10.4 RIP:选路信息协议

本节对R I P进行了描述,这是因为它是最广为使用(也是最受攻击)的选路协议。对于 R I P的正式描述文件是RFC 1058 [Hedrick 1988a],但是该R F C是在该协议实现数年后才出现的。

10.4.1 报文格式

RIP报文包含中在UDP数据报中,如图10-2所示(在第11章中对UDP进行更为详细的描述)。 图1 0 - 3给出了使用 I P地址时的 R I P报文格式。

命令字段为1表示请求,2表示应答。还有两个舍弃不用的命令( 3和4),两个非正式的命令:轮询( 5)和轮询表项( 6)。请
求表示要求其他系统发送其全部或部分路由
在这里插入图片描述
表。应答则包含发送者全部或部分路由表。版本字段通常为1,而第2版R I P(1 0 . 5节)将此字段设置为2。紧跟在后面的2 0字节指定地址系列(address family)(对于I P地址来说,其值是2)、I P地址以及相应的度量。在本节的后面可以看出, R I P的度量是以跳计数的。

采用这种2 0字节格式的R I P报文可以通告多达 2 5条路由。上限2 5是用来保证R I P报文的总长度为2 0×25 + 4 = 504,小于5 1 2字节。由于每个报文最多携带 2 5个路由,因此为了发送整个路由表,经常需要多个报文。
在这里插入图片描述

10.4.2 正常运行

让我们来看一下采用R I P协议的r o u t e d程序正常运行的结果。R I P常用的U D P端口号是5 2 0。

• 初始化:在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送一个请求报文,要求其他路由器发送完整路由表。在点对点链路中,该请求是发送给其他终点的。如果网络支持广播的话,这种请求是以广播形式发送的。目的 U D P端口号是5 2 0(这是其他路由器的路由守护程序端口号)。这种请求报文的命令字段为 1,但地址系列字段设置为 0,而度量字段设置为 1 6。这是一种要求另一端完整路由表的特殊请求报文。

• 接收到请求。如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送给请求者。否则,就处理请求中的每一个表项:如果有连接到指明地址的路由,则将度量设置成我们的值,否则将度量置为 1 6(度量为1 6是一种称为“无穷大”的特殊值,它意味着没有到达目的的路由)。然后发回响应。

• 接收到响应。使响应生效,可能会更新路由表。可能会增加新表项,对已有的表项进行修改,或是将已有表项删除。

• 定期选路更新。每过3 0秒,所有或部分路由器会将其完整路由表发送给相邻路由器。发送路由表可以是广播形式的(如在以太网上),或是发送给点对点链路的其他终点的。

• 触发更新。每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整路由表,而只需要发送那些发生变化的表项。
每条路由都有与之相关的定时器。如果运行 R I P的系统发现一条路由在 3分钟内未更新,就将该路由的度量设置成无穷大( 1 6),并标注为删除。这意味着已经在 6个3 0秒更新时间里没收到通告该路由的路由器的更新了。再过 6 0秒,将从本地路由表中删除该路由,以保证该路由的失效已被传播开。

10.4.3 度量

R I P所使用的度量是以跳 ( h o p )计算的。所有直接连接接口的跳数为 1。考虑图1 0 - 4所示的路由器和网络。画出的 4条虚线是广播 R I P报文。

路由器R 1通过发送广播到 N 1通告它与N 2之间的跳数是 1(发送给 N 1的广播中通告它与N 1之间的路由是无用的)。同时也通
过发送广播给N 2通告它与N 1之间的跳数为1。同样,R 2通告它与N 2的度量为1,与N 3的度量为1。

如果相邻路由器通告它与其他网络路由的跳数为1,那么我们与那个网络的度量就是 2,这是因为为了发送报文到该网络,我们必
须经过那个路由器。在我们的例子中, R 2到N 1的度量是2,与R 1到N 3的度量一样。由于每个路由器都发送其路由表给邻站,因此,可以判断在同一个自治系统 A S内到每个网络的路由。如果在该 A S内从一个路由器到一个网络有多条路由,那么路由器将选择跳数最小的路由,而忽略其他路由。

跳数的最大值是 1 5,这意味着 R I P只能用在主机间最大跳数值为 1 5的A S内。度量为1 6表示到无路由到达该I P地址。
在这里插入图片描述

10.4.4 问题

这种方法看起来很简单,但它有一些缺陷。首先, R I P没有子网地址的概念。例如,如果标准的B类地址中16 bit的主机号不为0,那么R I P无法区分非零部分是一个子网号,或者是一个主机地址。有一些实现中通过接收到的R I P信息,来使用接口的网络掩码,而这有可能出错。

其次,在路由器或链路发生故障后,需要很长的一段时间才能稳定下来。这段时间通常需要几分钟。在这段建立时间里,可能会发生路由环路。在实现 R I P时,必须采用很多微妙的措施来防止路由环路的出现,并使其尽快建立。 RFC 1058 [Hedrick 1988a]中指出了很多实现R I P的细节。

采用跳数作为路由度量忽略了其他一些应该考虑的因素。同时,度量最大值为 1 5则限制了可以使用R I P的网络的大小。

10.4.5 举例

我们将使用r i p q u e r y程序来查询一些路由器中的路由表,该程序可以从 g a t e d中得到。r i p q u e r y程序通过发送一个非正式请求(图 1 0 - 3中命令字段为5的“p o l l”)给路由器,要求得到其完整的路由表。如果在 5秒内未收到响应,则发送标准的 R I P请求(c o m m a n d字段为1)(前面提到过的,将地址系列字段置为 0,度量字段置为 1 6的请求,要求其他路由器发送其完
整路由表)。 图1 0 - 5给出了将从 s u n主机上查询其路由表的两个路由器。如果在主机 s u n上执行r i p q u e r y程序,以得到其下一站路由器 n e t b的选路信息,那么可以得到下面的结果:
在这里插入图片描述
正如我们所猜想的那样, n e t b告诉我们子网的度量为 1。另外,与n e t b相连的位于机端的以太网( 1 4 0 . 2 5 2 . 1 . 0)的m e t r i c也是1(-n参数表示直接打印 I P地址而不需要去查看其域名)。在本例中,将n e t b配置成认为所有位于 1 4 0 . 2 5 2 . 1 3子网的主机都与其直接相连 —即, n e t b并不知道哪些主机真正与1 4 0 . 2 5 2 . 1 3子网相连。由于与 1 4 0 . 2 5 2 . 1 3子网只有一个连接点,因此,通告每个主机的度量实际上没有太大意义。

图1 0 - 6给出了使用 t c p d u m p交换的报文。采用 - is 1 0选项指定S L I P接口。第1个请求发出一个R I P轮询命令(第1行)。这个请求在 5秒后超时,发出一个常规的 R I P请求(第 2行)。 第1行和第2行最后的2 4表示请求报文的长度: 4个字节的R I P首部(包括命令和版本),然后是单个 2 0字节的地址和度量。

第3行是第一个应答报文。该行最后的 2 5表示包含了2 5个地址和度量对,我们在前面已经计算过,其字节数为5 0 4。这是上面的r i p q u e r y程序所打印出来的结果。我们为 t c p d u m p程序指定- s 6 0 0选项,以让它从网络中读取 6 0 0个字节。这样,它可以接收整个 U D P数据报(而不是报文的前半部),然后打印出R I P响应的内容。该输出结果省略了。
在这里插入图片描述
在这里插入图片描述
第4行是来自路由器的第二个响应报文,它包含后面的 1 2个地址和度量对。可以计算出该报文的长度为1 2×20 + 4=244,这正是r i p q u e r y程序所打印出来的结果。

如果越过n e t b路由器,到g a t e w a y,那么可以预测到我们子网( 1 4 0 . 2 5 2 . 1 3 . 0)的度量为2。可以运行下面的命令来进行验证:
在这里插入图片描述
这里,位于图1 0 - 5上面的以太网(1 4 0 . 2 5 2 . 1 . 0)的度量依然是1,这是因为该以太网直接与g a t e w a y和n e t b相连。而我们的子网1 4 0 . 2 5 2 . 1 3 . 0正如预想的一样,其度量为 2。

10.4.6 另一个例子

现在察看以太网上所有非主动请求的R I P更新,以看一看R I P定期给其邻站发送的信息。图1 0 - 7是n o a o . e d u网络的多种排列情况。为了简化,我们不用本文其他地方所采用的路由器表示方式,而以R n来代表路由器,其中n是子网号。以虚线表示点对点链路,并给出了这些链路对端的I P地址。
在这里插入图片描述
在主机s o l a r i s上运行Solaris 2.x的s n o o p程序,它与t c p d u m p相类似。我们可以在不需要超用户权限的条件下运行该程序,但它只捕获广播报文、多播报文以及发送给主机的报文。图1 0 - 8给出了在6 0秒内所捕获的报文。在这里,我们将大部分正式的主机名以 Rn来表示。

-P标志以非混杂模式捕获报文,- t r打印出相应的时戳,而udp port 520 只捕获信源或信宿端口号为5 2 0的U D P数据报。来自R 6、R 4、R 2、R 7、R 8和R 3的前6个报文,每个报文只通告一个网络。查看这些报文,可以发现R 2通告前往1 4 0 . 2 5 2 . 6 . 0的跳数为1的一条路由,R 4通告前往1 4 0 . 2 5 2 . 4 . 0的跳数为1的一条路由,等等。

但是,g a t e w a y路由器却通告了1 5条路由。我们可以通过运行 s n o o p程序时加上-v参数来查看R I P报文的全部内容(这个标志输出全部报文的全部内容:以太网首部、 I P首部、U D P首部以及R I P报文。我们只保留了R I P信息而删除了其他信息)。图1 0 - 9给出了输出结果。
在这里插入图片描述
把这些子网1 4 0 . 2 5 2 . 1上通告报文经过的路由与图 1 0 - 7中的拓扑结构进行比较。使人迷惑不解的一个问题是为什么图 1 0 - 8输出结果中, R 1 0通告其有4个网络而在图 1 0 - 7中显示的只有3个。如果查看带s n o o p的R I P报文,就会得到以下通告路由:
在这里插入图片描述
前往B类网络1 4 0 . 2 5 1的路由是假的,不应该通告它(它属于其他机构而不是n o a o . e d u)。
在这里插入图片描述
图1 0 - 8中,对于 R 1 0发送的R I P报文,s n o o p输出“B R O A D C A S T”符号,它表示目的I P地址是有限的广播地址 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5(1 2 . 2节),而不是其他路由器用来指向子网的广播地址(1 4 0 . 2 5 2 . 1 . 2 5 5)。

发布了1489 篇原创文章 · 获赞 1394 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/weixin_42528266/article/details/104684398