路由协议和架构/路由信息协议
路由信息协议 (RIP) 是一种基于距离向量 (DV) 算法的域内路由协议。RIP 版本 1 定义于 1988 年,是互联网上使用的第一个路由协议。
RIP,取决于其实现,包括水平分割、路由中毒和路径保持机制,以限制不正确路由信息的传播。
RIP 适合小型、稳定和同质的网络
- 小型:指标仅基于跳数(每条链路成本为 1),但不能超过 16 跳限制 → 同一个 RIP 域内级联超过 15 台路由器是不允许的;
- 稳定:状态更改可能会触发长期持续的瞬态;
- 同质:
- 同质链路:不同链路上的成本无法根据带宽区分;
- 同质路由器:每台路由器都需要在生成新的 DV 之前完成处理 → 瞬态持续时间受最慢路由器的性能限制。
RIP 数据包具有以下格式
8 | 16 | 32 | |
命令 | 版本 (1) | 0 | |
地址族标识符 | 0 | ||
IP 地址 | |||
0 | |||
0 | |||
指标 |
其中最重要的字段是
- 命令 字段 (1 字节):它指定消息类型
- “响应”值:数据包正在传输包含一个或多个地址的 DV;
- “请求”值:新连接到网络的路由器通知其邻居其存在 → 邻居将发送回其 DV,而不必等待超时,从而提高收敛速度;
- 地址族标识符 字段 (2 字节):它指定正在使用的网络层协议(例如,值 2 = IP);
- IP 地址 字段 (4 字节):它指定要宣布的 IP 地址(没有子网掩码)。
在一个 RIP 数据包中最多可以宣布 25 个地址; - 指标 字段 (4 字节):它指定与宣布地址相关的成本。
- 封装
RIP 数据包被封装到 UDP 数据包中
- 目的UDP 端口是端口 520,当时它是作为一种安全机制选择的,因为低于 1024 的端口只能在管理权限下使用;
- 目的IP 地址是广播地址 (255.255.255.255) → 所有设备都可以接收它,包括主机,尽管最好在主机端禁用路由协议以保护它们免受恶意攻击并通过侦听可能的 ICMP 重定向消息了解更好的路由
RIP 很大程度上依赖于计时器
- 由于 CPU 可能很忙,因此难以精确地遵守固定计时器 → 不确定性会引入更多延迟;
- 网络中的所有路由器都必须使用相同的计时器,否则路由器可能会以不协调的方式交互。
它定义了多久发送一次包含有关 DV 信息的无条件响应消息。
- 路由器同步
它试图通过在发送触发更新时不重置路由更新计时器以及通过在 25 到 35 秒之间以可变延迟发送无条件响应消息来避免。
它定义了在刷新之前条目在路由表中可以保持有效的时长。当路由器失效计时器到期时,条目的跳数将设置为无穷大成本 (16),将目标标记为不可达。
- 故障检测
路由失效计时器尤其有用,可以在“链路关闭”信号不可用时检测到与邻居的连接丢失。
它定义了在刷新之前条目可以在路由表中保留的时长。当路由刷新计时器到期时,该条目将从路由表中删除。
- 路由中毒
当路由失效计时器到期且条目被标记为失效时,路由器可以在删除条目之前宣布无穷大成本的目标,这样还有 60 秒(默认值)的时间来通知其他路由器。
它定义了在怀疑无穷大计数开始后,条目不受更改的时间长度。保持计时器是思科的专有功能。
- 路径保持
当跳数增加到更高的值时,保持计时器开始,以避免触发无穷大计数并允许路由稳定下来。
- 路由中毒
路径保持算法阻塞的目标也可以以无穷大成本传播。
RIP 的第一个版本是在分层寻址仍然在使用的时候定义的,其中子网掩码可以从网络地址本身自动获得 → 在 DV 中宣布的网络地址缺少有关其子网掩码的信息 → RIP 版本 1 只能在网络中使用,其中每个地址都属于根据旧的分层寻址规则的地址类。
可以采用一种策略来使 RIP 版本 1 在具有可变长度子网掩码地址的网络中工作:给定一个已宣布的网络地址,路由器会扫描分配给其连接接口的网络地址
- 如果至少一个接口被分配了一个具有与宣布地址的子网掩码相同的子网掩码的地址,则路由器会从接口地址中获取子网掩码作为宣布地址的子网掩码;
- 如果没有接口被分配了一个具有与宣布地址的子网掩码相同的子网掩码的地址,则路由器会将其自己的子网掩码作为宣布地址的子网掩码。
- 问题
如果可能假设错误的子网掩码
- 路由器的任何接口都没有正在搜索的子网掩码;
- 宣布的地址确实有一个除所选接口的地址以外的子网掩码。
RIP 将跳数限制定义为 16,这意味着距离大于 15 的目标被视为不可达。
选择如此低的最大值是为了限制基于 DV 的算法中众所周知的“计数到无穷大”问题:当路由成本达到 16 时,路由被视为不可达,其成本无法再增加。
这 并不 意味着网络中不能有超过 15 个路由器级联:唯一的限制是,两个距离太远的路由器不能直接相互通信。这个问题可以通过将网络划分为两个路由域来解决,这两个路由域由两个不同的 RIP 协议实例处理,并通过启用它们之间的重新分配过程来“伪造”外部路由的成本。
缺少“年龄”字段
[edit | edit source]RIP 在 DV 中没有为路由关联“年龄”字段,这意味着宣布的信息可能是旧的,但接收路由器将其视为新的并将其计时器重置为零,这意味着距离状态变化越远,瞬态持续时间越长。
- 示例
在一个拓扑为 A—B—C 的网络中:[1]
- 时间 0 秒:A—B 链路上发生故障,节点 A 无法访问。
- 时间 179 秒:节点 B 向节点 C 宣布其 DV,最后一个包括目标 A 的 DV。
- 时间 180 秒:节点 B 将目标 A 标记为不可达。
- 时间 359 秒:节点 C 将目标 A 标记为不可达。
RIP 版本 2
[edit | edit source]RIP 版本 2 通过利用消息中一些未使用的字段来扩展 RIP 的第一个版本。
8 | 16 | 32 | |
命令 | 版本(2) | 路由域 | |
地址族标识符 | 路由标签 | ||
IP 地址 | |||
子网掩码 | |||
下一跳 | |||
指标 |
其中新字段是
- 路由域 字段(2 字节):它指定此 RIP 消息用于处理同一边界路由器上的多个路由域。
- 路由标签 字段(2 字节):它指定宣布的地址是否为外部路由,即它是通过从另一个路由域的重新分配过程学到的;
- 子网掩码 字段(4 字节):它包含与宣布的网络地址相关联的网络掩码,以支持无类别地址;
- 下一跳 字段(4 字节):当多个 RIP 路由器属于同一个 LAN 但属于两个不同的 RIP 域时,它可以优化路由,因此从一个域到另一个域的流量将始终穿越边界路由器,边界路由器可以宣布将流量发送到另一个域中的下一跳路由器。
身份验证
[edit | edit source]RIP 版本 2 引入了一种基于密码的身份验证机制:路由器必须经过身份验证才能向其邻居宣布其 DV。
如果 RIP 数据包中的第一个条目中“地址族标识符”字段的值等于 0xFFFF,则条目的其余部分包含身份验证信息。
16 | 32 |
0xFFFF | 身份验证类型 |
身份验证 | |
其中字段是
- 身份验证类型 字段(2 字节):任何类型“简单密码”都被定义(值 2);
- 身份验证 字段(16 字节):它包含明文密码。
这种身份验证机制非常弱,因为密码很容易被嗅探,因此很少使用。由于 RIP 消息中缺乏空间,无法实现更复杂的身份验证机制。
组播
[edit | edit source]RIP 版本 1 以广播方式发送 DV,这意味着所有实体(包括主机)都必须处理 RIP 消息。
RIP 版本 2 定义了一个目标组播 IP 地址 (224.0.0.9),这样 RIP 数据包只会被订阅了组播组的实体接收,因此,不使用 RIP 协议的主机和路由器可以在数据链路层丢弃该数据包。
优点
[edit | edit source]- 它适用于小型、稳定和同构网络;
- 它需要的处理资源很少;
- 它易于实现;
- 它易于配置(与 OSPF 不同,没有子域);
- 它在各种设备上都可用,即使是在廉价路由器上。
参考文献
[edit | edit source]- ↑ 假设:默认计时器值、没有触发更新、没有路由中毒。