路由信息协议RIP是互联网中最早使用的协议,他是基于距离向量的。
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络距离的记录,这是一组距离,称为“距离向量D-V”。
RIP使用跳数作为度量来衡量到目的网络的距离。
如果是直连网络,那么距离就等于1。
如果是非直连网络,那么每经过一个路由器距离就加1。
RIP协议中一条路径最多只能包含15个路由器,距离等于16时就相当于不可达。所以,RIP协议只适合用于小型网络。
也就是说距离最小为1,最大为15。
比如:
图中对于R1路由器,要到达目的网络192.168.1.0/24和目的网络10.0.0.0/30,因为都是直连网络,所以距离都等于1;要到达目的网络10.0.1.0/30,因为是非直连网络,中间经过路由器R2,所以在1的基础上加1,所以距离为2,同样地,到达目的地网络192.168.2.0/24的距离为3。
注意:有些路由器的RIP将路由器到直连网络的距离定为0。
RIP认为到达目的网络的路径中通过的路由器数量最少的路径最好,即距离最小。
如果到达同一目的网络有多条距离相等的路由时,就会进行等价负载均衡,即将通信量均衡地分布到多条等价的路由上。
RIP协议的三个要点是和谁交换信息,交换什么信息以及何时交换信息。
和谁交换信息:RIP协议中,仅和相邻的路由器交换信息。
例如上图中,路由器R1和R2会交换信息,同时R2还会和R3交换信息,但是R1和R3不是相邻路由器,所以不会交换信息。
交换什么信息:交换自己的路由表。
何时交换信息:周期性交换信息(如:每隔30秒发送一次RIP更新报文)。
综上所述,RIP协议中仅相邻的路由器周期性交换并更新自己的路由表。
我们之前有提到过,在路由器刚开始工作时只知道与自己直连的网络,所以路由器只知道自己到直连网络的距离为1。
图中,对于路由器R1,路由器R2和路由器R3都为它的相邻路由器;
对于路由器R2,路由器R1和路由器R3和路由器R4都为它的相邻路由器;
对于路由器R3,路由器R1和路由器R2和路由器R4都为它的相邻路由器;
对于路由器R4,路由器R2和路由器R3都为它的相邻路由器。
根据RIP协议的要点可以得出,每个路由器会若干次交换并更新自己的路由信息。
在若干次交换和更新后,每个路由器都可以知道在本AS内到达各网络的最短距离和下一跳地址。这就是收敛。
前面提到路由器会交换并更新自己的路由信息,那么具体是怎么交换和更新的?
A、B各自的路由表如图,假设现在路由器A的RIP更新报文的发送周期到了,则路由器A将自己路由表的信息封装到更新报文中发送给路由器B。
图中我们故意将A的路由表的下一跳全部写为问号,这是因为A将自己的路由表信息给B时会将表中的下一跳都改为A,也就是说B无需关心A路由表里的这些内容。
B接收到的A的路由表如图:其中距离在原有基础上都加1,因为这个过程相当于通过了路由器A,下一跳统一变为A。
随后B根据收到的改造后的A的路由表(后面简称为A路由表,但要注意这是改造后的A路由表)更新自己的信息。如图:
首先我们可以看到在B的路由表里面没有关于到达N1网络的条目,现在发现可以通过路由器A到达N1网络,于是将该条目加进去。这条规则叫“发现新的网络直接添加” 。
其次,我们在B的路由表的下一跳里面发现了有关于A的下一跳,即到达N7网络的条目,距离为6。在传来的A的路由表里面也有关于N7的条目,但是距离变为了7,于是将R2的路由表中的该条目的距离改为7。这条规则叫“到达目的网络,相同的下一跳,更新为最新信息” 。
现在A的路由条目还剩N3、N5、N9三条,很明显可以看到在B的路由表里里面,它们的下一跳都不是A。首先关于N3的条目,可以看到N3条目在B的路由表里面的距离为9,但是在A的路由表里面距离为6;在工作原理部分,我们有说RIP协议认为好的路由就是到达同一个目的网络通过的路由器数量最少的路径,所以应该把B路由表里的N3条目距离更新为6,且下一跳更新为A。这条规则叫“到达目的网络,不同的下一跳,新路由有优势,更新” 。
N5条目在两个路由表里虽然下一跳不同,但是距离都为5,在基本原理部分有提到过,有到达同一目的网络多条距离相等的路由时进行等价负载均衡。于是将A中关于N5网络的条目直接添加到B中。这条规则叫“到达目的网络,不同的下一跳,等价负载均衡” 。
最后,N9条目在A路由表里面的距离为6,但是在B路由表里面为5,秉持着好的路由原则,B路由表关于该条目的信息不发生变化。这条规则叫“到达目的网络,不同的下一跳,新路由有劣势,不更新” 。于是,最终的B更新后的路由表就如图所示:
总结:RIP协议中,一个路由器A给相邻的路由器B发送装有自己路由表信息的RIP更新报文,路由器B会接受到改造后的路由表A,即距离全部加1,并且下一跳全部变为A。
更新可以先从到达的目的网络入手,如果发现新网络直接进行添加;如果是B表中已有的网络,则从下一跳入手,下一跳相同就进行更新;下一跳不同就从距离入手,谁距离短就用谁,距离一样就进行添加。