1.根据工作范围:
IGP—AS内,EGP----AS之间
2.根据更新信息是否带有子网掩码
带有子网掩码—无类路由协议
没有子网掩码—有类路由协议
3.根据更新信息是路由信息还是LS信息
路由信息—距离矢量路由协议(BGP是特殊的路径矢量路由协议)
链路信息—链路状态路由协议
RIP是Routing Information Protocol(路由信息协议)的简称。是作为网络发展初期最经典的路由协议之一。
RIP是一种基于距离矢量(Distance-Vector)算法、简单的内部网关协议。使用跳数作为到达目标网络的距离,直连的网络跳数为0,然后每经过一个三层设备增加1,也就是度量值不等于从本网络到达目的网段数,而是等于经过过的三层设备的数量(华为设备发送出直连条目为metric为1,当对方收到就不用增加了,而思科设备是发送时不增加,是在接收时增加)。
RIP中优先选择跳数小的路由做为最优路由,16跳路由表示不可达,也称为毒化路由,设备从之前收到对应路由的接口再次收到此路由,并且为16跳,便将本端对应路由从路由表中取消掉。
RIP分为版本1和版本2,版本1为有类路由协议,版本2为无类路由协议。
RIP主要应用于规模较小的、可靠性要求较低的网络。对于环境复杂的大型网络,一般不使用RIP协议。
RIP的四个定时器:
1.更新计时器(Update timer )—30s:
在RIP启动之后,平均每30秒(实际上为25.5~30秒间的随机数时间,之所以这样也是为了错峰发送更新,以防止所有路由器同时发送路由更新造成太大流量) 启用了RIP的接口会发送自己的除了被水平分割(split horizon)抑制的路由选择表的完整副本给所有相邻路由器。
2.失效计时器(invalid timer )—180s:
如果 180 秒(默认值)后还未收到可刷新现有路由的更新,则将该路由的度量设置为 16,路由表项将被标记为“x.x.x.x is possibly down”。在清除计时器超时以前,该路由仍将保留在路由表中,可以转发路由。
3.刷新计时器( flush timer )—华为默认300s/思科为240s:
从收到一条路由开始计时,当清除计时器超时后,该路由将从路由表中删除。
4.抑制计时器(holddown timer )—180s:
思科私有。该计时器用于稳定路由信息,并有助于在拓扑结构根据新信息收敛的过程中防止路由环路和震荡。在某条路由被标记为不可达后,它处于抑制状态的时间必须足够长,以便拓扑结构中所有路由器能在此期间获知该不可达网络,并且减少。默认情况下,抑制计时器设置为180秒。
定时器具体解析:
1、一台路由器从接收到邻居发来的路由更新包开始,计时器会重置为0s (秒)并重新计时。(RIP路由器总是每隔30s通过UDP 520端口以RIP广播或组播应答方式向邻居路由器发送一个路由更新包)
2、如果路由器30s还未收到邻居发过来的路由更新包,则更新计时器超时。如果再过150s,达到180s(即30s + 150s = 180s)还没收到路由更新包,失效计时器超时。然后路由器将邻居路由器的相应路由条目标记为Possibly down,路由不可用,仅保留在RIP数据库中,并且向网络中发送16跳的毒化路由。
3、 要触发抑制计时器必须具备两个条件:1.失效计时器超时;2.立即从其它接口收到相同的路由信息。条件满足,设备会立马将对应条目进入180s的抑制计时器。即使再收到路由度量值小于16的对应路由更新,也不接受。当抑制定时器超时后,就重新允许接受对方发送的路由更新报文。并且在一致时间内周期发送被抑制的路由条目,metric为16。
如果收到了metric为16的RIP毒化(取消)路由,是不会进入抑制状态的,而是本端对应的路由直接被毒化为16跳,从路由表中消失。
抑制计时器图解说明:
例如R1的回环口的路由信息发给了R2和R3,但是R1和R2之间链路出拥塞,R2 180s没有接收对应的路由条目,路由被置为16,这时R3发送路由信息给R2,R2发现比16跳好就接收了,计算路由从流量通过R3到R1的回环口,但是不巧的是R1发给R2的信息正再这时候又到了,这样马上又切回到通过原来的接口去往R1,造成了路由的震荡。
如果有抑制计时器开启,R2 180s没有收到对应接口的路由,路由状态变为了possibly down,并且从R3处收到了相同的条目,符合抑制计时器的触发。于是把对应的条目设置为抑制状态,在新的180s内,不管收到对应的路由条目metric有大。在抑制计时器超时前都会忽略。
注意:华为设备默认没有使用抑制计时器,而是是通过另外一个机制-----保持定时器法(了解即可)。“保持定时器法”是设置路由信息被抑制的时间,缺省为180s。当路由器接收到一个不可达的路由更新时,路由器会把这条路由更新置于无效抑制状态,不再接收对应路由的更新信息,也不向外发送这这条路由更新信息,一直持续到收到一个带有更好度量的对应路由更新,或者这个保持计时器到期为止。
4、失效计时器超时后,再过120s(华为设备)/60s(思科设备),达到300s(180s + 120s = 300s)或者240s的刷新计时器时间,还没收到路由更新包。路由器就刷新路由表,把不可达的路由条目删掉。
RIP状态图解:
1.初始状态:路由器开启RIP进程,宣告相应接口,则设备就会从相关接口发送和接收RIP报文。
2.构建路由表:路由器依据收到的RIP报文构建自己的路由表项。
3.维护路由表:路由器每隔30秒发送更新报文,同时接收相邻路由器发送的更新报文以维护路由表项。
4.老化路由表项:路由器为将自己构建的路由表项启动180秒的定时器。180秒内,如果路由器收到更新报文,则重置自己的更新定时器和老化定时器。
5.垃圾收集表项:如果180秒过后,路由器没有收到相应路由表项的更新,则启动时长为120秒的垃圾收集定时器,同时将该路由表项的度量置为16。
6.删除路由表项:如果120秒之后,路由器仍然没有收到相应路由表项的更新,则路由器将该表项删除。
1.RIPv1的协议报文中没有携带掩码信息,所以RIPv1在发送和接收路由更新时会根据主类网段掩码和接口地址掩码来处理路由条目。因此RIPv1无法支持手动路由聚合,只能自动在主类边缘进行汇总,也不支持不连续子网,会导致冲突。
2.广播更新。
3.基于UDP,端口号为520。
4.RIPv1的协议报文中没有验证字段,所以RIPv1也不支持验证。
RIP报文通过UDP 520端口传输,分为如下两个报文:
request报文:RIP进程启动、接口加入RIP或RIP接口重置时发送此报文,向对端请求路由更新,并不携带无路由信息
response报文:周期发送,或者收到对端request报文后发送,携带有具体路由信息,不带掩码
具体字段:
命令字段:
1、2表示请求和应答全部或部分路由表。3、4废弃不用。5、6非正式的命令,轮询或轮询表项。1表示request报文,当设备刚刚启动rip时发送此报文向其他相连的路由器请求路由表。2表示response报文,设备收到request报文或者每隔30s会将自己的所有的路由条目发送给对方,并且request报文不会刷新response报文的时间。
版本字段:
1或2,表示区别是版本1还是版本2。
必须为0(Must be zero)字段:
RIPv1中分为两个部分,第一个部分16bit在RIP报文的头部中。第二部分的32bit在RIP报文的路由表项中。
地址系列:
IP地址为2,表示IPV4报文。
度量:
以跳数为度量值。最大为15。16表示不可达。
报文的最大容量:
最大携带25条路由。20*25+4=504,保证了小于512字节(因为是通过UDP传输的,UDP报文加上头部最多允许512字节的数据,而UDP报文头部刚刚8字节,RIP报文有25条路由条目时刚刚为512字节)。
特殊报文:
地址系列字段为0,度量值为16,表示请求另一端完整路由表的request报文。
路由信息:
每条20字节。最多25条。
RIPv1属于有类路由协议,需要遵循如下步骤完成路由发送:
发送规则:
发送路由更新时,要判断该条目和出接口的主类号是否相同(如果IP地址的子网掩码小于主类,是无法通过RIPv1发送出去的,RIPv2可以发送,因为带有掩码)
• 不同:汇总成主类后再发出去,即主类边界自动汇总
• 相同:即非主类边界,检查要发送的路由是否为32位掩码
接收规则:
接收路由更新时,会判断条目是否为主类路由
• 是:即赋予主类掩码配对加表
• 不是:使用该接口掩码与收到的路由前缀做“与”运算,然后检查该网络前缀是网段地址还是主机地址(即主机位是否全零)
实验:1 通过本实验可以通过双方发出的条目来证明RIP的发送和接收的机制
在R1上配置:
interface GigabitEthernet0/0/0
ip address 172.168.12.1 255.255.255.0
interface LoopBack0
ip address 1.1.1.1 255.255.255.0
rip 1
version 1
network 172.16.0.0 //通告相应的主类地址
network 1.0.0.0 //通告相应的主类地址
在R2上配置:
interface GigabitEthernet0/0/0
ip address 172.16.12.2 255.255.255.0
interface LoopBack0
ip address 2.2.2.2 255.255.255.0
interface LoopBack1
ip address 172.16.2.2 255.255.255.0
interface LoopBack2
ip address 172.16.22.22 255.255.255.0
interface LoopBack3
ip address 172.16.3.3 255.255.255.255
rip 1
version 1
network 2.0.0.0
network 172.16.0.0
检验步骤:
1.配置完成后我我们进行分析,首先分析R1发送给R2的路由条目:
R1发送给R2的是一条路由:1.1.1.1。首先判断主类号与发送的接口是否相同,发现不同以后,直接发送主类路由也就是1.0.0.0给对方。
抓包结果与分析结果吻合:
2.分析R2接收的情况,对于1.0.0.0的报文,发现是主类报文,直接将这个条目作为主类1.0.0.0/8的路由条目加入表中。在R2上查看路由条目:与分析相同
3.分析R2发送路由的情况,R2上有5条RIP条目,分别是(172.16.2.0/24、172.16.22.0/24、2.2.2.2/24、172.16.3.3/32)。接下来依次进行分析:
对于172.16.2.0和172.16.22.0这两条的路由条目:首先发送时发现主类和接口相同,然后会查看是否为32位,发现并不是,这时就用自己的接口的掩码去匹配,发现掩码一致,便发送172.16.2.0、172.16.22.0给R1。
对于172.16.3.3/32的路由条目:首先发现与接口的主类号不同,但是发现为32位,就会直接从接口发出172.16.3.3,路由条目与分析的相同。
对于2.2.2.2的路由条目:首先判断主类号与发送的接口是否相同,发现不同以后,直接发送主类路由也就是2.0.0.0给对方
4.分析R1接收的路由条目,首先接收到172.16.2.0、172.16.22.0路由条目时,发现不是主类路由,就用自己接口的掩码(24)去匹配,发现主机位为0,便使用接受接口的掩码作为路由掩码,并将路由条目加入路由表中。对172.16.3.3的条目,首先发现不是主类路由,继续用自己的掩码去匹配,发现主机位不为0,那么直接打上32位的子网掩码加入路由表。对于2.0.0.0的报文,发现是主类报文,直接将这个条目作为主类2.0.0.0/8的路由条目加入表中。
1.无类别路由协议。
2.组播更新,组播地址224.0.0.9,减少了资源的消耗。
3.基于UDP,端口号为520。
4.支持外部路由Tag,可以在路由策略中根据Tag对路由进行灵活的控制例如防止环路。实际上不同RIP进程间相互引入路由也可以使用Tag; 支持路由聚合和CIDR;支持指定下一跳,在广播网上可以选择到目的网段最优下一跳地址;支持认证,增加了安全性。
5.支持手动汇总,自动汇总默认是开启的,但是因为水平分割和毒性反转不起作用,可以使用always参数强行开启汇总。
同样是UDP 520端口传输,两种报文:
request报文:
response报文:报文中携带了掩码,报文接收发送规则按照正常的无类路由的方式即可
具体字段: 与v1不同的地方报文字段如下,其他字段和RIPv1相同
路由域:
RIP选路守护进程的标注。可以实现为多个RIP实例。
路由标记:
用于支持外部网管协议。携带一个EGP、BGP的自治系统号。
子网掩码:
RIPv2带有掩码,所以为无类路由协议。
下一跳地址:
表示比通告路由器地址更好的下一跳地址。如果该字段为0.0.0.0,则说明通告路由器地址为最优下一跳地址。在多于两台设备组建的广播网络环境中,Next Hop字段会发生变化,从而使路径最优。
认证机制:
当RIPv2配置认证时,RIPv2会对报文第一条Route Entries进行修改。具体修改如下:
Address Family Identifier字段改为0XFFFF。
Route Tag字段改为Authentication Type字段。
IP Address、Subnet Mask、Next Hop和Metric会变为口令字段。如果使用明文认证是能在报文中看到密码的,如果使用的是明文认证是能够在报文中看到密码的,如果使用的是MD5认证,后面的IP地址、子网掩码等信息由HASH值代替,无法看到。
如果没有开启ripv2的认证功能,一个RIP报文可以带有最多25条路由信息,但是如果开启了认证功能,那么在每个RIP报文中需要占用一个路由信息的位置在填写认证的字段,所以最多可以发送24条路由信息。
不连续子网问题:
不连续子网,如下图所示,10.1.2.0/24和10.1.1.0/24是一个主类网络10.0.0.0/8中的子网,但是他们之间有192.168.1.0的网段,导致两个子网不连续。
在RIPv1里面,按照之前提到的有类路由的规则,R2学习到10.1.1.0和10.1.2.0的路由都将为10.0.0.0/8,做负载分担。如果10.1.1.0/24网段发送信息到R2,R2回复时匹配路由表,由于默认是基于流的负载分担,所有流量仅有百分之50的概率会发给R1到达目的地;另外百分之50的概率则会发送到R3,引起故障。
在RIPv2中,在不连续子网的情况下,由于报文中携带了掩码,R2学习到的是两条不一样的路由条目10.1.1.0/24和10.1.2.0/24,不存在流量负载分担的问题。
分为两种:
RIP的更新规则:
补充:在接口下可以修改RIP为版本1,版本2的默认,版本2的组播或者广播模式,并且优先级比全局高。在全局下只能配置RIPv1和普通版本的RIPv2。
实验:
首先将R1配置成RIPv1,R2采用默认的rip,R3配置为RIPv2,并且通告各个相连的接口。现在分析各个路由器的路由表,首先分析R2,R2作为中间的RIP路由器,并且是兼容模式,就是可以搜到所有报文,所以R2上肯定有R1和R3上回环口的路由条目,在R2上进行查看:
既然都收到了对方的路由条目,那么就可以将R1的路由条目和R3的路由条目互传了,我们先分析R1,R1是RIPv1,只接收RIPv1的广播报文,R2作为兼容版本发出的正是RIPv1的报文,这样的话R1应该会有R2和R3的路由条目的,如下图,确实收到了:
那么继续分析R3,R3因为是RIPv2的默认模式,只收RIPv2的组播报文或者广播报文,所以应该无法从R2获取相应的路由条目:
路由表中并没有发现其获取相应的路由条目,现在我们将RIPv2设置为广播模式,广播模式可以在指定接口上配置,单独的接口发生相应的变化(其他未配置的接口不会发生变化)。在R3接口上配置:
[R3-GigabitEthernet0/0/0]rip version 2 broadcast
再查看路由表项,重新获取了路由条目,说明分析正确
1.水平分割(默认开启)
水平分割的作用:RIP采用水平分割不但减少了带宽消耗,还可以防止路由环路。
实现:
特殊情况:在NMBA网络中,水平分割缺省是禁用的,由于一个接口上连接多个邻居,所以是按照邻居进行水平分割的,路由就会按照单播方式发送,统一接口上收到的路由可以按照邻居进行区分。
实验:
在R1上的接口上关闭水平分割:
[R1-GigabitEthernet0/0/0]undo rip split-horizon,抓包查看报文
这时我们会发现报文是主类路由,这时因为RIPv2是默认开启了自动汇总的功能,只是在水平分割或毒性反转后不起作用。现在我们在接口上间路由汇总关闭:
[R1-rip-1]undo summary //在进程中关闭
然后我们观察发送的报文,将原来发送聚合的条目进行毒化(120s内持续发送毒化报文,直到汇总条目在自己的数据库中失效),发送没有汇总的路由条目,并且也发送了2.2.2.0/24,metric=2,说明水平分割没有生效。
2.毒性反转(默认关闭)
毒性逆转的作用:利用毒性逆转,可以清除对方路由表中的无用路由。
实现:配置毒性逆转后,R2在接收到从R1发来的路由10.0.0.0/8后,向R1发送一个这条路由不可达的消息(将该路由的开销设置为16),这样R1就不会再利用从R2学到的路由10.0.0.0/8,因此就可以避免路由环路的产生。
注意点:
实验:
在R1的接口上开启毒性反转
[R1-GigabitEthernet0/0/0]rip poison-reverse 当R1收到了R2的路由条目后,会将此路由毒化为16跳从新从接受接口发送回去,避免环路的产生:
3.触发更新
触发更新:触发更新可以缩短网络收敛时间。在路由表项变化时立即向其他设备广播该信息,而不必等待定时更新(但是不会刷新计时器)。
实现:如果R1发现网络故障之后,不再等待更新周期到来,就立即发送路由更新信息给路由器R2,使路由器B的路由表及时更新,则可以避免产生上述问题。
4.计数到无穷大
RIP允许最大跳数数值为15。大于15的目的地被认为是不可达的。这个数字在限制网络大小的同时也防止了一个叫做“计数到无穷大”的问题,由于计数到无穷大的问题,路由选择信息将从一个路由器传到另外一个路由器,每次跳数加1.路由选择环路问题将无限制地进行下午,除非到达了没够限制。这个限制就是RIP的最大跳数。当路径的跳数超过15,这条路径才从路由表中删除。
RIP协议的优点是配置简单,相对于,非常适用于小规模网络。协议设计比较简单,利于学习。
RIP协议的缺点包括:
综上,RIP不适用于大型的复杂网络。
参考资料:华为HCIE学习指南、华为HCIE培训资料、网络相关资料