1、RIP报文格式

    RIP协议工作在应用层,它基于传输层的UDP协议实现,而UDP又基于网络层的IP协议实现,所以RIP帧格式如下:

RIP报文帧格式
帧头 Data(IP报文) FCS

IP头 Data(UDP报文)


UDP头 Data(RIP报文)

RIP报文:

Command Version Zero AFI Zero IP Address Zero Zero Metric
8位 8位 16位 16位 16位 32位 32位 32位 32位

Command:报文类型,值为1表示请求报文,值为2表示响应报文。

Version:版本,RIP目前发行了两个版本,值为1表示RIPv1,值为2表示RIPv2,这里默认讲的是RIPv1。

Zero:全0字段,该字段全被0填充,主要用于兼容以往或未来可能产生的路由协议,这里不作使用。

AFI:地址标识,指出其网络地址的地址种类,用于兼容其他类型的网络地址,我们使用的IP地址取值为2。

IP Address:IP地址,在不同类型的报文中根据需要放置IP地址。

Metric:路由度量值,这个值在经过路由器时被递增,值的有效范围在1到15之间,路由器会将度量值为16的RIP报文丢弃,用以防止RIP报文在网络中无限制传播。


2、RIP运行原理

    RIP是D-V算法在局域网中的实现,主要通过下面六个方法来交换路由信息并维护路由表。

相邻交换:路由器启动RIP后,会向相邻的路由器发送请求报文,相邻的RIP路由器收到请求报文后响应该请求,回送包含本地路由表信息的响应报文,路由器收到响应报文后,更新本地路由表。

触发更新:路由器更新本地路由表后会向相邻路由器发送触发更新报文,通告路由更新信息。收到该报文的路由器会根据该报文的内容更新本地路由表并继续向相邻路由器发送触发更新报文。一连串的触发更新后,各路由器都能得到当前网络完整的路由信息。

路由计算:路由器会根据收到的路由信息计算出到达每个目的路由的最佳路径并生成路由表。

周期发送:路由器每隔30秒会周期性的向相邻路由器发送包含本地路由表的RIP报文,收到该报文的路由器会维护自己的路由表,若有更新则触发更新通告相邻设备。

路由老化:默认路由表中每个条目的有效时间是180秒,即180秒内相邻路由器周期性发送的RIP报文中没有该路由条目的信息则认为该路由不可达。若120秒后同一邻居路由器发来的RIP报文中还没有该路由条目的信息则该路由条目将从路由表中彻底删除。

Metric递增:为防止RIP报文在网络中无限制传播,路由条目每经过一个路由器该条目的Metric值就递增1,当该条目的Metric值大于15时,路由器就将该条目丢弃。这里“经过”的概念是路由器A的某条目Metric值为1,A将该条目递交给B的时候会将Metric值加1,所以B收到的该条目Metric值就为2了,C收到B递交的该条目时其Metric就为3了。


3、RIP运行实例

wKiom1fiH2XizZaJAAC8mC6M2HA658.jpg-wh_50

初始路由表:

    如上图所示的一个简单网络中,分别存在网络A(192.168.0.0)、B(192.168.1.0)、C(192.168.3.0)、D(192.168.3.0),由3个路由器连接在一起,路由器上方的IP地址为各路由器连接各网络的端口IP。RIP启动时各路由器只包含直连网络的路由信息,所以各路由器的路由表如下所示,其中网络目标指路由目的地,下一跳指要到达目标网络需经过的路由端口IP,Metric指网络开销。

AR1路由表
网络目标 下一跳 Metric 备注
192.168.0.0
none 0 AR1与192.168.0.0直连,所以无需经过下一个路由,开销为0
192.168.1.0
none
0 AR1与192.168.1.0直连,所以无需经过下一个路由,开销为0
AR2路由表
网络目标 下一跳 Metric 备注
192.168.1.0 none 0 AR2与192.168.1.0直连,所以无需经过下一个路由,开销为0
192.168.2.0 none 0 AR2与192.168.2.0直连,所以无需经过下一个路由,开销为0
AR3路由表
网络目标 下一跳 Metric 备注
192.168.2.0 none 0 AR3与192.168.2.0直连,所以无需经过下一个路由,开销为0
192.168.3.0 none 0 AR3与192.168.3.0直连,所以无需经过下一个路由,开销为0

相邻交换:

    路由器启动RIP后,会向相邻的路由器发送请求报文,相邻路由器响应该请求并将本地的路由表信息发送给请求的路由器。故AR1会收到AR2的响应报文,AR2会收到AR1和AR3的响应报文,AR3会收到AR2的响应报文。路由表应有相应变化,其中标红部分是路由器收到的路由条目但与本地条目重复,需要清除的,不会实际存入路由表中,标蓝部分是新增路由条目。

AR1路由表
网络目标 下一跳 Metric 备注
192.168.0.0 none 0
192.168.1.0 none 0
192.168.1.0 192.168.1.2 1 此条目由AR2的192.168.1.2端口发出,故下一跳应是该端口IP,此条目由AR2发出所以Metric值加一,此条目与本地重复而Metric值更大,故会被淘汰
192.168.2.0 192.168.1.2 1 此条目由AR2的192.168.1.2端口发出,故下一跳应是该端口IP,此条目由AR2发出所以Metric值加一,此条目在本地没有故保留
AR2路由表
网络目标 下一跳 Metric 备注
192.168.1.0 none 0
192.168.2.0 none 0
192.168.0.0 192.168.0.1
1 此条目由AR1的192.168.0.1端口发出,故下一跳应是该端口IP,此条目由AR1发出所以Metric值加一,此条目在本地没有故保留
192.168.1.0
192.168.0.1 1 此条目由AR1的192.168.0.1端口发出,故下一跳应是该端口IP,此条目由AR1发出所以Metric值加一,此条目与本地重复而Metric值更大,故会被淘汰
192.168.2.0 192.168.2.2 1 此条目由AR3的192.168.2.2端口发出,故下一跳应是该端口IP,此条目由AR3发出所以Metric值加一,此条目与本地重复而Metric值更大,故会被淘汰
192.168.3.0 192.168.2.2 1 此条目由AR3的192.168.2.2端口发出,故下一跳应是该端口IP,此条目由AR3发出所以Metric值加一,此条目在本地没有故保留
AR3路由表
网络目标 下一跳 Metric 备注
192.168.2.0 none 0
192.168.3.0 none 0
192.168.1.0 192.168.2.1
1 此条目由AR2的192.168.2.1端口发出,故下一跳应是该端口IP,此条目由AR2发出所以Metric值加一,此条目在本地没有故保留
192.168.2.0 192.168.2.1 1 此条目由AR2的192.168.2.1端口发出,故下一跳应是该端口IP,此条目由AR2发出所以Metric值加一,此条目与本地重复而Metric值更大,故会被淘汰

触发更新:

    路由器更新路由表后会向相邻的设备发送触发更新报文,报文中包含更新的路由条目,所以各路由表应做如下更新。

AR1路由表
网络目标 下一跳 Metric 备注
192.168.0.0 none 0
192.168.1.0 none 0
192.168.2.0 192.168.1.2 1
192.168.0.0 192.168.1.2
2 此条目由AR2的192.168.1.2端口发出,故下一跳应是该端口IP,此条目由AR2发出所以Metric值加一,此条目与本地重复而Metric值更大,故会被淘汰
192.168.3.0 192.168.1.2 2 此条目由AR2的192.168.1.2端口发出,故下一跳应是该端口IP,此条目由AR2发出所以Metric值加一,此条目在本地没有故保留
AR2路由表
网络目标 下一跳 Metric 备注
192.168.1.0 none 0
192.168.2.0 none 0
192.168.0.0 192.168.0.1
1
192.168.3.0 192.168.2.2 1
192.168.2.0 192.168.1.1 2 此条目由AR1的192.168.1.1端口发出,故下一跳应是该端口IP,此条目由AR1发出所以Metric值加一,此条目在本地重复而Metric值更大,故会被淘汰
192.168.1.0 192.168.2.2
2 此条目由AR3的192.168.2.2端口发出,故下一跳应是该端口IP,此条目由AR3发出所以Metric值加一,此条目在本地重复而Metric值更大,故会被淘汰
AR3路由表
网络目标 下一跳 Metric 备注
192.168.2.0 none 0
192.168.3.0 none 0
192.168.1.0 192.168.2.1
1
192.168.0.0 192.168.2.1
2 此提条目由AR2的192.168.2.1端口发出,故下一跳应是该端口IP,此条目由AR2发出所以Metric值加一,此条目在本地没有故保留
192.168.3.0 192.168.2.1 2 此提条目由AR2的192.168.2.1端口发出,故下一跳应是该端口IP,此条目由AR2发出所以Metric值加一,此条目在本地重复而Metric值更大,故会被淘汰

最终路由表如下:

    通过前面的相邻交换和触发更新,所有路由器都具备了到达网络中任一处的路由条目,事实上前面的触发更新产生了新的路由条目,应该会有新的触发更新,由于该触发更新没有导致路由表有新的变化,所以就不再赘述。此外,路由表稳定后,各交换机每隔30秒会向相邻交换机发送一次最新的路由条目,若有变化可能会有新的触发更新,通过此方法及时更新各路由表。


网络目标 下一跳 Metric 备注
AR1路由表

192.168.0.0 none 0 网络A 直连

192.168.1.0 none 0 网络B 直连

192.168.2.0 192.168.1.2 1 网络C 来自AR2

192.168.3.0 192.168.1.2 2 网络D 来自AR3
AR2路由表

192.168.1.0 none 0 网络B 直连

192.168.2.0 none 0 网络C 直连

192.168.0.0 192.168.0.1
1 网络A 来自AR1

192.168.3.0 192.168.2.2 1 网络D 来自AR3
AR3路由表

192.168.2.0 none 0 网络C 直连

192.168.3.0 none 0 网络D 直连

192.168.1.0 192.168.2.1
1 网络B 来自AR2

192.168.0.0 192.168.2.1
2 网络A 来自AR1


4、RIP环路

    通过前面的描述,我们可知运行RIP协议的路由器对收到的路由条目信息仅做重复性筛查而不做来源筛查,这就导致运行RIP协议的网络非常容易产生环路。

wKioL1fjbRXQHDt7AAC_gBBJhFY935.jpg-wh_50

    考虑上一节所分析的网络,若网络D与路由器AR3断开连接,此时仅AR3知道该链路已断并将相关路由条目删除,但AR2中仍然保留有该条目信息。路由表如下所示。(触发更新实际上也是防止环路的一种措施,默认都会启用该功能,所以前面的分析中包含了触发更新功能,而这里假设该功能没有启用)



网络目标 下一跳 Metric 备注
AR2路由表




192.168.1.0 none 0 网络B 直连

192.168.2.0 none 0 网络C 直连

192.168.0.0 192.168.0.1
1 网络A 来自AR1

192.168.3.0 192.168.2.2 1 网络D 来自AR3
AR3路由表




192.168.2.0 none 0 网络C 直连

192.168.1.0 192.168.2.1
1 网络B 来自AR2

192.168.0.0 192.168.2.1
2 网络A 来自AR1


    根据协议,AR3在30秒后会向AR2发送周期性的RIP报文,告知最新的路由信息,而在此之前可能AR2已提前向AR3发送了周期性RIP报文,该报文中包含了通向网络D的路由。


网络目标 下一跳 Metric 备注
AR2路由表




192.168.1.0 none 0 网络B 直连

192.168.2.0 none 0 网络C 直连

192.168.0.0 192.168.0.1
1 网络A 来自AR1

192.168.3.0 192.168.2.2 1 网络D 来自AR3
AR3路由表




192.168.2.0 none 0 网络C 直连

192.168.1.0 192.168.2.1
1 网络B 来自AR2

192.168.0.0 192.168.2.1
2 网络A 来自AR1

192.168.3.0 192.168.2.1 2 网络D 此提条目由AR2的192.168.2.1端口发出,故下一跳应是该端口IP,此条目由AR2发出所以Metric值加一,此条目在本地没有故保留

    若此时有发往网络D的数据,就会导致该数据在AR2和AR3之间来回传递,形成环路。为防止出现上述情况,RIP协议使用以下三种方法来解决环路。(实际上将Metric值限制为15以内也是防止环路的一种,这里不做赘述)

水平分割:路由器从某接口学习到的路由,不会再从该接口发出去。

毒性反转:路由器从某接口学习到的路由,从该接口发出去时将该路由条目的Metric值设为16。

触发更新:本地路由信息发生变化时,路由器立即发送触发更新报文给邻居路由器。



【互连的两个路由如何知道对方的信息】没查到


【RIP的优缺点】RIP优点在于配置简单、易于维护、适合小型网络

    缺点是RIP报文最大传播距离是15跳,限制了网络规模;RIP协议更新的是整张路由表,当网络增大时,开销也增大;路由器无条件接收到路由信息,无需自身计算。路由来源不太可靠,若收到的路由本身是错的,也无法自行修正。


【RIPv2】RIPv2对RIPv1进行了扩充,RIPv1是有类别路由协议,它只支持以广播方式发布协议报文。RIPv1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段路由,因此RIPv1不支持不连续子网。RIPv2是一种无类别路由协议,与v1相比它有以下优势:

支持路由标记,在路由策略中可根据路由标记对路由进行灵活的控制。

报文中携带掩码信息,支持路由聚合和CIDR(Classless Inter-Domain Routing,无类域间路由)。

支持指定下一跳,在广播网上可以选择到最优下一跳地址。

支持组播路由发送更新报文,只有RIP-2路由器才能收到更新报文,减少资源消耗。

支持对协议报文进行验证,并提供明文验证和MD5验证两种方式,增强安全性。

RIP-2有两种报文传送方式:广播方式和组播方式,缺省将采用组播方式发送报文,使用的组播地址为224.0.0.9。当接口运行RIP-2广播方式时,也可接收RIP-1的报文。


【路由表条目很多怎么办】从RIP报文中可知一个报文仅可存放一个IP地址,但路由器的路由条目一般会超过一条,所以路由条目在网络中是一个报文一个条目。


【D-V算法】矢量距离算法的思想是网关周期性地向外广播路径刷新报文,主要内容是由若干(V,D)序偶组成的序偶表。其中V代表向量,标识网关可到达的网关或主机,D代表距离,指出该网关去往网关或主机的距离。距离D按驿站的个数计,其他网关收到某网关的(V,D)报文后,据此按照最短路径原则对各自的路由表进行刷新。