前言

  • 什么是 RIP 协议?
    RIP是Routing Information Protocol(路由信息协议)的简称,它是一种较为简单的内部网关协议(Interior Gateway Protocol)。RIP是一种基于距离矢量(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量来衡量到达目的网络的距离。RIP通过UDP报文进行路由信息的交换,使用的端口号为520。
    RIP包括RIP-1和RIP-2两个版本,RIP-2对RIP-1进行了扩充,使其更具有优势。
  • 什么情况下会使用 RIP 协议?
    由于RIP的实现较为简单,在配置和维护管理方面也远比OSPF和IS-IS容易,因此RIP主要应用于规模较小的网络中,例如校园网以及结构较简单的地区性网络。对于更为复杂的环境和大型网络,一般不使用RIP协议。

    RIP 基本原理

    RIP启动时初始路由表仅包含本设备的一些直连接口路由。相邻设备通过互相学习路由表项后,才能实现各网段路由互通。

image.png
RIP 路由形成的过程:

  1. RIP 协议启动之后,SwitchA会向相邻的交换机广播一个Request报文

image.png

  1. SwitchB从接口接收到SwitchA发送的Request报文后,把自己的RIP路由表封装在Response报文内,然后向该接口对应的网络广播。(有一种情况, RIP response 会回应单播,是在一台设备刚刚启动 RIP 进程时主动发送 request,另一台设备就会回复一个单播的 RIP response 信息)

image.png
image.png

  1. SwitchA根据SwitchB发送的Response报文,生成一条 RIP 路由,形成自己的路由表。

image.png
另一个栗子:
RIP按照路由通告进行路由更新和路由选择。这种情况下交换机并不了解整个网络的拓扑,只知道到达目的网络的距离,以及到达目的网络应该走哪个方向或者哪个接口。如图所示,SwitchB收到了来自SwitchA的路由通告,此时SwitchB知道经过SwitchA可以到达192.168.1.0/24网络,度量值是1跳,除此之外SwitchB不知道其他的信息。即使这个通告因为某种原因已经是错误的信息,SwitchB依然认为经过SwitchA可以到达192.168.1.0/24网络,度量值是1。这是导致RIP网络容易产生路由环路的最根本原因。
image.png

RIP 度量

在RIP网络中,缺省情况下,设备到与它直接相连网络的跳数为0,经过一个设备可达的网络的跳数为1,其余依此类推。也就是说,度量值等于从本网络到达目的网络间的设备数量。

如图所示,S1去往192.168.10.0/24网段的路径有两条:

  • S1-S2-S5,中间经过S2、S5两台设备,该路径的度量值为2跳,带宽为1.544Mbit/s
  • S1-S3-S4-S5,中间经过S3、S4、S5三台设备,该路径的度量值为3跳,但是带宽很大,为千兆链路

image.png
按照RIP的度量标准,转发报文时会优选经过S2的这条路径,但这条路径的链路带宽并不是最优的。这就导致RIP网络带宽利用率低下,不利于进行QoS管理。
此外,为了防止RIP路由在网络中被无限泛洪使得跳数累加到无穷大,同时也为了限制收敛时间,RIP规定度量值取0~15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。最大跳数的设定虽然解决了度量值计数到无穷大的问题,但也限制了RIP所能支持的网络规模,使得RIP不适合在大型网络中应用。

RIP的更新与维护

RIP协议在更新和维护路由信息时主要使用三个定时器:

  • 更新定时器(Update timer):当此定时器超时时,立即发送更新报文。
  • 老化定时器(Age timer):RIP设备如果在老化时间内没有收到邻居发来的路由更新报文,则认为该路由不可达。
  • 垃圾收集定时器(Garbage-collect timer):如果在垃圾收集定时器倒计时结束前,不可达路由没有收到来自同一邻居的更新报文,则该路由将从RIP路由表中彻底被删除。

RIP路由与定时器之间的关系:

  • RIP的更新信息发布是由更新定时器控制的,默认为每30秒发送一次。
  • 每一条路由表项对应两个定时器:老化定时器垃圾收集定时器。当学到一条路由并添加到RIP路由表中时,老化定时器启动,老化时间一般为180秒。如果老化定时器超时,设备仍没有收到邻居发来的更新报文,则把该路由的度量值置为16(表示路由不可达),并启动垃圾收集定时器,垃圾收集定时器一般为120秒。如果垃圾收集定时器超时,设备仍然没有收到更新报文,则在RIP路由表中删除该路由。

    触发更新

    触发更新是指当路由信息发生变化时,立即向邻居设备发送触发更新报文,而不用等待更新定时器超时,从而避免产生路由环路。
    image.png

    网络10.4.0.0不可达时,SwitchC最先得到这一信息。

  • 如果设备不具有触发更新功能,SwitchC发现网络故障之后,需要等待更新定时器超时。在等待过程中,如果SwitchB的更新报文传到了SwitchC,SwitchC就会学到SwitchB的去往网络10.4.0.0的错误路由。这样SwitchB和SwitchC上去往网络10.4.0.0的路由都指向对方从而形成路由环路。

  • 如果设备具有触发更新功能,SwitchC发现网络故障之后,不必等待更新定时器超时,立即发送路由更新信息给交换机B,这样就避免了路由环路的产生。

    RIP-2的增强特性

    RIP包括RIP-1和RIP-2两个版本,RIP-2对RIP-1进行了扩充。

RIP-1与RIP-2的比较

RIP-1(即RIP version1)是有类别路由协议(Classful Routing Protocol),它只支持以广播方式发布协议报文,报文格式如图所示。RIP-1的协议报文中没有携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,比如 100.0.0.0/8,200.1.1.0/24,因此RIP-1无法支持路由聚合,也不支持不连续子网(Discontiguous Subnet)。
RIP-2(即RIP version2)是一种无分类路由协议(Classless Routing Protocol),报文格式如图所示。
image.png
image.png
image.png
与RIP-1相比,RIP-2具有以下优势:

  • 支持外部路由标记(Route Tag),可以在路由策略中根据Tag对路由进行灵活的控制。
  • 报文中携带掩码信息,支持路由聚合和CIDR(Classless Inter-Domain Routing)。
  • 支持指定下一跳,在广播网上可以选择到目的网段最优下一跳地址。
  • 支持以组播方式发送更新报文,只有支持RIP-2的设备才能接收协议报文,减少资源消耗。
  • 支持对协议报文进行验证,增强安全性。

    RIP-2路由聚合

    路由聚合的原理是,同一个自然网段内的不同子网的路由在向外(其它网段)发送时聚合成一个网段的路由发送。在RIP-2中进行路由聚合可提高大型网络的可扩展性和效率,缩减路由表。
    路由聚合有两种方式:

  • 基于RIP进程的有类聚合:
    聚合后的路由使用自然掩码的路由形式发布。比如,对于10.1.1.0/24(metric=2)和10.1.2.0/24(metric=3)这两条路由,会聚合成自然网段路由10.0.0.0/8(metric=2)。RIP–2聚合是按类聚合的,聚合得到最优的metric值。

  • 基于接口的聚合:
    用户可以指定聚合地址。比如,对于10.1.1.0/24(metric=2)和10.1.2.0/24(metric=3)这两条路由,可以在指定接口上配置聚合路由10.1.0.0/16(metric=2)来代替原始路由。

    水平分割和毒性反转

    水平分割

    水平分割(Split Horizon)的原理是,RIP从某个接口学到的路由,不会从该接口再发回给邻居路由器。这样不但减少了带宽消耗,还可以防止路由环路。
    水平分割在不同网络中实现有所区别,分为按照接口和按照邻居进行水平分割。广播网、P2P和P2MP网络中是按照接口进行水平分割的,如图所示。
    image.png
    RouterA会向RouterB发送到网络10.0.0.0/8的路由信息,如果没有配置水平分割,RouterB会将从RouterA学习到的这条路由再发送回给RouterA。这样,RouterA可以学习到两条到达10.0.0.0/8网络的路由:跳数为0的直连路由;下一跳指向RouterB,且跳数为2的路由。
    但是在RouterA的RIP路由表中只有直连路由才是活跃的。当RouterA到网络10.0.0.0的路由变成不可达,并且RouterB还没有收到路由不可达的信息时,RouterB会继续向RouterA发送10.0.0.0/8可达的路由信息。即,RouterA会接收到错误的路由信息,认为可以通过RouterB到达10.0.0.0/8网络;而RouterB仍旧认为可以通过RouterA到达10.0.0.0/8网络,从而形成路由环路。配置水平分割后,RouterB将不会再把到网络10.0.0.0/8的路由发回给RouterA,由此避免了路由环路的产生。
    对于NBMA(Non-Broadcast Multiple Access)网络,由于一个接口上连接多个邻居,所以是按照邻居进行水平分割的。路由就会按照单播方式发送,同一接口上收到的路由可以按邻居进行区分。从某一接口的对端邻居处学习到路由,不会再通过该接口发送回去。
    按照邻居进行水平分割原理图
    图2所示,在NBMA网络配置了水平分割之后,RouterA会将从RouterB学习到的172.16.0.0/16路由发送给RouterC,但是不会再发送回给RouterB。
    image.png
    举个栗子:如图中的 RIP 报文,对应接口开启了水平分割,发送的报文中,没有带有学到的接口的路由字段。
    image.png

    毒性反转

    毒性反转(Poison Reverse)的原理是,RIP从某个接口学到路由后,从原接口发回邻居路由器,并将该路由的开销设置为16(即指明该路由不可达)。利用这种方式,可以清除对方路由表中的无用路由。
    image.png
    如图所示,配置毒性反转后,RouterB在接收到从RouterA发来的路由后,向RouterA发送一个这条路由不可达的消息(将该路由的开销设置为16),这样RouterA就不会再从RouterB学到这条可达路由,因此就可以避免路由环路的产生。
    image.png

    RIP与BFD联动

    网络上的链路故障会导致路由器重新计算路由,因此缩短路由协议的收敛时间对于提高网络性能是非常重要的。加快故障感知速度并快速通告给路由协议是一种可行的方案。
    双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测邻居路由器之间链路故障的检测机制,它通常与路由协议联动,通过快速感知链路故障并通告使得路由协议能够快速地重新收敛,从而减少由于拓扑变化导致的流量丢失。在RIP与BFD联动中,BFD可以快速检测到链路故障并通知RIP协议,从而加快RIP协议对于网络拓扑变化的响应。
    RIP协议在使用BFD前后的链路故障检测机制及收敛速度如表所示:
是否配置BFD检测 链路故障检测机制 收敛速度
RIP老化定时器超时(默认配置180s) 秒级(>180s)
BFD会话状态为Down 秒级(<30s)

原理

路由与BFD联动包括静态BFD和动态BFD两种模式:

  • 静态BFD
    静态BFD是指通过命令行手工配置BFD会话参数,包括了配置本地标识符和远端标识符等,手工下发BFD会话建立请求。静态BFD可以不受对端设备的限制,在对端设备不支持BFD功能的情况下,本端通过静态BFD实现单臂BFD检测功能。
  • 动态BFD
    动态BFD是指由路由协议动态触发BFD会话建立。动态BFD比静态BFD则更具有灵活性,动态BFD中,本地标识符是动态分配的,远端标识符从对端的BFD报文中获取。路由协议在建立了新的邻居关系时,将对应的参数及检测参数(包括目的地址、源地址等)通告给BFD,BFD根据收到的参数建立起会话。当发生链路故障时,联动了BFD的路由协议可以快速感知到BFD会话状态变为Down,从而实现将流量快速切换到备份路径,避免了数据大量丢失。

    应用

    RIP和BFD相关联后,一旦链路发生故障,BFD在毫秒级时间内感知该故障并通知RIP协议,然后路由器在路由表中删除掉故障链路的路由并快速启用备份路径,提高了路由协议的收敛速度。
    image.png
    RIP与BFD联动的原理:

  • 如图所示,RouterA、RouterB、RouterC及RouterD建立RIP邻接。经过路由计算,RouterA到达RouterD的路由下一跳为RouterB。在RouterA和RouterB之间建立动态BFD会话,同时使能RIP与动态BFD联动检测机制。

  • 当RouterA和RouterB之间的链路出现故障时,BFD快速感知并通知给RouterA,RouterA删除掉下一跳为RouterB的路由。然后RouterA重新进行路由计算并选取新的路径,新的路由经过RouterC、RouterB到达RouterD。
  • 当RouterA与RouterB之间的链路恢复之后,二者之间的会话重新建立,RouterA收到RouterB的路由信息,重新选择最优路径进行报文转发。

注意事项

在RIP网络中,应确保全网定时器的配置一致,如果定时器的值配置不当,会引起路由振荡。它们的配置值关系是:update<_age_,_update_<_garbage-collect
_

IP 地址类型

最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。1. A类IP地址
一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。
2. B类IP地址
一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
3. C类IP地址
一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
4. D类地址用于多点广播(Multicast)。
D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
5. E类IP地址
以“llll0”开始,为将来使用保留。
全零(“0.0.0.0”)地址对应于当前主机。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:
A类地址:10.0.0.0~10.255.255.255
B类地址:172.16.0.0~172.31.255.255
C类地址:192.168.0.0~192.168.255.255
_

参考文章

RIP基本原理