RIP 和 OSPF 协议配置实验
1 RIP 和 OSPF 路由协议的配置及协议流程分析——实验报告
1.1 环境(详细说明运行的操作系统,网络平台,网络拓扑图)
操作系统:Windows 10
网络平台:Dynamips 仿真软件
网络拓扑图
1.2 实验目的
- 在上一次实验的基础上实现RIP和OSPF路由协议
- 自己设计网络物理拓扑和逻辑网段,并在其上实现RIP和OSPF协议(不能少于4台路由器,要求IP地址第二位是学号后三位%255)
- 通过debug信息详细描述RIP和OSPF协议的工作过程,包括初始信息交互、路由计算、链路故障处理等部分。(要修改部分链路,观察工作过程)
RIP协议中观察没有配置水平分割和配置水平分割后协议的工作流程,和路由消息传递方式; (要修改部分链路,观察区别,默认有水平分割)
OSPF中数据库同步信息的格式和同步对象?链路改变信息如何发送,具体格式(要修改部分链路,观察消息传递过程)
1.3 实验内容及步骤
1.3.1 配置命令含义及步骤
1.3.1.1 RIP 配置命令
- show ip route 查看路由表
- router rip 启动 RIP 进程
- network 通告网络
- version 定义 RIP 的版本
- neighbor 配置单播更新的目标
- 单播更新:指 RIP 使用单播发送 RIP 报文。默认情况下,RIP 每隔 30s 以
广播或组播
方式交换整个路由表的信息,这样会耗费大量网络带宽,尤其是在广域网中,可能出现严重的性能问题。我们可以使用单播更新的方式来交换路由信息,以此来改善性能问题。当使用 slient-interface 命令配置抑制接口后,再指定单播更新的目的地址后,单播更新有效;如果在接口下使用 undo rip output 命令来配置抑制接口,就是再指定单播更新的目的地址也是无法正常的发送更新的路由条目的。
- 单播更新:指 RIP 使用单播发送 RIP 报文。默认情况下,RIP 每隔 30s 以
- debug ip rip 动态查看 RIP 的更新过程
- no ip split-horizon 关闭水平分割
1.3.1.2 RIP 配置步骤
- 配置 R1
1 | Router#configure terminal |
- 配置 R2
1 | Router#configure terminal |
- 配置 R3
1 | Router#configure terminal |
1.3.1.3 OSPF 配置命令
- router ospf 10 启动 OSPF 进程,10 为进程号(只具有本地意义)
- network … area … 宣告网络和 OSPF 区域号,网络的宣告使用反掩码形式,同一个区域中的路由器区域号要保持一致
- Router(config-if)#ip ospf hello-interval 5 修改默认的 Hello 报文发送间隔为 5s
- Router(config-if)#ip ospf dead-interval 20 修改默认的死亡间隔为 20s (默认为 Hello 间隔的 4 倍)
- debug ip ospf events 显示OSPF 发生的事件
- debug ip ospf packet 显示路由器收到的所有的 OSPF 数据包
- debug ip ospf flood 显示与泛洪相关的所有信息
- show ip ospf neighbor 查看 OSPF 邻居的基本信息
1.3.1.4 OSPF 配置步骤
- 配置 R1
1 | Router(config)#router ospf 1 |
- 配置 R2
1 | Router(config)#router ospf 2 |
- 配置 R3
1 | Router(config)#router ospf 3 |
1.3.2 分析 RIP 协议的工作过程
1.3.2.1 信息交互过程(以 R1 为例)
使用
debug ip rip
命令展示 RIP 报文收发过程可以看到,R1 收到了来自 S1/0、4.193.1.2 的更新包和来自 s1/1、1.193.1.2 的更新包,每一个包中包含了目标 IP 地址以及对应的跳数信息。结合网络拓扑图,分析跳数信息得到:
- 每个路由器到目标 IP 地址所需的跳数不包含本路由器
由于我所设计的网络拓扑图的环形结构,使得从不同端口到达某一 IP 地址的跳数不同:
- s1/0 端口收到的是 RT3 发来的消息,因此在 s1/0 得到的消息中,到达 3.0.0.0 所需跳数为 2,路径为: RT1 —> RT3 —> RT2
- s1/1 端口收到的是 RT2 发来的消息,因此这时到达 3.0.0.0 所需跳数为 1,路径为: RT1 —> RT2
同时,可以看到 R1 向与自己直连的所有端口都发送了更新信息:
下面的消息说明,R1 建立了新的表项,包含目标 IP 和跳数信息:
观察最终稳定的路由表,已经生成了到达各个网段的路由信息。很明显,各个设备之间通信的跳数都是 1,说明 RIP 协议自动选择了跳数最小的一条路径:
1.3.2.2 链路故障处理
尝试切断网络 5.0.0.0,删除 R2 的 s1/1 端口的 IP 信息并关掉这一端口:
1
2
3Router#conf t
Router(config)#inter s1/1
Router(config-if)#shutdown如下所示,观察 R1 的路由表的变化,可见通往网络 5.0.0.0 的分支少了一条
如下所示,观察 R2 的路由表,可见,由于拓扑结构的变化,R2 通往网络 6.0.0.0 所需的跳数变成了 2(只能通过蓝色箭头路径到达):
1.3.2.3 水平分割功能测试与分析
默认情况下是开始水平分割的,在某个接口中使用
no ip split horizon
命令可以关闭该接口的水平分割功能,这里我关闭 R2 的 s1/0 接口观察 R2 收发的信息,R2 从 s1/0 端口收到了三条路由消息:
再观察 R1 收发的信息,R1 从 s1/1 接口收到了六条路由消息,其中包含 R2 的 s1/0 端口所收到的三条。由此可以看出,R2 的 s1/0 端口将自己收到的消息重新又通过学习到这条消息的接口转发了出去。这样会产生路由环路问题(见 2.3.3)
1.3.3 分析 OSPF 协议的工作过程
1.3.3.1 数据库同步信息的格式和同步对象
- 使用
debug ip ospf events
命令,可以看到路由器接收到的 Hello 报文,以及报文发来的端口等信息
使用
debug ip ospf packet
命令,显示的内容更加详细:格式说明:
- v:2 表示 OSPF v2 版本
- t:1 表示 Type,即类型,类型 1 是 Hello 报文
- l:48 长度 Length 是 48
- rid:5.193.1.1 发送整个报文的路由器的RID
- aid:0.0.0.0 表示所在区域是 0
- chk:F02F 表示验证和
- aut:0 表示验证,0 表示空验证,1 表示明文验证,2 表示MD5验证
- auk: 验证相关的内容,因为没有使用验证,所以没有值
- from Serial1/1 表示从s1/1接口接收到的OSPF分组
1.3.3.2 链路改变信息
关闭 R2 的 s1/1 端口
R1 有如下泛洪消息:
R2 有如下泛洪消息:
路由表随之发生变化:
1.4 实验结果
1.4.1 RIP
1.4.1.1 所有设备能够互相 ping 通
从 R3 ping PC 2:
网络 3 ping 网络 6:
网络 3 ping 网络 2:
网络 6 ping 网络 2:
1.4.1.2 如下图所示,路由表正确:
每个路由器都含有到 6 个网段的路由信息
路由信息中非直连的网段,都是根据 RIP 协议学习来的
R1:
R2:
R3:
1.4.2 OSPF
1.4.2.1 所有设备能够互相 ping 通
网络 2 ping 网络 3:
网络 2 ping 网络 6:
网络 3 ping 网络 6:
1.4.2.2 路由表正确
每个路由器都含有到 6 个网段的路由信息
路由信息中非直连的网段,都是根据 OSPF 协议学习来的
R1:
R2:
R3:
1.4.2.3 邻居信息正确
R1:
R2:
R3:
1.5 实验中的问题及心得
1.5.1 问题1:导入导出配置
用Dynagen来保存配置文件_zczspring的专栏-CSDN博客
1.5.2 问题2:RIP 实验中直连路由信息丢失的问题
如下所示,在 R1 的路由表中,只有两个直连项
同时,从 R1 ping 自己的直连端口也不通:
即如图中红框部分出现了问题。
首先对各个配置项进行了排查,并没有问题,于是猜测可能是 .net 文件书写的问题,进行修改后解决,R1 中正确显示了所有直连路由:
1.5.3 问题3:RIP 路由信息中的 via 0.0.0.0
如下所示,一开始以为这个 via 代表下一跳的地址,那为什么是 0.0.0.0 呢,查阅资料后了解到,RIP 协议发给邻居路由器的路由表的下一跳地址是对自己来说的,但是这个下一跳地址发给邻居路由器之后,其实没有任何意义。如果邻居路由器经过计算之后,选择的就是这一条路径, 那么这个路由信息中的下一跳就是本机。
1.6 实验思考
实验中,采用下一跳和转发接口这两种方式配置 PC1和 PC2 的静态路由有什么区别?会导致在你的拓扑结构中从 PC1 ping PC2 时的丢包数有什么变化?需要用你的拓扑中 PC1 和 PC2 的 arp 表和路由表中的内容来解释,要附截图。( PC1 和 PC2 间隔至少两台路由器)
采用转发接口方式配置 PC1 的静态路由,ping 之前和 ping 之后的 ARP 表如下所示,可见 ARP 表新增了所 ping 的 IP 地址的 MAC 信息
采用下一跳地址的方式配置 PC2 的静态路由,ping 之前和 ping 之后的 ARP 表如下所示:
对比丢包情况
转发接口方式:
下一跳地址方式:
可见,转发接口方式由于每次都要进行解析,每次都可能发生丢包,而下一跳地址方式则不会产生丢包
对照所截获的消息,说明 OSPF 协议和 RIP 协议在邻居发现和数据库同步等部分中消息传递方式和消息内容上的差异。附截图和对消息的说明。
见 1.3 中对 OSPF 和 RIP 工作过程的分析
2 相关知识复习
2.1 路由协议
- 内部网关协议(IGP):RIP、OSPF、IS-IS等
- 外部网关协议(EGP):BGP
2.2 自治系统
- 一个自治系统是指由若干个二层网络及若干台路由器组成的集合,集合中的这些网络及路由器均属于同一个管理机构
- 根据规模大小的不同,一个internet可能只包含一个自治系统,也可能包含多个自治系统
- 通常情况下,一个自治系统中的所有路由器需要运行同一种具体的、由该自治系统的管理机构指定的 IGP协议(有时也会运行不同的IGP协议)
- IGP协议在自治系统中应该达到的目的:使自治系统中的每一台路由器都能发现通往本自治系统内各个目的网络的路由
2.3 RIP(Router Information Protocol)
2.3.1 基本概念
- RIP是一种基于距离矢量(DV)算法的内部网关协议(IGP)
- RIP协议以跳数来定义路由的开销
- 跳数:到达目的地所需要经过的路由器的个数
- 协议规定,$跳数≥16$ 的路由将被看成是不可达的路由,这限制了该协议只能应用在规模较小的网络中
- RIP路由器除了拥有IP路由表外,还要单独创建并维护一个RIP路由表,该路由表是专门来存放该路由器通过运行RIP协议而发现的路由
2.3.2 路由交换过程
初态的路由表只包含该路由器自动发现的直连路由
RIP请求消息:在RIP路由器开始启动之后,立即向它的所有的
邻居路由器
发送RIP请求消息,以便快速获得关于整个RIP网络的路由信息;运行中的RIP路由器也可以随时的根据自身的需要向它的所有的邻居发出RIP请求消息- RIP响应消息:RIP路由器在接收到RIP请求消息后,会立即发出RIP响应消息进行回应。RIP路由器总是会每隔
30秒
的时间向它的所有的邻居路由器周期性的发送RIP响应消息,而该消息中携带了该路由器的RIP路由表中的最新的路由信息 - 经过一段时间的信息交换,路由表达到稳定状态,每台路由器的RIP路由表都包含了该路由器去往整个RIP网络的各个目的网络的路由信息
- 在稳定的状态下,路由交换过程是仍然会进行的。当网络的结构发生变化后,稳定状态被打破时,随着路由交换过程的进行,经过足够长的时间之后,每台路由器的RIP路由表便又会达到新的稳定状态。
2.3.3 路由环路问题及解决方法
2.3.3.1 问题描述
当A路由器一侧的X网络发生故障,则A路由器收到故障信息,并把X网络设置为不可达,等待更新周期来通知相邻的B路由器。但是,如果相邻的B路由器的更新周期先来了,则A路由器讲从B路由器那学习了到达X网络的路由,就是错误路由,因为此时的X网络已经损坏,而A路由器却在自己的路由表内增加了一条经过B路由器到达X网络的路由。然后A路由器还会继续把该错误路由通告给B路由器,B路由器更新路由表,认为到达X网络须经过A路由,然后继续通知相邻的路由器,至此路由环路形成,A路由器认为经过B路由器可以到达X网络,而B则认为经过A路由器可以到达X网络
2.3.3.2 解决方法
- 触发更新
- 当RIP路由表中的某些路由项的内容发生改变时,路由器应该立即向它的所有邻居发布响应消息,并不是等待更新定时器所规定的下一个响应消息的发送时刻
- 为了减少带宽和路由器处理资源的浪费,触发更新的响应消息中只需要包含路由消息发生改变了的路由项
- 水平分割
- 一个路由器通过 A 接口学习到路由信息 x/y,当该路由器通过 A 接口向外发送响应消息时,一定不能包含 x/y 这个路由项的信息
- 毒性逆转
- 一个路由器通过 A 接口学习到路由信息 x/y,当该路由器通过 A 接口向外发送响应消息时,需要包含 x/y 这个路由项的信息,但是这个路由信息的 cost 设置为 16(不可达状态)
毒性逆转和水平分割方法都可以避免产生路由环路,但是两者是
互斥的
。RIP路由器可以具备水平分割的功能或毒性逆转功能,但是不能同时具备两个功能。
2.4 OSPF(Open Shortest Path First)协议
OSPF协议详解 —— 讲的很清楚,不再赘述