比谈恋爱还简单的动态路由协议 不会? 我教你啊~

【温馨提示】需要资料或者需要进群交流划到最底部

动态路由协议概述及RIP
为什么要有动态路由协议

在这里插入图片描述

路由器是依赖自己维护的路由表来进行数据转发的,而路由表又是由许多路由条目构成的,路由器要将数据转发到目的地就必须有路由。一台路由器可以从多种来源学习到路由条目:

直连路由
路由器在初始启动后,如果我们为其接口配置IP地址,并且接口的物理及协议的状态都为UP,则路由器能够自动地学习该接口的网络号,将这条直连路由装载进路由表,这其实很好理解,因为这是我“家门口”的网络嘛,无需干预,自动学习。

静态路由
直连网络能够自动学习,可是非直连网络可就无法自动学习了,那么一种最简单的方式,就是通过手工配置的方式为路由器创建静态的路由表项,这叫静态路由,静态路由由于其是静态手工配置,因此可管理性非常高,但是也有明显的缺陷,因为你要到一个目的地,就必须做一条静态路由的配置,那么如果网络特别庞大、设备数量特别多呢?工作量就相当大了,这是低效且不切实的;再者静态路由无法根据网络拓扑的变更做出动态的感知,因此当网络发生变化时,管理员可能不得不重新配置或调整静态路由。因此,我们迫切需要一种动态的机制,来帮助路由器更加灵活的维护路由信息。

动态路由协议的分类
根据作用的范围,路由协议可分为:
内部网关协议(Interior Gateway Protocol,简称IGP):在一个自治系统内部运行
外部网关协议(Exterior Gateway Protocol,简称EGP):运行于不同自治系统之间

在这里插入图片描述

所谓的AS自治系统指的就是,一个独立自治的、自我管理的路由选择域。

根据使用的算法,路由协议可分为:
距离矢量协议(Distance-Vector):包括RIP和BGP。其中,BGP也被称为路径矢量协议(Path-Vector)
链路状态协议(Link-State):包括OSPF和IS-IS
在这里插入图片描述

关于距离矢量路由协议
在这里插入图片描述

我们先初步认识一下距离矢量路由协议。
动态路由协议,大家可以理解为赋予了路由器一种“语言”交流能力。在静态路由环境下,路由器之间都互相不交流的,比较闷骚。但是一旦激活了动态路由协议,路由器之间就能够进行互相的通告和学习。

在上图中,初始情况下,R2是无法知道远程网络、R1的直连1.1.1.0/24的,在R1和R2激活了距离矢量的动态路由协议后,R1将自己家门口的路由1.1.1.0/24通告给R2,在通告路由的同时,还告诉R2你要前往1.1.1.0/24所需花费的“代价,或成本”,这样一来R2就能动态的从R1学习到这条路由并且装载进路由表。于是当R2要发送数据去往1.1.1.0/24的时候,就会将数据包丢给下一跳路由器、也就是路由的通告者R1。这就是所谓的距离矢量。最具代表性的距离矢量路由协议是RIP,RIP是一个有着悠久历史的路由协议,简单、小巧,但是也存在很大局限,这使得它几乎很少在现今的网络环境中被使用。但是经典毕竟是经典,从它入手,我们将更快速的理解动态路由协议。

使用距离矢量路由协议的路由器并不了解网络的拓扑。该路由器只知道:
自身与目的网络之间的距离,应该往哪个方向或使用哪个接口转发数据包
实际上,运行距离矢量路由协议的路由器,是将自己的整张路由表更新给直连的其他路由器,彼此之间都进行更新,而路由器也会从其他直连路由器收到他们发来的路由更新,于是就进行一系列的路由收发行为,最终的结果是,大家都心满意足的填充好了自己的路由表。
在这里插入图片描述

关于链路状态路由协议
在这里插入图片描述

距离矢量路由协议是直接将自己的路由表更新给直连路由器,并且路由器并不了解整个拓扑结构,这很容易在特定情况下产生诸如路由环路之类的问题(因此距离矢量路由协议定义了一系列防止环路的特性)。相比之下,链路状态路由协议则更新的不再是路由表或路由条目,而是对链路(接口)的描述等,通过链路状态信息的泛洪,路由器搜集这些链路状态信息并装载进链路状态数据库,随后运行特定的算法计算出一个无环的拓扑。因此运行链路状态路由协议的路由器是知晓网络的拓扑结构的。
链路状态路由协议应该说是目前业内IGP应用的主流,其中最具代表性的当属OSPF和ISIS。
RIP基础
1、RIP的更新过程

现在我们通过一个简单的环境,来看一下运行了RIP的路由器是如何交互路由信息的,并且网络中的路由器是如何完成路由信息的学习和收敛的。当然,这是一个微观的模拟过程,旨在帮助大家理解RIP的工作机制。
1)路由器初始启动
最初的网络发现:直连网络写入路由表,路由器能够自动学习直连路由并写入路由表,现在我们在所有路由器上都部署RIP。
在这里插入图片描述

2)初次交换路由信息
由于ABC都运行了RIP,因此他们都将自己的路由表通过广播(RIP版本1是广播发送,版本2是组播发送)的方式从所有激活了RIP的接口上更新出去。拿B来举例,它将自己的路由表更新出去,A和C都能够收到。A收到B传过来的路由表,它发现10.0.3.0路由自己没有,于是将这条路由学习过来,同时在为这条路由关联一个度量值:1跳,所谓1跳的意思是,A要到达10.0.3.0这个网络,需要经过B这个路由器,这是一跳,一跳就是一台三层设备,RIP通过跳数作为路由的度量值。
经过这一轮学习,A能学到10.0.3.0,C能学到10.0.2.0,而B能够学习到A和C传来的10.0.1.0及10.0.4.0。
在这里插入图片描述

3)路由收敛完成
接下去又是一轮更新,所有路由器将自己的路由表发送给直连邻居。A就能学习到B更新过来的10.0.4.0路由,跳数为2跳,因为它要到10.0.4.0需要经过BC两台路由器(实际上他并不知道要经过谁,RIP只是单纯的做个加法而已)。这样一来,所有的路由器,都拥有到达全网各个角落的路由了。我们把这个称为,路由收敛完成了。
在这里插入图片描述

路由器收敛完成的标志
当所有路由表包含相同网络可达性信息
网络(路由)进入一个稳态
路由器继续交换路由信息
当无新路由信息被更新时收敛结束
网络在达到收敛前无法完全正常工作

2、RIP概述
在这里插入图片描述

RIP(Routing Information Protocols,路由信息协议)是历史悠久的内部网关协议,适用于小型网络,是典型的距离矢量协议;
RIP基于UDP,端口520;
华为设备上路由优先级为100;

定期更新整张路由表;依照传闻;距离矢量路由协议并不了解网络拓扑;

V2在V1的基础上做了如下改进:
1.增加外部路由标记
2.增加VLSM支持
3.组播发送RIP消息:224.0.0.9
4.支持认证
5.增加下一跳字段
3、RIP的Metric(度量值)

RIP以跳数(Hops)作为度量值,虽然简单,但是事实上是不够科学的。如下图:
在这里插入图片描述

R5本地有个直连网络100.0/24,它通过RIP将这个网络更新出来。R2及R4都能学习到这条路由,并且跳数为1。而R1能通过R2学习到这条路由,跳数为2;同时R1又能从R3学习到R4传递过来的100.0/24路由,跳数为3,这样一来,R1将收到两条到达同一个网络100.0/24的两条RIP更新,它会去比较这两条路由的metric,结果发现,从R2来的路由,metric也就是跳数要更小,因此R1将R2更新过来的路由装载进路由表,并且将R2设置为去往该网段的下一跳。
很明显,这是不合理的,因为虽然R1从R3-R4-R5这段路径去往100.0/24经过的设备更多,但是链路却都是1G带宽,而从R2这一侧走,链路的带宽却非常的低。但是很遗憾,RIP并无法不关心带宽的问题,它只将跳数作为路由的度量值,这就是它的短板之一。
在路由表中,能够查看到RIP路由的跳数:
在这里插入图片描述

4、RIP的防环机制
我们先来看一下路由更新环路的现象:
在这里插入图片描述

上图汇总,假设ABC都运行了RIP,并且网络已经收敛完成。现在C路由器的直连网段10.0.4.0发生故障,C检测到故障后,将10.0.4.0路由从路由表中擦除。
在这里插入图片描述

这时候,更新周期到了,ABC路由器都将自己的路由表更新给直连邻居。那么C路由器会收到B更新过来的路由,其中也包括10.0.4.0,这时候C把10.0.4.0学习过来并且装载进了路由表,同时关联metric为2跳(因为路由是从B学习过来的,而B自己是1跳)。
在这里插入图片描述

10.0.4.0路由继续在网络中随着更新周期的到来不断的被更新来更新去,然而事实上,10.0.4.0网络早就不存在了,这时候如果网络中有任何一个地方发送数据到10.0.4.0网络,这个数据将在网络中不断的打转,直到TTL递减为0。这就是环路。
环路是一个危害非常大的问题,一个健壮的路由协议应该有充分的机制去规避环路的问题,RIP也有相应的一系列机制来防止网络中出现环路。
定义最大度量以防止计数至无穷大
水平分割
路由中毒
毒性逆转
抑制计时器
触发更新

定义最大度量以防止计数至无穷大
在上文的例子中,10.0.4.0路由被RIP在网络中传来传去,跳数不断的累加。RIP定义了一个最大跳数,15跳,当一条路由跳数为16跳时,这条路由被视为不可达,因此这就避免了路由被无休止的传递。当然,这事实上是个笨方法,因为它在规避环路的同时,也限制了RIP适用的网络规模,如果我的网络当真有15台以上的路由器串起来呢,这时候RIP就搞不定了。

水平分割规则
水平分割规则是距离矢量路由协议一个特点非常鲜明的机制。
在这里插入图片描述

当一台路由器,从一个接口收到一条路由更新,这台路由器将不再把这条路由从该接口再更新回去,这就是水平分割规则,RIP的环路避免很大程度上依赖于该规则。
毒性路由
在这里插入图片描述

另一个避免环路的机制是,路由中毒机制,上图中,C路由器一旦发现10.0.4.0的直连网络发生故障,它将立即发送一个路由更新,该更新包含10.0.4.0路由同时将跳数设置为16跳,这样其他路由器将接收这个路由更新并将故障路由从路由表中擦去。

毒性逆转
在这里插入图片描述

毒性逆转(Poison Reverse)的原理是,RIP从某个接口学到路由后,将该路由的开销设置为16(即指明该路由不可达),并从原接口发回邻居路由器。利用这种方式,可以清除对方路由表中的无用路由。毒性逆转可以防止产生路由环路的发生。
在上图中,如果C的10.0.4.0网络挂掉了,而B不再从C收到4.0的路由更新,它就有可能向C通告4.0的路由(暂不考虑水平分割规则),这样一来C就有可能将B作为4.0网络的下一跳,这就形成了环路。在B上开启了毒性逆转后,B从GE0/0/1口收到的RIP路由,它也会将路由从该接口更新回去,只不过跳数被设置成了16,这样C将不会使用这些路由。
同时配置水平分割和毒性逆转的话,只有毒性逆转生效。
5、RIP的配置
1.配置命令

启动RIP进程,并进入RIP配置视图
[Router] rip 1
在指定网段使能RIP(RIP只支持classful网络宣告)
[Router-rip-1] network 192.168.12.0
事实上这条命令将产生两个效果:1是network的这个接口将激活RIP,开始发送和侦听RIP消息;2是network的这个接口所在的网段会被
引入RIP并被RIP通告出去。
指定RIP的版本(默认为版本1)
[Router-rip-1] version 2

2.配置示例在这里插入图片描述

R1的配置如下:
#完成接口IP的配置:
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 192.168.12.1 24
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ip address 192.168.1.254 24
#在R1的GE0/0/0及GE0/0/1口上激活RIPv2:
[R1] rip 1
[R1-rip-1] version 2 #指定RIP的版本为版本2
[R1-rip-1] network 192.168.12.0 #在GE0/0/0口上激活RIP
[R1-rip-1] network 192.168.1.0 #在GE0/0/1口上激活RIP
R2的配置如下:
#完成接口IP的配置:
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 192.168.12.2 24
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ip address 192.168.23.2 24
#在R2的GE0/0/0及GE0/0/1口上激活RIPv2:
[R2] rip 1
[R2-rip-1] version 2
[R2-rip-1] network 192.168.12.0
[R2-rip-1] network 192.168.23.0
R3的配置如下:
#完成接口IP的配置
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ip address 192.168.23.3 24
[R3] interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] ip address 192.168.2.254 24
#在R3的GE0/0/0及GE0/0/1口上激活RIPv2
[R3] rip 1
[R3-rip-1] version 2
[R3-rip-1] network 192.168.2.0
[R3-rip-1] network 192.168.23.0
完成上述配置后,我们来查看及验证,首先查看R1的IP路由表:
[R1] display ip routing-table
Route Flags: R - relay, D - download to fib

Routing Tables: Public
Destinations : 12 Routes : 12
Destination/Mask Proto PreCostFlags NextHop Interface
192.168.1.0/24 Direct 0 0 D 192.168.1.254 GigabitEthernet0/0/1
192.168.1.254/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
192.168.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
192.168.2.0/24 RIP100 2 D 192.168.12.2 GigabitEthernet0/0/0
192.168.12.0/24 Direct 0 0 D 192.168.12.1 GigabitEthernet0/0/0
192.168.12.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
192.168.12.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
192.168.23.0/24 RIP 100 1 D 192.168.12.2 GigabitEthernet0/0/0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
……
从上面的输出,我们可以看到R1已经通过RIP学习到了两条路由,分别是192.168.2.0/24及192.168.23.0/24。当然为了使得PC1与PC2要能够正常通信,沿途的所有路由器都要有完整的路由表项,因此我们还需要检查检查R2及R3的路由表,重点看RIP路由:
[R2] display ip routing-table protocol rip
Route Flags: R - relay, D - download to fib

Public routing table : RIP
Destinations : 2 Routes : 2
RIP routing table status :
Destinations : 2 Routes : 2
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.1.0/24 RIP 100 1 D 192.168.12.1 GigabitEthernet0/0/0
192.168.2.0/24 RIP 100 1 D 192.168.23.3 GigabitEthernet0/0/1
R2也通过RIP学习到了两条路由,分别是192.168.1.0/24及192.168.2.0/24。 同理查看R3的路由表,确保R3能够学习到192.168.1.0/24的路由。如此一来,全网的路由就打通了,那么现在PC1与PC2是能够互相通信的。
当然我还有很多整理好的资料文档和视频文件,点击这里获得更多资料文档 往期教学视频,主要也是想给新手小白少走点弯路。

猜你喜欢

转载自blog.csdn.net/ZYJY2020/article/details/113643733
今日推荐