本身研究RIP的意义不大,因为现在基本不用RIP,但是理解RIP之后,对理解OSPF,BGP有很大的帮助
Routing information Protocol,路由信息协议,是第一代动态路由协议;所属距离矢量协议,基于跳数来进行路径选择(最多支持15跳)。RIP协议有多个版本,分为v1/v2/ng版。也是真正意义上的第一个路由协议
The figure shows a network. The arrows highlight the path RIP selects. RIP selects the best path based on shortest hop count so it ignores the path with the faster T1 links.
Be sure that you do not disparage RIP. It was developed in a homogeneous network. If everything is connected via a single media type, then bandwidth-based metrics reduce to hop count. In some cases RIP is more appropriate than other protocols. It is extremely well tested.
OSI层次:应用层协议,基于UDP端口520
算法特征:距离矢量协议
有类无类:v1为有类、v2为无类
运行范围:IGP
最佳路径:管理距离120、度量值:跳数(路由器的个数)
讲道理是需要掩码的,然而RIPv1的历史太久了,在RIPv1研发出来的年代,掩码的概念还没有
为什么一条network命令无论多么遥远,两台路由器都可以沟通?
定义:RIP回复分组,用于更新/发送本地路由信息
特征:周期更新(25.5-30s)、广播更新(255.255.255.255)、不可靠更新(UDP)
原理:
回复包里面有着大量的路由信息,他们之间互相通告,使链路信息周期性更新
观察发送的回复包,都是广播包,周期性发送(25s~30s),理论上是30s,然而实际上这么做就是为了避免在30s这个时间段出现峰值,导致网络瘫痪。这么做可以减少网络压力
定义:RIP请求分组,用于初始化时向路由器邻居请求路由条目(即在初始化阶段才会出现)
很特殊的一个单播包,当一个设备启动了这个协议,就把自己的信息发送出来,不用等待30s,就可以在局域网中发布自己的信息。可以更快的同步路由信息,使链路收敛
更新计时器 30s 用于实现对路由条目的周期交互
失效计时器 180s 若路由条目180s内没有收到更新,则失效
抑制计时器 180s 用于防环(这个是理论值比较难验证)
刷新计时器 240s 直接从路由表移除,“死透”
设备出故障的时候需要4min左右才能被知情,这个有些滞后,所以才说坏消息传播的慢
通过路由器的debug命令查看计时器的工作状态
(这个时候我暂停R3的运行,再观察R1的反馈)
首先,我们看到的信息都是RIP更新包,30s一个周期,这个是更新计时器在工作的结果,之后要观察紫色圈圈里面关于R3路由信息的更新时间(由于失效的时候没有信息返回,我们可以通过shou ip route rip来验证)
在240s的时候”死透“所以显示不可达
比较一个现象,刚才的实验是用了4min才能知情R3出故障,那么这种情况呢?在将lookback接口关闭
这里是立即响应的,到底有什么区别呢?
答案:这里就是涉及触发更新/中毒路由的概念
当路由协议检测到网络拓扑发生变动时,不再需要基于计时器进行路由处理,直接发送故障/变动信息进行表项处理,此过程称为触发更新。
中毒路由:
将R3的lookback口关闭
很快的就能收到中毒信息,这个于RIP所说的等待8min不符,我这里我认为是由于这是IOS所具有的解决方案所致
路由分组是路由器的血液,路由算法则是路由器的灵魂,路由算法可以根据路径参数(度量值)生成路由条目。
Bellman算法(贝尔曼):
1. 如果收到邻居给的路由,若本地没有,则接收;
2. 如果收到邻居给的路由,若本地有,根据度量值对比,若优则录入,若劣质则丢弃;
3. 如果收到邻居给的路由,若劣质,但是还是从原有的邻居学到的,也录入。
协议在网络稳定的时候,啥事都没有。网络动荡的时候,问题就来了,由于RIPv1本身算法的问题,会出现环路。之后开发的路由协议是绝对无环的。
环路的最大特征就是路由互指(两台路由器互相踢皮球)
一共5步形成环路:这个过程中R1、R3正常运行RIP协议,每30s发送一次更新包
1. R3将C2的信息发送给R1(即发送R2路由表中的所有信息“A=1”)
2. R1记录了A的位置(即A在R3的下一跳,“R3 A=1”)
3. 重点此时网络动荡(即R3的接口showdown)
4. R1仍然发送的更新包,然而R3没有回复,R1认为R3不在下一跳信息内,记录为R3 A=2
5. R1重复发送更新包,一直到度量值为16(这个过程为7.5min,即15*30s)
The split horizon technique attempts to eliminate routing loops and speed up convergence. The rule of split horizon is that it is never useful to send information about a route back in the direction from which the original packet came. In the example:
Router C originally announced a route to network 10.4.0.0 to router B. It makes no sense for router B to announce to router C that router B has access to network 10.4.0.0 through router C.
Given that router B passed the announcement of its route to network 10.4.0.0 to router A, it makes no sense for router A to announce its distance from network 10.4.0.0 to router B.
Because router B has no alternative path to network 10.4.0.0, router B concludes that network 10.4.0.0 is inaccessible.
In its basic form, the split horizon technique simply omits from the message any information about destinations routed on the link. This strategy relies either on routes never being announced or on old announcements fading away through a timeout mechanism.
Split horizon also improves performance by eliminating unnecessary routing updates. Under normal circumstances, sending routing information back to the source of the information is unnecessary.
定义:若RIP的路由条目跳数达到16跳,则此路由失效并且被丢弃。
原理:(RIP只能支持直径为16跳的网络,最大有效为15跳)
路由器将路由信息的跳数标记为无限大
定义:若RIP的路由条目发生故障时,会将此路由标记为16跳,并发送给邻居,告知邻居此路由有问题,尽快删除。
Route poisoning closes the potential for longer routing loops. Fast convergence minimizes the chance for a routing loop to occur, but even the smallest interval leaves the possibility open. With a poison route in place, router B can maintain a steadfast entry that network 10.4.0.0 is indeed down.
定义:若RIP的路由条目发送故障时,会将此路由标记为16跳,并发送给邻居,邻居会返回16跳的中毒路由,实现确认。
Poison reverse overrides the split horizon solution.
定义:当收到故障路由之后,默认会直接删除本故障路由;若此时从远方又收到此路由,则有可能造成再一次的环路;为了解决这个问题,设置抑制计时器,当收到故障路由之后,保持180s之后再删除路由条目。
v2是组播更新,支持无类子网,带掩码,是组播更新(224.0.0.9),v1是广播更新(255.255.255.255)
关于自动汇总,这个是历史的遗留功能,虽然不再使用了,但是仍然没有去除,只能自己手工关闭
注意这种写法,跟创建lookback3、lookback4、lookback5之后给予地址172.16.1.1、172.16.2.1、172.16.3.1是一个意思,只是简洁了一些
相当于只保留一个主类网络。之后检查在R2、R3有没有收到路由更新
这里发现我们仅仅是在R1写了四条新路由,通告之后,在R2和R3则相应的出现了8条路由信息(2接口*4网络地址)。可以想象当路由信息过多,接口数量增加的时候,路由表会相应的指数型增长。
为了给路由表减压,我们需要理解一个概念——路由汇总(这个是对路径调优)
这里要注意到两条命令no auto-summary
和ip summary-address
一个是在部署ripv2时写的。因为auto-summary
会自动汇总主网络号路由,很容易出现环路,所以需要关闭。而ip summary-address
这个是手动汇总,是在项目开始之前,就已经规划好的,我们手写进去的(当然咯,之后编程能力强的话,直接用脚本也行,但本质上仍然是手写进去的)。