姓名 | 学号 | 班级 | 网络是否连通 | 能否正常抓取报文 |
---|---|---|---|---|
lx | 2020 | 计算 | 是 | 能 |
感觉原来的拓扑图过于简单,所以另外又加了一个R3路由器,更加真实地观察分析。
左边是0/0口,右边是0/1口,下面是0/2口。
Router>enable # 进入特权执行模式
Router#configure terminal # 进入全局配置模式
Router(config)#hostname R1 # 将路由器名称配置为R1
R1#show ip interface brief # 查看路由器R1的接口
Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0 unassigned YES unset administratively down down
GigabitEthernet0/1 unassigned YES unset administratively down down
GigabitEthernet0/2 unassigned YES unset administratively down down
Vlan1
先将路由器重命名为R1,然后查看接口,发现有三个接口分别是G0/0/0
、G0/0/1
、G0/0/2
R1(config)#interface G0/0/0
R1(config-if)#ip address 192.168.1.57 255.255.255.0 # 设置IP地址
R1(config-if)#no shutdown # 激活接口
G0/0/1
、G0/0/2
同样用这种方法设置,不多赘述。
R1(config-if)#end # 返回特权执行模式
R1#copy running-config startup-config # 保存R1配置
使用命令show ip interface brief
进行查看(状态Status应为up
),举例:
R1#show ip interface brief
Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0 192.168.1.57 YES manual up up
GigabitEthernet0/1 192.168.2.56 YES manual up up
GigabitEthernet0/2 192.168.4.56 YES manual up up
Vlan1 unassigned YES unset administratively down down
启用动态路由
R1(config)#router rip # 进入路由配置模式,在路由器使用RIP
指定网络
R1(config-router)#network 192.168.1.0
R1(config-router)#network 192.168.2.0
R1(config-router)#network 192.168.4.0
用network命令发布网段,其作用如下:
保存配置
network ip-address
命令用于发布网段,其作用如下:
对属于该网络的所有接口启用RIP。这些接口将开始发送和接收RIP更新
在每30秒一次的RIP路由更新中向其它路由器通告该网络
检验RIP是否配置成功
查看R1路由表
I,指从内部网关协议(IGRP)中学到的路由。
R,从RIP协议中学到的路由。
O,从OSPF(开放式最短路径优先)协议学到。
C,直连路由。
S,静态配置的路由,请注意,静态路由的管理距离为 0。
E,从外部网关协议(EGP)学到的路由。
B,指从BGP协议、
I,指IS-IS协议学到的路由信息。
根据以上的关键字母的注释,我们可以来尝试着分析我们的路由表(部分):
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks # 192.168.1.0这个网络中有两个子网(1.56和1.57)
C 192.168.1.0/24 is directly connected, GigabitEthernet0/0 # 192.168.1.0这个网络直接连接到接口G0/0
L 192.168.1.57/32 is directly connected, GigabitEthernet0/0 # 192.168.1.57这个子网直接连接到接口G0/0
R 192.168.3.0/24 [120/1] via 192.168.2.57, 00:00:07, GigabitEthernet0/1
192.168.3.0/24
就是学到的路由via
有 “经由” 的意思,路由表中理解为 “下一跳” ,指下一跳的接口IP地址为192.168.2.57
,就是我要发送数据包到下个路由器的接口,从G0/1接口转发。R 192.168.5.0/24 [120/1] via 192.168.2.57, 00:00:07, GigabitEthernet0/1
[120/1] via 192.168.4.57, 00:00:24, GigabitEthernet0/2
R1学习到一条路由信息:192.168.5.0
,下一跳可以通过接口G0/1的192.168.2.57
子网,也可以通过接口G0/2的192.168.4.57
子网。
重置路由表,分析初始路由表的建立过程
命令clear ip route *
可以清空该路由器的路由信息,用show ip route
进行验证发现确实没有学习到的路由信息了,用相同的操作清空 R2 和 R3 中的路由信息后,通过命令debug ip rip
和可视化报文进行分析。
注意:以上的操作必须在模拟仿真条件下执行,否则路由器会自动每30s和相邻路由器交换信息,导致路由表清空失败
至此,所有路由器都已经初始化,点击模拟开始按钮让路由器开始交换信息
在本题中,我们只用R2路由器来做分析
分析部分代码
RIP: received v2 update from 192.168.5.57 on GigabitEthernet0/2
# 从接口G0/2接收到了rip v2的更新包,数据源为192.168.5.57网段
192.168.1.0/24 via 0.0.0.0 in 2 hops
# 若下一跳为G0/2连接的路由器,需要 2 跳达到网络192.168.1.0(R2→R3→R1)
192.168.2.0/24 via 0.0.0.0 in 2 hops
# 若下一跳为G0/2连接的路由器,需要 2 跳达到网络192.168.2.0(R2→R3→R1)
192.168.3.0/24 via 0.0.0.0 in 3 hops
# 若下一跳为G0/2连接的路由器,需要 3 跳达到网络192.168.2.0(R2→R3→R1→R2)
RIP: sending v2 update to 224.0.0.9 via GigabitEthernet0/1 (192.168.3.56)
# 从接口G0/1发送本路由器的rip v2更新包,发送目标为192.168.3.56网段(PC)
RIP: build update entries # 本路由器(R2)更新后的路由表
192.168.1.0/24 via 0.0.0.0, metric 2, tag 0 # 需要 2 跳才能到达网络192.168.1.0( →B→A)
192.168.2.0/24 via 0.0.0.0, metric 1, tag 0 # 需要 1 跳才能到达网络192.168.2.0( →B)
192.168.4.0/24 via 0.0.0.0, metric 2, tag 0 # 需要 2 跳才能到达网络192.168.4.0( →B→D 或 →E→D)
192.168.5.0/24 via 0.0.0.0, metric 1, tag 0 # 需要 1 跳才能到达网络192.168.5.0( →E)
分析报文
可以发现,首先由R1准备好3个RIP V2
路由更新报文,通过G0/0
、G0/1
、G0/2
分别发送给PC1,R1,R2,这里需要注意的是,因为是路由更新协议,所以并不会成功传送给PC1,如图:
在R2接收到来自R1的路由更新报文后,继续将R1的路由更新报文用剩余的接口转发给PC2、R3路由器,下图是R2在接收到R1的报文后,自己产生的要转发的报文:
同理,R3接收到R1的报文后,也会再转发给R2。
接下来就是R2开始发送路由更新报文,不再重复分析。
首先事先声明,在本次实验中,我并没有观察到所谓的“坏消息传得慢”的现象,相反,我观察到“坏消息传得最快”,一下是我的分析过程。
将R1的G0/0接口断开
这里我一开始虽然有点疑惑,但是从理论上来说,因为虽然R1到PC1的路径断开,如果R1在收到来自R2的路由刷新报文之前, R1将修改后的路由信息广播给相邻的路由器R2, 于是R2修改自己的路由表, 将原来经R1去往net1的路由删除。
这样的话其实和我观察到的好像没有什么区别。(真的没区别吗?下文会阐述)
但是我想观察到的现象其实是R2赶在R1发送新的路由刷新报文之前, 广播自己的路由刷新报文,下面是慢收敛问题的原因阐述:
该报文中必然包含一条说明R2经过一个路由器可以到达192.168.1.0路由。由于R1已经删除了到达192.168.1.0的路由,,按照V-D算法,,R1会增加通过R2到达192.168.1.0的新路径,不过路径的距离变成了2。这样,,在路由器R1和R2之间就形成了路由环, R2认为通过R1可以到达192.168.1.0, R1则认为通过R2可以到达192.168.1.0。尽管路径的“距离”会越来越大,,但该路由信息不会从R1和R2的路由表中消失。从而出现无穷循环(实际有上限,最多16跳)。这就是慢收敛问题产生的原因。
于是我又反复断开、连接、断开、连接……大概六七次都是一样的情况—R2、R3几乎是在我断开的一瞬间就收到了这条故障更新路由,就在这时,我发现了一个很奇怪的点
这里只有单单一条故障的路由信息!而不是R1所有的路由信息,按照道理来说R1更新路由是会有两条路由信息:
然后我就开始怀疑,会不会RIP2协议中,已经针对这种慢收敛问题做出了优化,我首先的猜想是:在路由器连接的路由崩溃时,会立即将这条断掉的路由值设置为16 hops,也就是不可到达,然后立即(没错就是立即)发送给邻近的路由器
。这样的话,完全可以解释刚刚的现象。
接下来分析下报文
1. 再次断开R1的G0/0接口
2. R1立即产生两个路由更新报文(只有两个接口了)
3. R1发出崩溃路由的更新报文
在R2、R3接收到这条崩溃的路由信息后,立即准备好转发给下一接口的路由器。下图是R2产生的报文(注意该报文里也只有单单一条崩溃的路由信息):
4. 查看报文
注意这里的“触发更新”,在一篇 Title-题名为 路由协议RIP慢收敛问题及其对策 的论文中,提到了关于RIP协议解决慢收敛问题的一些对策:
为了解决慢收敛问题, RIP协议采用:限制路径最大“距离”对策、分割水平线、带抑制逆转位的分割水平线和触发更新来避免计值到无穷循环问题。
发现了么,这里也提到了触发更新,下面引用这篇论文的内容简单介绍一下这几种方法。
看到这里,结果已经很显而易见了,我们这里看到了就是RIP协议针对慢收敛问题的两种解决办法—带触发更新的毒性逆转对策以及最大距离对策。效果也是很好,基本在一瞬间就能让崩溃的路由信息传递给周围的路由器,大概是因为我这个网络过于简单,所以这种优化方法并没有发生什么问题。
问题1—默认网关设置(已解决)
这个问题其实在一开始配置网络拓扑结构的时候就已经发生了,因为我不知道默认网关到底是什么,只是将它设置为连接到路由器该接口的ip地址,所以在完成本次实验后特意去了解了一下网关。
网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1-192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1-192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如图1所示)。网络A向网络B转发数据包的过程。
问题2—为什么配置用RIP V2版本(模糊)
经过了解,RIP v2其实就是RIP v1版本的增强版,具体的升级如下:
- 支持外部路由标记(Route Tag),可以在路由策略中根据Tag对路由进行灵活控制。
- 报文中携带掩码信息,支持路由聚合和CIDR(Classless Inter-Domain Routing)。
- 支持指定下一跳,在广播网上可以选择到最优下一跳地址。
- 支持以组播方式发送更新报文,只有支持RIPv2的设备才能收到协议报文,减少资源消耗。
- 支持对协议报文进行验证,并提供明文验证和MD5验证两种方式,增强安全性。
网上的解释都比较简单,而且在书上也没有关于RIP v2的介绍。比如第一点,如何通过标志Tag对路由进行灵活控制,第二点中的掩码信息有什么用?出于时间方面的考虑,没有再进行过于深度的挖掘,各位小伙伴有兴趣可以去了解下。
问题3—为什么观察不到“坏消息传得慢”现象(已解决)
其实这个点一开始卡了我很久,也问了很多的同学,我发现好像大部分人其实都没有观察到书上说的这种递归收敛的现象,都是直接看到了一个崩溃路由的信息(就是 16 hops),但是很少有人去深入研究的,但是我觉得很古怪,就有这么一个猜想—RIP的内部优化,我觉得发明RIP协议的人肯定知道慢收敛的缺点,肯定会改进RIP协议,在实验中通过查资料、和同学讨论都很好地激发了我深入研究的兴趣。
在查阅的过程中,我了解到一个新的问题:“广播雪崩”。
例如,当许多路由器共享一个公共网络时,如果采用触发更新技术,一个广播就能改变这些路由器的路由表,从而引发新一轮的广播。如果第二轮改变了路由表,会引起更多的广播,这就产生了广播雪崩。
问题4—RIP还有缺点么,如果有,是什么(已解决)
根据 计算机网络(第七版)里关于RIP协议的描述,RIP协议的缺点有很多,比如最大距离为15,路由器之间交换的路由信息是路由器中的完整路由表,网络规模一大,开销就很大,最后就是慢收敛问题。
通过实验可以得知,慢收敛问题其实已经解决了。但是问题在于RIP协议为了解决慢收敛问题所提出的“最大距离”对策,限制了路由能传输的最大距离,再加上其传输的路由表是完整的路由信息,所以在大型的网络拓扑结构中,每个路由器都与几个甚至数十个路由器相连,每次传播的报文中都包含数十个路由信息,几百个报文同时在网络中传输,网络肯定吃不消。
参考文献
王福新,谷海红.路由协议RIP慢收敛问题及其对策[J].通信技术,2008(08):157-159.
(5条消息) 计算机网络基础(三):默认网关_wangdongm123的博客-CSDN博客_默认网关
(6条消息) 慢收敛问题以及解决方法_BABY LOVE的博客-CSDN博客_慢收敛
(6条消息) RIPV1和RIPV2的主要区别_仲瑿的博客-CSDN博客_ripv1和ripv2的区别
RIP协议(距离矢量路由协议)RIPv1——RIPv2_梓噯的博客-CSDN博客_rip距离矢量
[华为 | RIPv1与RIPv2对比实验 - 飞翔灬吾爱的Blog (fishyoung.com)](http://www.fishyoung.com/post-197.html#:~:text=RIP使用了基于距离矢量的贝尔曼-福特算法(Bellman-Ford)来计算到达目的网络的最佳路径。 最初的RIP协议开发时间较早,所以在带宽、配置和管理方面要求也较低,因此,RIP主要适合于规模较小的网络中。,RIP包括RIPv1和RIPv2两个版本。 RIPv1为有类别路由协议,不支持VLSM和CIDR。 RIPv2为无类别路由协议,支持VLSM,支持路由聚合与CIDR。)
思科路由器:学会看路由表信息,show ip route详解_健忘的老菜鸟的博客-CSDN博客_思科查看路由表
tml#:~:text=RIP使用了基于距离矢量的贝尔曼-福特算法(Bellman-Ford)来计算到达目的网络的最佳路径。 最初的RIP协议开发时间较早,所以在带宽、配置和管理方面要求也较低,因此,RIP主要适合于规模较小的网络中。,RIP包括RIPv1和RIPv2两个版本。 RIPv1为有类别路由协议,不支持VLSM和CIDR。 RIPv2为无类别路由协议,支持VLSM,支持路由聚合与CIDR。)思科路由器:学会看路由表信息,show ip route详解_健忘的老菜鸟的博客-CSDN博客_思科查看路由表