一.实验目的
1、掌握 RIP 协议在路由更新时的发送信息和发送方式
2、掌握 RIP 协议的路由更新算法
二.预备知识
1、静态路由选择和动态路由选择
2、内部网关协议和外部网关协议
3、距离向量路由选择
三.实验原理
RIP 协议(RFC 1058)是一个基于距离向量路由选择的内部网关协议:每台路由器定期与邻居路由器交换各自路由表中的所有路由信息,使用Bellman-Ford 算法计算路由表。RIP 协议的路由度量(Metric)是到目的网络的跳数(hop count),最大跳数值为 15。
运行RIP 协议的路由器初始接入到网络上时,它的路由表中只有根据其接口上的 IP 配置信息获得的直连网络的直连路由。随着 RIP 路由信息的不断交换,互联网中的每台RIP 路由器最终会掌握整个互联网的知识,即 RIP 协议收敛。
RIP 协议有 2 种类型的报文:RIP 请求报文和RIP 响应报文,它们都封装在 UDP 数据报中广播发送。
RIP 请求报文可以询问特定路由项目或所有路由项目。当运行 RIP 协议的路由器刚接入网络中时,会广播发送一份询问所有路由项目的 RIP 请求报文。
RIP 响应报文可以是询问或非询问的。询问的 RIP 响应报文仅在回应RIP 请求报文时单播发送给请求者,发送的内容是请求报文中所请求的特定路由项目或整个路由表的路由项目。非询问的 RIP 响应报文则是定期的广播发送,发送的内容是整个路由表中的路由项目。RIP 响应报文中携带的RIP 路由通告信息只有目的网络地址和跳数值。
RIP 协议使用 3 个计时器来支持 RIP 协议的操作。
定期计时器(30 秒)控制定期的 RIP 路由通告,但为了避免出现整个互联网中的路由器同时更新而引起的过载问题,实际实现中路由器的 RIP 路由通告间隔通常是 25~35 之间的一个随机数。
截止期计时器(180 秒)管理 RIP 路由的有效性,路由器每次收到一条RIP 路由的更新信息,就复位该路由的截止期计时器。如果一条 RIP 路由的截止期计时器期满,则将该路由标记为无效,即将其跳数设置为 16,表示该路由的目的不可达。
路由器收到邻居通告的一条无效路由,或因为截至计时器期满而产生一条无效路由时,并不立即从路由表中清除无效路由,而是为该无效路由启动一个无用信息收集计时器(120 秒),并继续在定期的路由通告中通告跳数为 16 的无效路由。仅当无效路由的无用信息收集计时器期满时才将其清除。无用信息收集计时器使得邻居路由器能够获知某条路由是无效的。
RIP 协议存在缓慢收敛和不稳定的问题。为了解决这些问题,RIP 协议中采用了触发更新和水平分割方法。
触发更新是当网络有变化时,路由器立即发送更新信息;如果网络没有变化,则仍是定期发送更新信息。触发更新不会影响路由器的RIP 定期计时器。
水平分割是在发送路由信息时,路由器根据发送接口选择发送路由表中的路由信息,简单的说就是从某个接口收到的路由信息不能再从该接口发送出去。
四.实验内容
五.实验步骤
实验步骤详见TCP//IP实验指导书。由于步骤过长,就在此不在赘述。
六、实验数据及结果分析
1、步骤 2 中根据R1 路由表中的哪些信息可以确保实验网中的RIP 协议已经收敛? 为什么?
答:
1.连续多次输入show ip route路由命令之后,R1的路由表项不再发生变化。而且路由表项数量和拓扑中网络数量一致且没有差错。
2. 根据路由表中到达子网3的跳数,RIP路由算法收敛之后,到达子网3的条数应该为2。
2、汇总 3 个子网上捕获的 RIP 报文。按照报文的捕获顺序,分阶段分析记录每个子网中每台路由器在两次拓扑变化(第 1 次拓扑变化:图 A到图B,第 2 次拓扑变化:图B到图 A)过程中发出的RIP 报文信息:
阶段 1:第 1 次拓扑变化开始前(RIP 已收敛)的 2 个周期的RIP 报文;
阶段 2:第 1 次拓扑变化时RIP 收敛过程中的所有 RIP 报文;
阶段 3:第 1 次拓扑变化时RIP 完成收敛后的 2 个周期的RIP 报文;
阶段 4:第 2 次拓扑变化时RIP 收敛过程中的所有 RIP 报文;
阶段 5:第 2 次拓扑变化时RIP 完成收敛后的 2 个周期的RIP 报文。
子网1:路由器R1 | |||||||||
IP 分组首部 | UDP数据包首部 | ||||||||
源IP | 172.16.1.1 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
RIP报文 | |||||||||
阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
1 | Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:26:04 | |||
Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:26:33 | ||||
2 | Response | 172.16.2.0 | 16 | 172.16.3.0 | 16 | 18:34:52 | |||
Response | 172.16.2.0 | 16 | 172.16.3.0 | 16 | 18:35:16 | ||||
Response | 172.16.2.0 | 16 | 172.16.3.0 | 16 | 18:35:43 | ||||
3 | - | - | - | - | - | - | |||
4 | Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:43:23 | |||
5 | Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:43:38 | |||
Response | 172.16.2.0 | 1 | 172.16.3.0 | 2 | 18:44:05 |
子网2:路由器R1 | |||||||||
IP 分组首部 | UDP数据包首部 | ||||||||
源IP | 172.16.2.1 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
RIP报文 | |||||||||
阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
1 | Response | 172.16.1.0 | 1 | - | - | 18:26:33 | |||
Response | 172.16.1.0 | 1 | - | - | 18:27:00 | ||||
2 | - | - | - | - | - | - | |||
3 | - | - | - | - | - | - | |||
4 | Request | Not specified | 16 | - | - | 18:43:21 | |||
Response | 172.16.1.0 | 1 | - | - | 18:43:38 | ||||
5 | Response | 172.16.1.0 | 1 | - | - | 18:44:05 | |||
Response | 172.16.1.0 | 1 | - | - | 18:44:32 |
子网2:路由器R2 | |||||||||
IP 分组首部 | UDP数据包首部 | ||||||||
源IP | 172.16.2.2 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
RIP报文 | |||||||||
阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
1 | Response | 172.16.3.0 | 1 | - | - | 18:26:44 | |||
Response | 172.16.3.0 | 1 | - | - | 18:27:13 | ||||
2 | Response | 172.16.3.0 | 1 | - | - | 18:35:02 | |||
Response | 172.16.3.0 | 1 | - | - | 18:35:31 | ||||
Response | 172.16.3.0 | 1 | - | - | 18:36:00 | ||||
Response | 172.16.3.0 | 1 | - | - | 18:36:30 | ||||
Response | 172.16.3.0 | 1 | - | - | 18:36:57 | ||||
Response | 172.16.3.0 | 1 | - | - | 18:37:24 | ||||
Response | 172.16.1.0 | 16 | 172.16.3.0 | 1 | 18:37:50 | ||||
Response | 172.16.1.0 | 16 | - | - | 18:37:52 | ||||
Response | 172.16.1.0 | 16 | 172.16.3.0 | 1 | 18:38:20 | ||||
3 | Response | 172.16.3.0 | 1 | - | - | 18:38:49 | |||
Response | 172.16.3.0 | 1 | - | - | 18:39:17 | ||||
4 | Response | 172.16.3.0 | 1 | - | - | 18:43:21 | |||
Response | 172.16.3.0 | 1 | - | - | 18:43:56 | ||||
5 | Response | 172.16.3.0 | 1 | - | - | 18:44:05 | |||
Response | 172.16.3.0 | 1 | - | - | 18:44:32 |
子网3:路由器R2 | |||||||||
IP 分组首部 | UDP数据包首部 | ||||||||
源IP | 172.16.3.2 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
RIP报文 | |||||||||
阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
1 | Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:34:06 | |||
Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:34:34 | ||||
2 | Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:35:02 | |||
Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:35:31 | ||||
Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:36:00 | ||||
Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:36:30 | ||||
Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:36:57 | ||||
Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:37:24 | ||||
Response | 172.16.1.0 | 16 | 172.16.2.0 | 1 | 18:37:50 | ||||
Response | 172.16.1.0 | 16 | - | - | 18:37:52 | ||||
Response | 172.16.1.0 | 16 | 172.16.2.0 | 1 | 18:38:20 | ||||
3 | Response | - | - | 172.16.2.0 | 1 | 18:38:49 | |||
Response | - | - | 172.16.2.0 | 1 | 18:39:17 | ||||
4 | Response | 172.16.1.0 | 2 | - | - | 18:43:40 | |||
Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:43:56 | ||||
5 | Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:44:23 | |||
Response | 172.16.1.0 | 2 | 172.16.2.0 | 1 | 18:44:52 |
子网3:路由器R3 | |||||||||
IP 分组首部 | UDP数据包首部 | ||||||||
源IP | 172.16.3.3 | 目的IP | 255.255.255.255 | 源端口 | 520 | 目的端口 | 520 | ||
RIP报文 | |||||||||
阶段 | 命令 | 路由信息项1 | 路由信息项2 | 捕获时间 | |||||
网络地址 | 跳数 | 网络地址 | 跳数 | ||||||
1 | - | - | - | - | - | - | |||
2 | Response | 172.16.1.0 | 16 | - | - | 18:37:52 | |||
Response | 172.16.1.0 | 16 | - | - | 18:38:16 | ||||
Response | 172.16.1.0 | 16 | - | - | 18:38:43 | ||||
3 | - | - | - | - | - | - | |||
4 | - | - | - | - | - | - | |||
5 | - | - | - | - | - | - |
3、RIP 计时器分析:
-在本实验中,RIP 的定期计时器、截止期计时器和无用信息收集计数器实际上是多少秒?
在本实验当中,RIP的定期计时器是25~30秒之间的一个随机的值,截止期计时器是180秒,无用信息收集计数器是120秒。
-为什么定期计时器并不是RFC 中规定的固定值,而是一个时间范围内的随机值?
避免整个互联网内同一时间所有路由器同时更新造成过载的问题。
4、阶段 1 分析:
-该阶段中为什么在子网 3 上捕获不到路由器R3 的 RIP 报文?
因为启用了水平分割,从某个接口接收到的更新信息不允许再从这个接口发回去。R3上的路由信息都是从路由器172.16.3.3的接口上获取的,所以不会再从这个接口上转发出去,在子网3内就不会捕获到路由器R3的报文。
5、阶段 2 分析:
-分析子网 1 中路由器 R1 的 RIP 报文信息记录,根据哪一个 RIP 报文,可以推断出 R1 大约何时断开与子网 2 的连接的?为什么?
本人根据wireshark抓包获取的74号RIP报文,断开时间大概为18点34分52秒,绝对时间是528.375000秒。
原因:此时R1在子网1内广播通告子网2,子网3都不可达,而且与上一条RIP报文的时间相差不到1s,说明是引起了触发更新,所以可以推断此时R1与子网2断开了连接。
-该阶段中记录的哪些 RIP 报文是触发更新报文?是如何推断出来的?
①触发更新报文:R1在子网1中发送的74号报文,R2在子网2中发送的165号报文,R2在子网3中发送的158号的RIP报文,R3在子网3发送的159号报文。
②推断的原因: 1.与前一个周期性报文相差的时间为0-2s,小于25秒,并且仅仅通告发生故障的链路
2.在同一个子网内两个路由器通报的触发更新报文的时间应该相近,报文的序号也应该接近。
-产生这些触发更新报文的原因分别是什么?
①R1在子网1发送触发更新报文的原因是:R1与子网2断开连接,造成路由表项没有跟新,因此在子网1内通告子网2,子网3 不可达的信息。
②R2在子网2和子网3发送触发更新报文的原因:R2路由表项中目的地址是子网1的路由表项超过截止期计时器时间,然后R2更新自己的路由表项子网1不可达,跳数变为16,并向子网2和子网3内进行通告子网1不可达。
③R3在子网3发送触发更新报文的原因:R3收到R2发送的子网1不可达的报文信息,进行更新自己的路由表项,并向子网3内通告子网1断开连接,不可达。
-RIP 的触发更新报文和定时更新报文在通告的路由信息数量上有何不同?
RIP的触发更新报文仅通告有变化的路由信息,而定时更新报文通告路由表中所有的信息(除了因水平分割被过滤掉的路由表项信息)。
6、阶段 3 分析:
-路由器 R1、R2 和R3 在第 1 次拓扑改变时的RIP 收敛时间大概分别是多少秒钟?整个网络的RIP 收敛时间是多少秒钟?
R1在第一次改变拓扑之后的收敛时间约为60秒,R2和R3的收敛时间约为240秒。
整个网络的收敛时间为240秒。
-为什么 R1 对网络拓扑变化的更新时间要明显短于R2 和 R3?
因为R1与子网2断开之后,由于R1和子网2是直连的,R1立马可以检测到链路断开,因此R1的更新收敛时间就应该是无效路由信息更新的时间。而R2需要等待截止期计时器180秒之后确定路由表项过期之后,才能知道子网1不可达,之后会立刻产生一个触发更新报文通知R3,而R3收到通知之后产生触发更新报文的时间和R2很接近。所以R1对网络拓扑变化的更新时间要明显短于R2 和 R3。
-该阶段中为什么在子网 1 中捕获不到路由器R1 的 RIP 报文?
水平分割。因为此时R1只连接了子网1,根据水平分割,从某个接口接收到的更新信息不允许再从这个接口发回去,所以在子网1内不会收到R1的RIP报文。
7、阶段 4 分析:
-分析子网 2 中路由器 R1 的 RIP 报文信息记录,根据哪一个 RIP 报文,可以推断出 R1 大约何时恢复与子网C 的连接的?为什么?
根据R1在子网2中于18:43:21:721321发送的报文,可以推断出R1与子网2恢复了重连。
原因:此时路由器R1在子网2广播发出了Requset,路由器刚刚接入到一个子网的时候,它会在这个子网上发送一个询问所有路由信息的RIP请求报文。
-该阶段中记录的哪些 RIP 报文是触发更新报文?
R1在子网1上于18:43:23发送的128号RIP报文
R1在子网2上于18:43:38发送的217号RIP报文
R2在子网3上于18:43:40发送的244号RIP报文
-产生这些触发更新报文的原因分别是什么?
①R1在子网1与子网2上发送触发更新报文的原因是:R1与子网2恢复连接之后即在子网2上发送请求所有路由信息的request的RIP报文。在收到邻居R2的响应报文之后,R1就在子网1中通告子网2和子网3路由的触发更新信息,并在子网2上通告子网1的触发更新信息。
②R2在子网3上发送触发更新报文的原因是:R2收到R1通告的子网1路由的触发更新信息之后,更新自己的路由表,并在子网3上通告子网1的路由的触发更新信息。
-该阶段中为什么路由器R2会在子网2上发送单播和广播这两种RIP响应的分组?
①发送单播RIP响应分组的原因是:R1向子网2内发送广播分组,R2对R1单播响应。
②发送广播RIP响应分组的原因是:是RIP的周期性响应报文,是R2周期性的向子网2广播子网3的路由信息。
8、阶段 5 分析:
-路由器R1、R2 和R3 在第2 次拓扑改变时的RIP 收敛时间分别是多少秒钟? 整个网络的 RIP 收敛时间是多少秒钟?
R1在第二次拓扑改变期间时RIP的收敛时间大概是2秒,R2与R3在第二次拓扑发生变化时收敛时间大概分别是22,24秒。整个网络的RIP收敛时间大概是24秒。
-比较 2 次拓扑变化时 RIP 的收敛时间,分析 RIP 协议对好消息(网络可达) 和坏消息(网络不可达)的传递哪一种更快?并分析产生这种现象的原因。
好消息的传递速度更快。
原因:对于坏消息的传播,如果是直连网络会立即发现网络不可达,但是对于非直连的路由器需要等待180秒的截止计时器的时间直到路由表项过期,并且对路由表项进行无用信息收集计时器更新,而对好消息没有任何计时器的限制,直接进行触发更新。
综上,所以好消息的传递要快于坏消息。
七、实验结论
1、总结 RIP 协议的路由通告机制,即路由器何时发送 RIP 路由通告?发送哪些
内容?发送方式?
说明:询问响应不是路由通告机制。
通告类型 | 何时发送 RIP 路由通告 | 发送哪些内容 | 发送方式 |
定期更新 | 路由器每隔25~30秒(随机) | 向自己的每个端口发送出除水平分割之外的其他所有的路由表项 | 广播 |
触发更新 | ①网络发生变化时 ②截止期计时器到期没有收到RIP路由通告 | 对特定变化的路由表项进行发送 | 广播 |
- 总结 RIP 协议的路由更新算法,即路由器收到 RIP 响应报文后,如何更新自己的路由表?
- 首先检查RIP响应报文的有效性(检查端口,源IP地址)
- 然后处理RIP报文的信息:
- 先忽略非法的度量,地址和无用的区域
- 度量metric=min(metric+1,16)
- If 目的网络地址不在路由表里面就添加上这一条路由表项
Else if 路由表中对应表项的下一跳和RIP报文的源IP相同,就将这一个路由表项替换掉。
Esle if 收到报文里面的metric+1之后比原来路由表项里面的metric还小就进行更新这一条路由表项。
写成流程图如下:
3、总结 RIP 协议的 3 个计时器的工作原理:计时对象?何时启动?何时复位?何时终止?期满时对计时对象的处理?
(1)定期计时器:计时的对象是启动定期计时器的路由器。路由器启动就启动了定期计时器,定期计时器每隔25~35秒复位一次。只要路由器没有宕机,不会终止(或者说是到达设定时间之后)。期满时的动作是通告自己的整个路由表。
(2)截止期计时器:计时的对象是1条RIP路由。启动时间是新的RIP路由表项被添加的时候。当收到这条路由变化更新的时候,进行复位,复位到180秒。期满时的动作为如果180秒之内没有收到更新的RIP路由信息,该路由就会被标记为过期,跳数变为16,同时终止截止期计时器。
(3)无用信息收集计时器:计时对象是跳数为16的路由表项,从某一路由表项变为16开始启动,不会自动进行复位,到达设定时间120秒后终止,期满时删除该路由表项。
八、总结及心得体会
1.通过本次实验,体会了整个RIP路由协议更新的整个过程,以及RIP协议的辅助触发更新和水平分割。
2.对距离矢量路由算法有了更加深入的认识。
3.对RIP的三个重要的计时器定期计时器、截止期计时器、无用信息收集计时器理解更深入了。
九、对本实验过程及方法、手段的改进建议
1.实验可以增加难度,相关RIP路由算法部分可以让学生们来进行实现。
2.相关实验报告可以增加模板,减少学生们这一部分的时间。