RIP是最早的动态路由协议,虽然已经过时并且很少使用,但是可以通过学习RIP并且和ospf等现在正在使用的路由协议对比,了解其工作原理和过时原因,具有很强的学习性。
一、RIP协议简介
RIP(Routing Information Protocol,路由信息协议)是最早的动态路由协议,其原理简单,配置容易。RIP是一种基于距离矢量算法的路由信息协议,基于UDP端口520,属于应用层协议。
动态路由协议,能够自动发现路由、计算路由,主要用于局域网和小规模网际网络中的路由选择。
RIP基于距离矢量路由选择算法,也就是说它通过跳数(hop count)作为度量路由之间的距离,默认最大跳数为15跳,超过15跳的网络被认为是不可达的。
二、RIP工作原理
2.1 距离
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为“距离向量D-V(Distance-Vector)" 。
RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的代价(cost)。
- 路由器到直连网络的距离定义为1。
- 路由器到非直连网络的距离定义为所经过的路由器数加1。
- 允许一条路径最多只能包含15个路由器。“距离”等于16时相当于不可达。
2.2 路由表交换
RIP 协议规定,相邻路由器(通过同一网络连接的路由器)之间周期性交换各自的路由表。
- 路由表交换周期是 30 秒。
- 周期性不是严格的:发送前附加一段随机延迟(0 到 5 秒)。
- 原因:避免大量路由器同时发送路由表而造成网络拥塞。
2.3 报文发送
- RIP 使用 UDP 协议进行路由信息交换。
- RIP1 和 RIP2 使用 UDP 520 端口发送或接收 RIP 报文。
2.4 路由更新 - 接收到邻居的路由表后,路由器采用距离向量算法更新自己的路由表。
- 在下一个发送周期,路由器将更新后的路由表再发送给自己的邻居路由器。
- 若网络拓扑结构不变,经过有限次的路由表交换后,所有 RIP路由器都会获得到达自治系统中所有网络的最短路由。此时称路由协议收敛(convergence)
RIP的路由条目的更新规则:
- 发现了新的网络,添加
- 到达目的网络,不同下一跳,新路由优势,更新
- 到达目的网络,不同下一跳,等价负载均衡
- 到达目的网络,相同下一跳,最新消息,更新
- 到达目的网络,不同下一跳,新路由劣势,不更新
2.5 故障处理
实际环境中,网络或路由器可能出现故障。
从上一次接收到邻居路由器发送的路由表起,如果经过 180 秒还没有收到新的发送,就假定:
- 连接邻居路由器的网络发生故障,或邻居路由器发生故障。(跳数置为15)
路由器立即更新自己与故障相关的路由表项,并在随后的发送周期中将新的路由表发送给邻居路由器。
- 经过有限次的路由表交换后,RIP 协议将达到新的收敛状态。
2.6 处理流程
三、RIP报文格式
3.1 RIP 协议报文
RIP 协议报文由固定首部和路由项列表组成。
- 固定首部包括3个字段,占4个字节。
- “命令”字段指明发送该报文的目的,占1个字节。 命令字段为1时是请求报文,表明请求接收方发送其全部或部分路由表;
命令字段为2时是响应报文,表明报文携带有发送方的全部或部分路由表。响应报文可以是对请求报文的回应,也可以是发送方周期性的路由表发送。周期性发送也称为非请求响应。 - “版本”字段指明RIP协议的版本号,占1个字节,RIP1协议设置为1,RIP2协议设置为2。
- 第三个字段没有使用,占2个字节,必须置为0。
- 路由项列表包括最多 25 个路由项。每个路由项描述了一条路由。
3.2 RIP2 路由项
路由项有固定的格式,占20个字节,分为6个字段。
- “地址族标识符”字段指明了解释网络地址时应遵循的协议族,占2个字节。对IPv4协议,地址族标识符定义为2。
- “路由标记”字段占2字节,是分配给该路由项的一个属性值,主要用于区分内部RIP路由和外部RIP路由。内部RIP路由是来自自治系统内部RIP协议的路由;外部RIP路由是来自其他自治系统RIP协议的路由。例如可用自治系统编号作路由标记。路由器在向邻居通告一条路由时,必须保持该路由的标记不变。
- 字段“IP地址”和“子网掩码”共同标识了该路由项的目的地址。如果IP地址字段是全0地址(0.0.0.0),表示是默认路由。
- “下一跳”字段指明了报文接收方路由器到达目的地址的下一跳地址。如果是全0地址(0.0.0.0),表明报文接收方路由器到达目的地址的下一跳就是报文发送方路由器,其地址就是携带RIP报文IP分组的源地址。
- “距离”字段指明了从报文发送方路由器或下一跳字段地址到达目的地址路由的距离。
3.3 RIP 请求报文
RIP 路由器可通过向邻居发送 RIP 请求报文的方式显式地请求其全部或部分路由表。
全部路由表请求用于路由表建立:路由器启动时,可向邻居发送 RIP 请求报文,请求邻居将其整个路由表发送给自己。
- 请求报文中只有 1 个路由项,且地址族标识符是 0、距离是无穷(16)。
- 若路由数量超过一个 RIP 报文的携带能力,接收方可构造多个响应报文。
部分路由表请求主要用于路由监测:请求方可以是一台能够发送、接收及处理 RIP 报文的主机(不参与 RIP 路由交换)。
- 请求报文中的路由项列表列出了所请求的路由。
- 构造响应报文时,接收方在其路由表中逐项查找相应路由项,若存在,就在距离字段填入其距离值;否则,在距离字段填 16。
3.4 RIP 鉴别报文
RIP2 中路由器可对每个接收的报文进行鉴别(authentication)。
鉴别信息占用了第一个路由项的 20 字节:
- 地址族标识符: 0xFFFF
- 路由标记:命名为鉴别类型(authentication type),用于区分不同的鉴别机制。
RFC 2453 只定义了一种简单的密码鉴别:
- 鉴别类型:2
- 路由项中剩余的 16 字节包含了鉴别用的明文密码(若密码不足16字节,靠左对齐并补 0)。
3.5 报文发送
RIP1 中路由器用广播(broadcast)方式向邻居发送 RIP 报文。
RIP2 中路由器以组播(multicast)方式向邻居发送RIP报文。
- 减少了对不参与 RIP 路由交换主机的影响;
- 不需要组播管理协议(IGMP)的支持:只在相邻路由器间交换报文。
四、RIP环路问题
4.1产生环路的原因
RIP网络中某一段网络的故障,由于收敛速度过慢,部分路由器认为该网络仍然可达,导致路由不断更新导致距离计数至无穷大。
4.2 防环机制
- 最大跳数:当一个路由条目作为更新信息发送给邻居路由器时,路由条目会自加1跳,通过设定最大跳数15防止路由条目被无限转发。同时16跳可作为路由不可达标记。
- 触发更新:当网络出现拓扑变更后,路由器会立即产生更新通告,并广播通知所有直连邻居,不需要考虑30秒的更新计时器。为减少带宽和资源占用,触发更新消息只包含更新的路由条目。
- 水平分割:RIP路由器路由表中的某条条目信息由路由器的a口学习而来,则路由器a口向外发送响应消息时,不会包含该路由项的信息。
- 毒性反转:RIP路由器路由表中的某条不可达路由条目信息由路由器的a口学习而来,则路由器a口向外发送响应消息时,会包含该路由信息,但Metric会设置为16,不可达
注:毒性反转和水平分割都可避免路由环路的产生,但是两者原则上为互斥的,即RIP网络中RIP路 由器不会同时开启水平分割和毒性反转功能。通常,RIP网络中的路由器都会配置触发更新功能, 然后再水平分割和毒性反转功能中选择其一开启。