RIPv2下一跳字段分析

协议简介及报文封装格式

RIP是Routing Information Protocol(路由信息协议)的简称。它是一种较为简单的内部网关协议IGP(Interior Gateway Protocol),主要用于规模较小的网络中,比如校园网以及结构较简单的地区性网络。对于更为复杂的环境和大型网络,一般不使用RIP。

RIP是一种基于距离矢量(Distance-Vector)算法的协议,它通过UDP报文进行路由信息的交换,使用的端口号为520。

RIP有两个版本:RIP-1和RIP-2。

  • RIP-1是有类别路由协议(Classful Routing Protocol),它只支持以广播方式发布协议报文。RIP-1的协议报文中没有携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1无法支持路由聚合,也不支持不连续子网(Discontiguous Subnet)。
  • RIP-2是一种无分类路由协议(Classless Routing Protocol),有两种报文传送方式:广播方式和组播方式,缺省将采用组播方式发送报文,使用的组播地址为224.0.0.9。当接口运行RIP-2广播方式时,也可接收RIP-1的报文。

RIP-1的报文格式

0               7              15              23              31
+---------------------------------------------------------------+
|      Command  |  Version     |            Must be zero        |
+---------------------------------------------------------------+
| Address family identifier    |            Route Tag           |
+---------------------------------------------------------------+
|                           Must be zero                        |
+---------------------------------------------------------------+
|                           Must be zero                        |
+---------------------------------------------------------------+
|                           Metric                              |
+---------------------------------------------------------------+

RIP-2的报文格式

0               7              15              23              31
+---------------------------------------------------------------+
|      Command  |  Version     |            Must be zero        |
+---------------------------------------------------------------+
| Address family identifier    |            Route Tag           |
+---------------------------------------------------------------+
|                           IP Address                          |
+---------------------------------------------------------------+
|                           Subnet Mask                         |
+---------------------------------------------------------------+
|                           Next Hop                            |
+---------------------------------------------------------------+
|                           Metric                              |
+---------------------------------------------------------------+

实验

RIPv2并没有拓展其他报文字段,而是对v1保留字段进行填充,而v2中下一跳(Next Hop)字段的作用我用一个实验来说明一下自己的理解。

拓扑如下:

 

场景:为了实现R1与R3 3.3.3.3/32网络互通,需要全网运行路由协议。R1、R2、R3同属一个广播多路访问网络(192.168.1.0/24),R1与R2运行RIPv2,R2与R3运行OSPF,R3同时连接一个3.3.3.3/32的网络,并宣告到OSPF进程。R2上将OSPF路由信息引入RIP。R1\R2\R3的IP分别为192.168.1.1/.2/.3 。

分析:从R1访问R3的3.3.3.3/32网络,是通过哪台路由器访问的?为什么?从路由传递层面思考。

  1. 首先R1要想访问R3的3.3.3.3/32网络,必须获取目标地址路由信息。R3将3.3.3.3/32宣告到OSPF进程后,R3发给R2。
  2. 此时R2到达3.3.3.3/32下跳为R3的出接口地址,R2同时做了OSPF引入RIP的动作,会将OSPF路由表注入到RIP路由表,再由R2将此路由发给R1。
  3. R1收到3.3.3.3.3/32路由信息后,将上层协议数据封装上源、目的IP,进行下一步数据交换转发。
  4. 在R1上查看路由表如下,到达3.3.3.3/32的路由下一跳是192.168.1.3。
[R1]display ip routing-table 
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
         Destinations : 8        Routes : 8        

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

        3.3.3.3/32  RIP     100  1           D   192.168.1.3     GigabitEthernet0/0/0
      127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
      127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
    192.168.1.0/24  Direct  0    0           D   192.168.1.1     GigabitEthernet0/0/0
    192.168.1.1/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
  192.168.1.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0
255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

那么,根据路由传递方向,到达3.3.3.3/32路由是R2传递给R1的,下一跳应该是192.168.1.2才对,而此处下一跳却为R3,为什么呢?

继续在R2上抓包分析,得到如下数据包

Frame 823: 86 bytes on wire (688 bits), 86 bytes captured (688 bits) on interface 0
Ethernet II, Src: HuaweiTe_0d:2d:9b (00:e0:fc:0d:2d:9b), Dst: IPv4mcast_09 (01:00:5e:00:00:09)
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 224.0.0.9
User Datagram Protocol, Src Port: 520, Dst Port: 520
Routing Information Protocol
    Command: Response (2)
    Version: RIPv2 (2)
    IP Address: 3.3.3.3, Metric: 1
        Address Family: IP (2)
        Route Tag: 0
        IP Address: 3.3.3.3
        Netmask: 255.255.255.255
        Next Hop: 192.168.1.3
        Metric: 1
    IP Address: 192.168.1.0, Metric: 1
        Address Family: IP (2)
        Route Tag: 0
        IP Address: 192.168.1.0
        Netmask: 255.255.255.0
        Next Hop: 0.0.0.0
        Metric: 1

可以看到,这条路由源IP为192.168.1.2,目的IP为组播地址224.0.0.9,这条路由是由R2发出的,其中携带了两条路由信息,且3.3.3.3的路由Next Hop为192.168.1.3,此处非零,填充了下一跳字段。为什么会填充Next Hop字段?

结论:

  1. R2给R1传递3.3.3.3/32路由信息时下一跳填充时自动填充的,并没有做人为策略。当R2收到一条路由检测到入方向路由同出方向处于同一网段,同时底层链路为MA(广播多路访问)网络,则会在路由发送方向自动填充下跳为收到路由中的下一跳地址,这样可以解决MA网络环境中次优路径问题。
  2. Next Hop字段只会在MA网络中携带,NBMA、P2P等网络环境并不会填充,原因正是由网络环境所决定,这里不在赘述。

发表评论

电子邮件地址不会被公开。 必填项已用*标注