【动态路由】
在全局配置模式下,使用 router
命令,即可确定 IOS 支持哪些协议,目前最常用的是 RIP 协议
对于动态路由协议来说,均具有以下三个要素:
- 数据结构:路由协议通常使用路由表或数据库来完成路由过程。此类信息保存在内存中
- 路由协议消息:路由协议使用各种消息找出邻近的路由器,交换路由信息,并通过其他一些任务来获取和维护准确的网络信息
- 算法:路由协议使用算法促进路由信息以确定最佳路径
动态路由协议的用途包括:
- 发现远程网络
- 维护最新路由信息
- 选择通往目标网络的最佳路径
- 当前路径无法使用时找出新的最佳路径
【RIP 协议】
概述
路由信息协议(RIP,Routing Information Protocols)是应用较早、使用较普遍的内部网关协议,适用于小型同类网络,是典型的距离矢量协议,因此 RIP 协议又被称为距离矢量路由选择协议,其是基于 UDP 协议,使用 520 端口的应用层协议。
RIP 协议只需要了解自身接口的网络地址,以及能够通过其邻居到达的远程网络地址,不需要了解网络拓扑结构。
RIP 协议版本
RIP 协议有两个版本,RIPv1 与 RIPv2,目前最常用的是 RIPv2。
他们的对比如下:
RIPv1 | RIPv2 |
---|---|
有类路由协议,不支持 VLSM | 无类路由协议,支持 VLSM |
以广播的形式发送更新报文 | 以组播的形式发送更新报文 |
不支持认证 | 支持明文和 MD5 的认证 |
工作流程
- RIP 启动时,初始 RIP Database 仅包含本路由器声明的路由
- RIP 协议启动后,会向各个接口广播或组播一个 REQUEST 报文
- 邻居路由器的 RIP 协议从某接口收 REQUEST 报文,根据自己的 RIP Database,形成 Update 报文向该接口对应的网络广播
- RIP 接收邻居路由器回复的包含邻居路由器 RIP Database 的 Update 报文,形成自己的 RIP Database
- RIP 的度量值以跳数为计算标准,最大有效跳数为 15跳,当超过 15 跳时,统一设为 16,代表无穷大,即两终端间不可达
信息更新
RIP 协议依托于时间周期的更新,依赖三种定时器维护其数据库:
- 更新定时器:每 30 秒将更新发送至其所有邻居
- 路由失效定时器:每 180 秒判断一次路由器是否失效,即判断 180 秒内对应的路由是否发送数据到该路由
- 清除路由条目定时器:每 240 秒清空一次路由条目
需要注意的是,即使拓扑结构不发生变化,RIP 协议也会进行更新操作。
【路由算法】
概述
距离矢量协议的核心是路由算法,路由算法用于计算最佳路径并将该信息发送给邻居,不同的协议采取不同的路由算法。
RIP 协议是一个典型的距离矢量协议,其适用 Bellman-Ford 算法作为路由算法。
路由算法定义了以下过程:
- 发送和接收路由信息的机制
- 计算最佳路径并将路由添加到路由表的机制
- 检测并响应拓扑结构变化的机制
- 不同的路由协议使用不同的算法将路由添加到路由表中、将更新发送给邻居以及确定路径
Bellman-Ford 算法
假设路由器收到相邻路由器(地址为 X)的一个 RIP 报文,其会执行以下步骤:
1)修改此 RIP 报文中的相关字段:把 “下一跳” 中的地址都改为 X,并把所有的 “距离” 加 1,目的网络不变
2)对修改后的 RIP 报文中的每一个项目,重复以下步骤:
① 若项目中的目的网络不在路由表中,则把该项目添加到路由表中,否则,执行 ②
② 若下一跳字段给出的 IP 地址是同样的,则把收到的项目替换原路由表中的项目,否则,执行 ③
③ 若收到项目中的距离小于路由表中的距离,则进行更新,否则,执行 ④
④ 什么也不做
3)若 180 秒内没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达,即将距离设置为 16
4)返回到 1)
对于上述过程的步骤 2) 来说,可以采用以下方法进行记忆:
- 新路由添加
- 一下跳相同则替换
- 不同下一跳跳数小则替换
- 不同下一跳跳数一样或更大则不变
【路由环路】
概述
路由环路,是指数据包在一系列路由器之间不断传输却始终无法到达其预期目的网络的一种现象。
造成路由环路的常见原因有:
- 静态路由配置错误
- 路由重分布配置错误
- 发生了改变的网络中收敛速度缓慢,不一致的路由表未能及时地得到更新
- 错误配置或添加了丢弃的路由
距离矢量路由协议的工作方式比较简单,其简单性导致它容易存在路由环路之类的缺陷,在链路状态路由协议中,路由环路非常少见,但在个别特殊情况下也会发生。
解决方法
常见的解决路由环路问题有以下方法:
定义最大值:利用 IP 数据包首部的生存时间 TTL 纠错
定义最大跳数:最大 15 跳,16 被认为不可达
水平分割:路由器向外发布某网段路由信息后不再接受从反方向发布回来的同一网段的路由更新信息
毒化反转:路由器从某个接口上接收到某个网段的路由信息之后,并不是不往回发送信息了,而是发送,只不过是将这个网段的跳数设为无限大,再发送出去(本质上一种改进的水平分割)
触发更新:当网络发生故障或得知网络拓扑结构发生改变时,路由器不再等待下一次的例行更新,而是立即通告更新后的全部路由表
抑制更新时间:如果一条路由更新的跳数大于路由表已记录的该路由的条数,那么将会引起该路由进入 180 秒的抑制状态阶段。在抑制计时器超时前,路由器不再接收关于这条路由的更新信息。
【RIP 的配置】
RIP 启动与停止
在配置模式 (config)#
中,利用 router rip
命令可以启动 RIP 协议配置模式,该命令实际上不直接启动 RIP 进程,而是提供了对路由器配置模式的访问。
利用 no router rip
命令可以停止 RIP 进程并清除现有的 RIP 配置
指定版本号
在路由器模式 (config-router)#
中,利用 version 1
或 version 2
来指定 RIP 协议的版本号。
在配置了 RIP 进程的路由器上,默认运行 RIPv1,尽管路由器只发送 RIPv1 消息,但它可以同时处理 RIPv1 和 RIPv2 消息,实际上,RIPv1 路由器会忽略路由条目中的 RIPv2 字段
通告网络
在路由器模式 (config-router)#
中,利用 network ip-address
来通告网络,其具有以下功能:
- 在指定网络地址所属的所有接口上启用 RIP
- 相关接口就开始发送和接收 RIP 更新
- 在每 30 秒一次的 RIP 路由更新中,向其它路由器通告该指定的网络地址
需要注意的是,ip-address
必须是与该路由器直连的有类网络地址,同时,如果输入子网地址,IOS 会自动将其转换为有类网络地址。
路由自动汇总
在 RIPv2 版本中,禁用了路由自动汇总功能,而使用了手工汇总功能。
自动汇总不支持不连续的网络地址,但其使发送和接收的路由更新较少,从而使路由器之间的路由更新占用更少的带宽,减少路由表条目,加快路由表查找过程。
当使用 RIPv1 时,路由器总是在边界路由器上将网络总结为有类地址(自动汇总),默认情况下,RIPv2 像 RIPv1 一样在主网边界上自动总结网络,在关闭自动汇总功能后,RIPv2 在其路由更新中包含所有子网以及相应掩码。
在路由器模式 (config-router)#
中,利用 no auto-summary
命令可以禁用自动汇总功能。
在接口模式 (config-if)#
中,利用 ip summary-address rip subnet-mask
命令,可以将相同子网掩码进行自动汇总。
配置被动接口
在默认情况下,通过所有启用了 RIP 的接口转发 RIP 更新,但实际上,只需要通过连接在其它也启用了 RIP 的路由器的接口发送 RIP 更新即可。
在路由器模式 (config-router)#
中,利用 passive-interface 接口名
命令可以进行配置。
该命令可阻止通过路由器接口广播或组播 RIP 路由更新,但是仍然允许其它接口将对应网络通告至其它路由器,此命令通常配合neighbor
命令使用。
【RIP 的验证】
在特权模式 Router#
中,可以进行 RIP 的验证,常用的有以下命令:
- 清除路由表:
clear ip route *
- 查看路由表:
show ip route [rip]
- 查看路由协议配置:
show ip protocols
- 在控制台显示 RIP 的调试状态:
debug ip rip
- 在控制台显示 RIP 的调试状态:
undebug ip rip
、undebug all
、no debug ip rip
、no debug all