RIP,最早的动态路由协议,距离矢量算法,路由信息协议,RoutingInformationProtocol,是种基于距离矢量(Distance-Vector)算法的协议,使用跳数作为度量来衡量到达目的网络的距离。
RIP 协议特点:
1)配置简单
2)易于维护
3) RIP 主要应用于规模较小的网络中(受到跳数限制,最大 15 跳)。
原理简述
1)RTA,运行 RIP 后,会首先发送路由更新请求。
2)RTB,会发送自己的 RIP 路由进行响应;
3)RTA,收到响应之后,路由器会保存路由条目(最优写入路由表,次优写入数据库),路由表条目的老化为 180s 时间;
在网络稳定后,RT 会周期性(30s)发送路由更新信息,以为了防止路由条目老化(180s)。
RIP Metric
使用跳数作为度量,来衡量到达目的网络的距离。当收到“到达目的网络跳数不同的”路由信息时,将选择最小跳数的路由,并缓存另一条路由。
默认情况,直连网络的条数为零。当路由器发送路由更新时,会把度量值 +1,并且超过 15 跳则被视为网络不可达(并且不使用该路由)。
RIP Timer(计时器)
在更新和维护路由信息时,RIP 协议主要使用四个定时器:
1)更新定时器(Update Timer,30s):当此定时器超时时,立即发送更新报文;
2)老化定时器(Age Timer,180s):如果在老化时间内,RIP 设备没有收到邻居发来的路由更新报文,则认为该路由不可达;并进入垃圾回收状态;
3)垃圾收集定时器(Garbage-collect Timer,120s):如果在该时间内不可达路由未收到来自同一邻居的更新,则该路由将被从路由表中彻底删除;
4)抑制定时器(Suppress timer,0s):当 RIP 设备收到对端的路由更新,其 Cost=16 则对应路由进入抑制状态,并启动抑制定时器。为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由 Cost<16 的更新,也不接受。当抑制定时器超时后,就重新允许接受对端发送的路由更新报文; (华为抑制计时器为 0s 时间,不再使用。思科设备有时间的。通常 Suppress Timer 为 180s 时间,但是垃圾计数器 120s 结束时,条目被清理,应该接收新路由条目,但是受抑制定时器影响,却不再接收新条目,这有些不合理。)
协议版本:RIPv1 & RIPv2
RIPv1(缺点):
1)有类别路由协议,不支持 VLSM 与 CIDR(准确说,能配置,但是没有效果;该协议在传送时,不携带掩码信息,而是以有类的方式发送)
2)以广播方式发送报文,即目的地址为 255.255.255.255 地址,效率较低;
3)不支持认证,任何接入的路由都能进行交换路由更新,存在安全风险;
RIPv2(优点):
1)无类别路由协议,支持 VLSM,支持路由聚合与 CIDR;
2)支持以广播或组播(使用 224.0.0.9 地址)方式发送报文;
3)支持明文认证和 MD5 密文认证;
路由汇总
RIP 支持两种路由汇总:
1)自动汇总:当非连续子网时,会出现自动汇总
2)手动汇总:针对接口,关闭 summary 功能,然后通过命令手动指定汇总信息。
报文格式
RIPv1:Eth | IP | UDP | RIP
Command:Request / Response
Version:v1
Address Family Identifier:IPv4
IP Address:网络地址
Metric:跳数
RIPv2:Eth | IP | UDP | RIP
使用组播,地址 224.0.0.9
Command:Request / Response
Version:v2
Address Family Identifier:IPv4
Route Tag:针对不同的 Tag 值,来执行路由策略(比如 过滤,汇总 等等)
IP Address:网络地址
Subnet Mask:路由子网掩码(添加该字段,以使 RIPv2 支持 VLSM 编址)
Next Hop:下一跳。在某些特殊场景下,以解决次优路径。
Metric:跳数;
下面是 RIPv2 认证报文,当两个节点认证之后,才会相应路由信息:
路由环路
距离矢量协议,通常都存在路由环路的风险。
当网络故障时:
1)RTA,在 30s 内无法收到路由信息,此时 RTA 去往 10.0.0.0/8 的路由条路还未老化(180s),
2)RTA,则有机会将自己的路由信息通告给 RTB,告诉 RTB 去往 10.0.0.0/8 能够通过 RTA ,为两条(RTA 发送时会 +1 跳)
3)RTB,收到路由通告之后,更新路由表
4)此时,将形成环路:去往 10.0.0.0/8 的数据包将在 RTA 与 RTB 之间形成环路;
这里关键的问题在于:
1)RTB 没有及时通告路由故障,因此 RTA 依旧使用故障路由;⇒ 使用 触发更新 解决;
2)并且 RTA 从收到路由的接口,又发送回去(它不应该通告 RTB 去往 10.0.0.0/8 的路由);⇒ 通过 水平分割/毒性反转 解决;
避免环路:水平分割
RT 从某个接口学习到的路由,不会再从 该接口 发回给邻居路由。
注意,在 Hub-Spoke 中,需要关闭水平分隔。
避免环路:毒性反转
RT 从某个接口学习到的路由,还会再从该接口返回回去,但是跳数设置为最大(16)。此时,邻居路由器不会再使用该路由条目,会将其视为不可达。
注意,毒性反转与水平分隔是不能同时存在的;其优先级高于水平分隔;
避免环路:触发更新
当 RT 出现问题时,会立即发送通告(而不等待 30s 时间);并且将 Metric(跳数)设置为最大(16)。这样邻居路由会认为路由不可达,而不会再使用该路由条目。
这也属于路由毒化;当然 触发更新 也包含正常的路由更新;
配置使用
参考文献
Routing Information Protocol – Wikipedia