技术背景
- RIP的协议报文采用UDP封装,报文的源、目的端口均是UDP 520端口。
- RIP定义了两种报文,它们分别是请求(Request)报文和响应(Response)报文。RIPv1和RIPv2在协议报文各个字段的定义中存在些许差异,这些差异实际上是两个版本工作机制的不同所造成的。
- Request报文用于向邻居请求全部或部分RIP路由信息,而Response报文则用于发送RIP路由更新,在Response报文中携带着路由以及该路由的度量值等信息。
RIP工作原理简述
- 一旦路由器的某个接口激活RIP后,该接口立即发送一个Request报文和Response报文,并开始侦听RIP协议报文。
- 随后该接口开始Response报文的周期性发送。
- RIPv1使用广播地址255.255.255.255作为协议报文的目的IP地址,而RIPv2则不同,它使用组播IP地址224.0.0.9作为协议报文的目的IP地址。
- 当RIP路由器收到Request报文后,会使用Response报文进行回应,在该报文中携带对方所请求的路由信息。
- 当RIP路由器收到Response报文后,会解析出该报文中所携带的路由信息,如果报文中的路由信息是自己尚未发现的,并且路由的度量值有效,则路由器将学习该路由并将路由加载进路由表,同时为这条路由关联度量值、出接口和下一跳信息。
RIPv1的报文结构
RIPv1报文(如下图所示)中各个字段的含义如下:
-
命令(Command ):该字段用于标识RIP报文的类型。
(1)值为1时该报文为Request报文,用于向直连路由器请求全部或部分路由信息。
(2)值为2时该报文为Response报文,用于发送路由更新,该报文可以作为对Request报文的回应,也可以是路由器自主发送的,比如周期性发送路由更新或者触发性发送路由更新。
(3)一个Response报文中最多可携带25个路由条目,当待发送的路由数量大于该值时,需使用多个Response报文。 -
版本(Version ):在RIPv1中,该字段的值为1。
-
地址族标识符(Address Family Identifier, AFI ):该字段值为2时表示IP协议。如果该报文为Request报文并且是用于向直连路由器请求其整张路由表,则该字段值被设置为0。同时这个Request报文中包含且只包含一个路由条目,该路由的目的网络地址为0.0.0.0,度量值为16。
-
IP地址(IP Address ):路由的目的网络地址。
-
度量值(Metric ):到达目的网络的路由的开销值。
-
需要注意的是,RIPv1的Response报文中并不携带路由的目的网络掩码。
RIPv2的报文结构
RIPv2报文(如下图所示)中各个字段的含义如下:
-
命令(Command):与RIPv1类似,用于标识RIP报文的类型。
-
版本(Version ):在RIPv2中,该字段的值为2。
-
地址族标识符(Address Family Identifier ):与RIPv1类似,不再赘述。
-
路由标记(Route Tag):用于为路由设置标记信息,缺省为0。当一条外部路由被引入RIP从而形成一条RIP路由时,RIP可以为该路由设置路由标记,当这条路由在整个RIP域内传播时,路由标记不会丢失。
-
IP地址(IP Address ):路由的目的网络地址。
-
网络掩码(Netmask):路由的目的网络掩码。
(1)RIPv1路由器在通告路由时是不携带目的网络掩码的,这是因为在RIPv1的报文中并没有定义相应的字段,这使得RIPv1无法支持VLSM( Variable Length Subnet Mask,可变长子网掩码)。
(2)RIPv2在这一点上做了改进,定义了该字段用于存储路由条目的目的网络掩码,如此一来,RIPv2便能够支持VLSM。 -
下一跳(Next Hop ) :RIPv2定义了该字段,使得路由器在多路访问网络上可以避免次优路径现象。
(1)一般情况下,在路由器所发送的路由更新中,路由条目的“下一跳”字段会被设置为0.0.0.0,此时收到该路由的路由器将路由条目加载到路由表时,将路由的更新源视为到达目的网段的下一跳。
(2)在某些特殊的场景下,该字段值会被设置为非0.0.0.0。 -
度量值(Metric ):到达目的网络的路由的开销值。