Q:RIP路由协议为什么以 Hop 作为度量值?
 
A: RIP协议以Hop为Metric在现在看来很不合时宜,但在该协议开发之初,链路带宽和现在有天壤之别,那时最好的调制解调器速度为300bit/s,最快的广域网链路也只有56kbit/s,以带宽为Metric意义并不大。
 
所以当时的考虑是,既然链路带宽都差劲,那么数据包的经过的路由器越少,就是意味着经过的链路越少,路径自然是最优的,所以就决定将Hop作为RIP协议的度量值。
 

Q: RIP路由协议为什么要设定15跳上限?
 
A: RIP开发之初,路由器内存少于640KB,处理器仅仅有kHz的水平,这就要求路由更新必须做到很小,不能占用广域网的全部链路带宽。所以工程师将RIP定位于“简单的路由协议”,16跳上限一方面是出于当时实际网络规模的考虑,另一方面是认为网络规模一大,路由更新承载过多的路由条目,势必增加协议本身的链路开销,就当时宝贵的带宽而言,权衡是必要的。
 
PS:个人感觉以Hop为度量值同样使RIP变得简单,大家都知道RIP用的是贝尔曼福特算法,其复杂度远不及SPF,这样在进行路由计算时更为节省CPU和内存,作为路由协议的核心,算法的小巧无疑是最为关键的。
 

Q: RIPv1发送的路由更新为什么不带子网掩码?
 
A: 很遗憾,这是RIPv1开发的历史性问题,那时候的路由器不能为每个子网存储更新信息,考虑到硬件的制约,RIPv1才会设计成这样。
 

Q: RIPv1为什么要在网络边界进行自动汇总,还不能关掉?
 
A: 关键原因就是RIPv1支持FLSM,但是发送的路由更新不带子网掩码。如果没有强制性的自动汇总的机制,那么接收方将感到无所适从,比如收到一条去往158.16.0.0的路由,没有掩码,那么这究竟是/16的主类网络,还是/17的子网,还是...有很多可能,也就没法放进路由表进行正常转发,所以强制性的自动汇总就RIPv1而言是必要的。
 

Q: RIPv1为什么不能支持不连续子网?
 
A: 关键在于RIPv1在主类网络边界会强制性的自动汇总。不连续子网本身就是由被其他主网络分割开来的同一个主网络组成的。在这种情况下,自动汇总必然会发生,当汇总后的路由到达接收方那里的时候,接收方会发现自己已经从其他接口学到更为明细的子网信息,就会将这个汇总路由丢弃,从此不连续子网之间不能互通。
 
解决办法:1)启用Secondary IP连接不连续子网 2)启用RIPv2
 
PS:对于RIPv2,EIGRP这样的无类路由协议,我们常说其对VLSM和CIDR的支持表现在可以关闭强制性的自动汇总。
 

Q:RIPv1为什么不支持VLSM ?
 
A:关键在于RIPv1不能在路由更新中携带掩码信息,所以就要有一种保证机制:
RIP路由器在发送路由条目之前会进行检查,如果条目中的网段和自己的发送端口的IP地址处于同一主类网络(如果不同会自动汇总后发出),就要用发送端口的子网掩码与其进行匹配,一致才能发出去,不一致就要丢弃。
 
虽然发出去的路由不带子网掩码,但在发之前还是要这么查一次,因为RIP认为既然自己只能支持FLSM,如果划分了子网的话,掩码肯定是一致的,基于这种认识,RIPv1不能处理同一区域内多于一种掩码的情况,也就意味着不支持VLSM。
 

Q:据说在子网划分的时候,0子网和1子网不可用 ?
 
A: 在以前运行有类路由协议的时代是这样的,现在都是无类路由,已经没有这种说法了。
 
无类路由协议在路由更新中携带子网掩码信息,而有类路由协议没有该信息,所以当收到一个路由条目,执行有类路由协议的路由器就不能区分该网段代表的是主类还是子网。
 
比如就分不清楚全0子网172.16.0.0和主类网络172.16.0.0,同样的也不能区分全1子网上的广播地址172.16.255.255和所有子网的广播地址172.16.255.255,但是配上子网掩码,问题就解决了,172.16.0.0/16这个主类网络和172.16.0.0/24这个全0子网很容易区别开,广播地址也是如此。
 

Q: RIP的几个计时器是如何定义的,特别是Holddown Timer?
 
Update Timer:RIP路由器每30s周期性的发送自己所知道的路由(要通告的那一刻,路由表中有什么就说什么,Possible Down的除外)
 
Invalid Timer:自收到更新那刻起,6个更新周期,即180s之内都没有再次收到该条目的路由更新(计时器都是针对具体条目的),视为超时,进入Holddown状态。
Holddown Timer:Holddown状态在Invalid之后进入,本身计时器长为180s,Holddown状态下对于该条路由条目的态度是“不收也不发,就干等着”。
 
Flush Timer: 与Invalid Timer同时开始计时,时间为240s,如果在该计时器超时前都没有收到路由更新,就会删除该条目,即“放下负担,奔向新生命”。
 
PS:Holddown Timer 并没有在RFC中定义,是Cisco自己的东东,更诡异的是:
 
Holddown Timer由于在Invalid Timer超时后才开始计时,过60s之后Flush Timer超时该条目就没了,所以表现为Holddown Timer 只有60s,而且基于Holddown状态下的特性,也就意味着,一个条目如果Invalid Timer超时,必然会被删除,因为随后的60s不收不发,对Flush Timer超时不会有任何阻碍,不知道思科是不是故意的...
 

Q: 为什么在应用被动接口时,RIP表现为只收不发,而EIGRP表现为不收也不发?
 
A: 被动接口的特性就是只收不发,只不过在EIGRP中接口“只收不发”会导致无法交换Hello,形成不了邻居,进而无法更新路由信息,最终表现为“不收也不发”。而RIP协议的路由信息交流是基于接口的,根本就不存在邻接机制,所以没有EIGRP的问题。
 

Q: RIP协议是否支持负载均衡?
 
A: 支持,RIPv1和v2最多可支持6条路径的负载均衡,默认为4条。
 

Q:RIP协议采用的防环路机制有哪些?
 
A: 1)失效计时器   为路由条目设置一个时间,如果超时了我都没有收到你的路由更新,我就认为你有问题,既然路由是你告诉我的,就得认为不可达,并告诉其他人。
 
   2)水平分割   我从这个接口收到的路由更新不会再从这个接口通告出去,以免环路。注意如果在接口上开启了水平分割,该接口不会通告汇总路由,不管是自动还是手动的。
 
   3)毒性逆转   水平分割的进化版,“坏消息总比没有消息好”,所以我从这个接口收到的路由更新会从这个接口再发回去,不过注明是不可达。
 
   4)计数到无穷大   产生环路的终止办法,无穷大即为不可达,不会再传播下去。这个在RIP中应用较多,16跳即为不可达。
 
   5)触发更新   一旦我的网络出现变化,不等待周期的更新发送,直接通告出去。这样可以缩短网络收敛的时间,同时减小环路的可能性。
 

Q: RIP协议是一个三层协议吗?
 
A: RIP协议并不是真正意义上的三层协议,因为涉及到了四层协议。RIP路由更新在二层进行校验后会进入IP栈,IP栈会将数据包交给UDP进程处理,UDP来检查RIP的520端口是否可用。大多数个人电脑和服务器不占用该端口,但是会丢弃包。但是在UNIX和Windows系统中,RIP有时可以作为TCP/IP服务的关键发现技术。
 

Q: RIPv2 较 RIPv1在哪些地方有所改进?
 
A:1)RIPv2为无类路由协议,支持VLSM和CIDR,路由更新中携带子网掩码
   2)支持手动汇总,可关闭自动汇总
   3)使用组播地址(224.0.0.9)定期发送更新
   4)支持明文认证和MD5地址,默认为明文认证
   5)支持路由标记,可以用来控制路由重发布
   6)增加了“下一跳”字段可以避免路由转发时不必要的跳步,即凭借自己的一步路由能力,来防止走冤枉路
 

Q:RIPv2的路由标记如何实现?
 
A: RIPv2报文中有2字节的路由标记字段,可以赋给每条RIP路由唯一的一个整数,在有路由重发布进RIP的时候,通过路由标记可以区分是内部的RIP路由信息还是外部的。
 
例如,某路由器的10条静态路由在RIP中重发布,标记为20。这些静态路由将以标记20作为外部路由被广播到RIP。如果另一些RIP路由也被重发布进OSPF,而OSPF只需要这10条静态路由,这时,OSPF只须简单的匹配标记信息而不用再使用重发布命令单列出这10条静态。另外,如果OSPF在一些路由器上把路由信息重发布回RIP,RIP就会拒绝标记为20的路由。因此,匹配标记也可以避免环路。
 

Q: RIP协议在NBMA网络上运行要注意什么问题?
 
A: 像RIP这样的距离矢量协议在NBMA网络上运行的时候会碰到水平分割引起的路由丢失。在Hub-Spoke拓扑中,Hub节点对应多条VC,但是从一个接口收到的路由不会再从这个接口发出去,这样Spoke节点就无法进行通信,解决办法可以用子接口,再就是在Hub节点接口上关闭水平分割。
 
RIP只在点到点子接口开启默认启用水平分割,在NBMA主接口,多点子接口上都关闭,所以如果RIP在这两种接口上只有一个邻居,应启用水平分割以免过多路由信息引起不必要的开销。