导图社区 RIP知识总结
下图详细介绍RIP协议的原理,及RIP协议的优缺点及相关机制。
编辑于2020-10-28 14:36:12RIP
RIP的基本概念
RIP的基本概念
RIP是最典型的距离矢量路由协议,常被用于在小型的网络中交互路由信息,它是最先得到广泛使用的IGP协议,目前RIP存在三个版本,分别是面向IPV4的RIPv1和RIPv2,以及面向IPV6的RIPng。
RIP路由更新及接收
基本原理阐述:
每台RIP路由器都维护着一个RIP数据库,在该数据库中保存着路由器发现的所有RIP路由,其中包括自己发现的直连路由以及从其他路由器收到的路由。在RIP数据库中的每个路由条目都包含:目的网络地址/网络掩码、度量值、下一跳地址、老化计时器及路由状态标识等信息,RIP数据库中的有效路由条目被加载到路由器的路由表中。 每台运行RIP的路由器周期性地将自己的路由通告出去,当路由器收到RIP路由更新时,如果发现这些路由是自己并未发现的并且是有效的,则将其加载到路由表,同时设置路由的度量值和下一跳地址。通过下面举例简单的阐述一下原理。
实验环境图:
实验环境背景:
R1、R2和R3三台路由器直连,每台设备的路由表显示了路由的目的网络地址/网络掩码、协议类型、度量值及出接口。现在三台路由器上激活RIP并观察路由的交互过程,初始情况下,所有路由器都能自动发现自己的直连路由,并将直连路由写入路由表。
初始启动
初次交换路由信息
路由完成收敛
1.路由器初始启动:
R1为例,它在其路由表中加载了192.168.12.0/24及1.0.0.0/8两条直连路由。在华为的数通产品上,RIP将直连路由的度量值视为0跳,因为该直连网络就在”家门口“。所谓的”0跳“指的是到达该网段不需要经过任何一台路由器。
2.初次交换路由信息:
由于R1、R2及R3都运行了RIP,因为他们都将自己路由表中的路由通过RIP协议报文周期性的从所有激活了RIP的接口通告出去。对于R2而言,他会将自己的路由表从G0/0/0和G0/0/1接口通告出去,以192.168.23.0/24路由为例,R2会将关于该路由的更新从G0/0/0接口通告给R1,它将该路由的度量值设置为1跳(0跳加1跳,也就是加上“自己这一跳”)——RIP路由器将自己路由表中的路由通告出去时将跳数加1,而收到该路由更新的RIP路由器将路由安装到自己路由表时则使用这个度量值。R1收到R2所通告的路由更新后发现192.168.23.0/24路由在其路由表中并不存在,于是将该路由”学习“过来,加载到路由表中,将路由的度量值设置为1跳(意思是自己要到达192.168.23.0/24,需要经过一个RIP路由器),此外还将该路由的下一跳设备为路由的更新源R2(它从路由更新报文的源地址获得R2的IP地址),出接口设置为G0/0/0)。 R3也会在自己的G0/0/0接口上收到R2通告的路由更新,并学习到路由192.168.12.0/24,他将这条RIP路由加载到路由表中,并将路由的下一跳设置为R2,出接口设置为G0/0/0,度量值设置为1。而R2会在自己的G0/0/0接口上收到R1通告的路由更新,在G0/0/1接口上收到R3通告的路由更新,并最终学习到1.0.0.0/8及3.0.0.0/8路由。
3.路由完成收敛:
由于运行RIP的路由器会周期性的将自己的路由表通告出去,因此在下一个更新周期到来时,所有路由器在次将自己的路由表通告出去。R1收到R2通告的路由后发现路由3.0.0.0/8在路由表中并不存在。因此将该条路由学习过来,加载到路由表并关联度量值:2跳。这意味着R1要到达3.0.0.0/8需要经过两个路由器。同理,另一边的R3也能够从R2学习到1.0.0.0/8路由,如此以来,三台路由器都拥有了到达全网各个网段的路由。而且设备的路由表此时已经稳定,这个阶段被称为“网络中的路由已经完成了收敛”虽然网络中路由器的路由表已经稳定,但他们依然会周期性的将自己的路由表通过RIP通告出去,以确保路由的有效性。
RIP路由更新与路由表
RIP路由更新的简单过程:
RIP是典型的距离矢量路由协议,从单台RIP路由器的角度看,它只是简单地侦听直连的RIP路由器所通告的RIP路由更新,从该更新中发现RIP路由,并将学习到的路由加载到路由表中,另一方面,他也将自己路由表中的RIP路由通告出去,以便直连的RIP路由器能够学习到,实际上,对于RIP路由器而言,它并不知晓整个网络的拓扑结构。
实验环境
实验环境图
实验初步介绍:
在实验环境图中,R1、R2、R3及R4运行了RIP,初始时,R1及R3需通过R2实现连接。R1将本地直连网络192.168.1.0/24发布到了RIP,从而R2能够通过RIP学习到该条路由,它将路由加载到自己的路由表中,然后进一步通过RIP将该路由通告给R3,同理,后者学习到路由后将其加载到自己的路由表中,然后通过RIP通告给R4,最终,网络中的4台路由器都能学习到192.168.1.0/24路由。 现在R1及R3之间新增了高带宽链路,现希望将R3发往192.168.1.0/24的流量引导到这条新增链路上,因R1及R3并不是通过这段新增的链路直接相连(中间还有其他设备),因此无法在他们之间部署RIP——直连的网络设备之间才能够通过RIP交互路由信息,于是我们在R3上配置了到达192.168.1.0/24的静态路由,下一跳从高带宽链路指向ISP。由于静态路由的优先级值为60,而RIP路由的优先级值为100,显然,缺省情况下静态路由的优先级要比RIP路由更高,因此R3将到达192.168.1.0/24的静态路由取代原有的RIP路由加载到自己的路由表中。由于路由表中到达192.168.1.0/24的RIP路由消失,因此R3将此前通告给R4的该条RIP路由撤销,并且在此后其周期性从该接口发送的RIP路由更新中也不在包含这条路由,换句话说,R4无法通过RIP学习到该路由,此时就必须通过其他手段,确保R4能够拥有到达该网段的路由。
结论:
通过分析得出RIP工作过程:1、从直连路由器收到RIP路由更新。 2、将路由加载到路由表。 3、将路由通告给其他直连路由器。
度量值
度量值的概念
度量值就是指到达目的网络所需的代价和成本,每种路由协议都定义了路由的度量值,但是他们对度量值的规定可能不同,有的路由协议将到达目的网络沿途所经过的路由器个数作为路由的度量值,而有的协议则基于链路带宽计算路由度量值。度量值的大小将直接影响路由器对到达某个目的网段的路由的优选。
RIP度量值的说明
RIP以跳数作为路由的度量值,所谓跳数,就是到达目的网络所需经过的路由器个数,显然RIP的度量值需为非负整数,而且跳数越少,路由被认为越优。
RIP度量值实验拓扑案例一:
关于度量值加减跳数的问题:
如上图所示,R1到达直连网段1.0.0.0/8的度量值为0,随着RIP更新周期的到来,它将该条路由从G0/0/0接口通告出去,在R1所通告的路由更新中,1.0.0.0/8路由携带的度量值为1,也就是说,R1将该条路由的度量值加1后才通告给R2。R2收到后,将1.0.0.0/8路由学习过来,加到路由表后,并将路由的度量值设置为1,也就是沿用了R1所通告的度量值。通俗点讲:每台路由器在通告出自己的路由条目时,都会先将度量值加1之后,在通告出去,当其他路由器收到被通告的路由时,直接拿过来用,当进行二次通告时,在将度量值加1在通告出去,以此类推。
RIP度量值实验拓扑案例二:
关于链路带宽影响RIP路由优选的问题:
如上图所示,假设所有路由器都运行了RIP,则R5会将路由5.0.0.0/8通告给R2和R4,通告时路由的度量值设置为1跳,在收到这条路由更新后,R2会把这条路由通告给R1并告知度量值为2跳,这样一来,R1便发现了一条到达5.0.0.0/8的路由,另一方面,R4从R5学习到5.0.0.0/8路由后会进一步通告给R3,而R3又会通告给R1,这样R1又发现了另一条到达5.0.0.0/8的路由。此时对于R1而言,有两条路由可以到达5.0.0.0/8,那么R1就会进行最优路由的选择,拥有更少跳数的路由被优选并被加载到路由表中,作为数据转发的依据,因此在R1的路由表中,5.0.0.0/8路由的下一跳是R2。
通过跳数来度量到达目的网络的远近非常简单和直观,但是也存在一个明显的问题,如果网络链路带宽不一致,RIP的这种度量值的设计就可能导致路径选择不合理。看图2-7,网络中的链路带宽是不一致的,但是RIP并不关心链路的带宽,它只关心到达目的沿途需经过的路由器个数,因此即使R1-R3-R4-R5这条路径的沿途链路带宽要比另一条路径高得多,但由于这条路径的跳数更大,因此它将不会被R1选择作为到达5.0.0.0/8的路径(除非另一条路径失效),这显示是不合理的,在这种场景中,网络管理员可以通过对RIP路由的度量值进行适当的调整。例如,将低带宽路径的RIP路由的度量值增加一个特定的量,使其不被目标设备优选,进而影响数据流量的转发路径。
报文类型及格式
RIP报文的简单介绍:
RIP的协议报文采用UDP封装,报文的源、目的端口均是UDP520端口。RIP定义了两种报文,分别是请求(Requset)报文和响应(Response)报文。Requset报文用于向邻居请求全部或部分RIP路由信息,而Response报文则用于发送RIP路由更新,在Response报文中携带着路由以及该路由的度量值等信息。 一旦路由器的某个接口激活RIP后,该接口立即发送一个Requset报文和Response报文,并开始侦听RIP协议报文。随后接口开始Response报文的周期性发送。RIPV1使用广播地址255.255.255.255作为协议报文的目的IP地址,而RIPV2则不同,它使用组播IP地址224.0.0.9作为协议报文的目的IP地址。 当RIP路由器收到Requset报文后,会使用Response报文进行回应,在该报文中携带对方所请求的路由信息。当RIP路由器收到Rseponse报文之后,会解析出该报文中所携带的路由信息,如果报文中的路由信息是自己尚未发现的,并且路由的度量值有效,则路由器将学习该路由并将路由加载进路由表,同时为这条路由关联度量值、出接口和下一跳信息。
RIPv1报文结构
RIPv2报文结构
计时器
更新计时器(Update Timer)
该计时器的时间为RIP路由器周期性泛洪路由表(周期性在接口上发送Respinse报文)的时间间隔,在缺省情况下,路由器以30S为周期从已经激活了RIP的接口向外发送Response报文。 如果一个网络中有多台RIP路由器接入,每台路由器所有激活RIP的接口如果在更新计时器超时后一齐泛洪Response报文,就有可能引发不必要的冲突或者使得同一时间内网络中充斥着大量的RIP广播或组播报文。为了避免这个问题,RIP引入一个随机的偏移量,也就是路由器不以严格的30S为周期发送RIP报文,而是在该时间的基础上关联一个随机的、细小的偏移量(加/减0-5s)
老化计时器(Age Timer)
每一条RIP路由都关联两个计时器,其中之一就是老化计时器(也被称为超时计时器),当一条RIP路由被学习并加载到路由表时,路由器立即为该路由启动老化计时器(缺省180s),该计时器被启动后即开始计时。 此后每当更新周期来临时,路由器会在次收到该条路由的更新,老化计时器又被重置并重新开始计时 以华为AR2200路由器为例,若一条路由持续未被刷新并最终导致老化计时器超时,路由则变为不可用并从路由表中删除,虽然被立即从路由表中删除,但该条路由依然被保存在RIP数据库中(以便路由随时能够恢复),在老化计时器超时的同时,该路由的垃圾回收计时器也被立即启动。值得注意的是,对于老化计时器已超时的失效RIP路由,依然会被包含在路由器对外发送的Response报文中,只不过路由的度量值被设置为16跳,既不可达。
垃圾回收计时器(Garbage-Collect Timer)
垃圾回收计时器缺省被设置为120s。上文已说到,当一条RIP路由的老化计时器超时,该条路由会变为不可用并被设备从路由表中删除,但是依然被保存在RIP数据库中,同时设备立即为该路由启动垃圾回收计时器。在垃圾回收计时器计数的这段时间,RIP路由器在泛洪路由更新时将该条路由的度量值设置为16跳,以便告知其他路由器关于该网络的不可达情况。若连该计时器也超时,则路由便被彻底删除。
实验命令:
在RIP视图下,使用times rip 命令可以修改上述三个计时器的时间值,该命令可指定三个参数,分别对应RIP的路由更新时间间隔、老化时间以及垃圾回收时间。
例如
Silent-Interface
实验拓扑图
实验说明
在缺省情况下,一旦路由器的某个接口激活了RIP,RIP就开始在该接口周期性地发送Response报文,同时也在该接口上侦听RIP报文。 如上图所示的拓扑,为了让PC与R2直连的192.168.2.0/24网段实现互通,就必须让R2学习到192.168.1.0/24路由,让R1学习到192.168.2.0/24路由。 如果在R1及R2之间部署RIP,那么对于R1而言,需要在其G0/0/1及G0/0/2接口上都激活RIP。 如此一来R1便会在这两个接口上发送Response报文,当然,也会在这两个接口上侦听RIP报文。 R1会将携带了192.168.1.0/24路由的Response从G0/0/2接口发送出去,使得R2能够学习到该路由。它也会将Response报文(携带了192.168.12.0/24以及从R2学习到的路由)从G0/0/1接口发送出去。 但实际上,这些RIP报文对于其G0/0/1接口所连接的网段来说是没有任何意义的,这里没有任何RIP路由器,因此R1在该网段中所发送的Response报文实际上给PC带来了额外的负担。
Silent-Interface的概念
使用Silent-Interface(静默接口)特性可以解决这个问题,一个RIP接口一旦被指定为Silent-Interface,则该接口将不再发送RIP报文,而只是被动地接收RIP报文,也就是只收不发。 所以在本例中,如果将R1的G0/0/1接口激活RIP同时配置Silent-Interface,则R1不再向G0/0/1接口发送Response报文,这就消除了PC为解析RIP报文所产生的资源消耗。 另一方面,虽然G0/0/1被指定为Silent-Interface,但是由于该接口已经激活了RIP,因此当R1从其他接口发送Response报文时,依然会在报文中携带192.168.1.0/24路由信息,也就是说,将G0/0/1接口设置为Silent-Interface并不妨碍R2通过RIP学习到该接口的路由。 最后需强调的是,Silent-Interface接口仅仅是不向外泛洪Response报文,但是它依然可以接收Response报文。
RIP的防环机制
环路的产生
环路产生背景
距离矢量路由协议只是简单地将自己的路由表周期性的通告出去,同时也将收到的有效路由加载到路由表中,并通过累加的度量值来体现到达目标网络的距离,因此运行距离矢量路由协议的路由器并不了解整个网络的拓扑结构,这些特点使得网络中非常容易出现路由环路。
实验拓扑图
环路产生的实验讲解
R1和R2都运行了RIP,当网络完成收敛后,R2通过RIP学习到了1.0.0.0/8路由。现在R1的G0/0/1接口发生了故障,R1感知到这个拓扑变化并且立即在路由表中删除1.0.0.0/8路由,然而这个拓扑的变更对于R2来说此时并不知晓。R1准备在下一个更新周期到来时通告该条路由的不可达情况,但是此时完全可能出现一种情况是: 在R1通告这个更新之前,R2的更新周期到了,他开始在自己的G0/0/0接口上发送Response报文,该报文中包含R2路由表中的所有路由,其中就包括1.0.0.0/8路由,且该路由的跳数为2(R2自己到达该网段需经过1个路由器,因此他将路由更新出去时将跳数加1)。R1收到这个Response报文后,发现1.0.0.0/8竟然通过R2可达且跳数为2,于是它将1.0.0.0/8路由加载到路由表。 这就出现了路由环路,环路对网络来说危害是非常大的,对于目前的情况,如果R2收到一个发往1.0.0.0/8的数据包,经过路由表查询后,R2发现自己有一条路由可以匹配该母的地址,并且下一跳为R1,因此它将数据包转发给R1,而R1经过路由表查询,发现到达1.0.0.0/8下一跳是R2,于是数据包又被转发给R2,如此反复,发往该网段的数据包就会在R1、R2之间不停的来回转发,直到报文的TTL值递减为0,可以想象,如果数据流量特别大的话,这无疑将对路由器的性能造成极大损耗,当然,也可能将链路带宽耗尽。 另一方面,由于RIP每隔30S泛洪一次路由表,因此1.0.0.0/8路由会在每个更新周期到来时随着Response报文在网络中不停地被泛洪。在R1的下一个更新周期到来时,他会把1.0.0.0/8路由通过Response报文在通告给R2,R2收到该报文后,刷新自己的路由表,将该路由的跳数更新为3跳。如2-13所示,而当R2的更新周期到来时,他将在通告给R1的Response报文中继续携带1.0.0.0/8路由,而且跳数设置为4,R1收到该Response报文后刷新自己的路由表,将该路由的度量值更新为4,如此反复,设想一下,如果RIP没有任何机制解决该问题,那么1.0.0.0/8路由岂不是会在网络中被不断泛洪且其度量值也会持续累加到无穷大? 综上,路由环路的问题对于网络而言,危害是巨大的,因此从网络设计、协议设计的角度都应该充分考虑到环路的隐患及可能性,并加以规避。
定义最大跳数
定义最大跳数的概念:
为了避免RIP路由在网络中被无休止的泛洪,RIP定义了路由的最大跳数——15跳,也就是说,RIP路由的最大可用跳数为15跳,当一条路由的度量值达到16跳时,该路由被视为不可用,路由所指向的网段被视为不可达。
定义最大跳数的缺点:
显然上这是一种无奈的办法,虽然解决了路由被无线泛洪的问题,但是同时在极大程度上限制了RIP所能够支持的网络规模,设想一下,如果一个网络的直径真的有16台路由器该怎么办?RIP面对这样的网络也就显得力不从心了,另外,RIP定义路由的最大跳数,虽然有效防止了RIP路由被无线泛洪,但是却并没有从根本上解决路由环路问题。
水平分割
水平分割的原理
水平分割的原理是:RIP路由器从某个接口收到的路由不会再从该接口通告出去,这个机制在很大程度上消除了RIP路由的环路隐患。
水平分割实验讲解
水平分割无法控制的实验拓扑特例
毒性逆转
毒性逆转的原理
其原理是:RIP从某个接口学到路由后,当它从该接口发送Response报文时会携带这些路由,但是这些路由度量值被设置为16跳(16跳意味着路由不可达)。利用这种方式,可以清除对方路由表中的无用路由,毒性逆转也可以防止产生路由环路。
毒性逆转实验拓扑
R1及R2两台路由器运行了RIP,彼此开始交互RIP路由。R1将路由1.0.0.0/8通过RIP通告给R2。如果R2激活毒性逆转,那么当他从G0/0/0接口周期性发送Response报文时,报文中会包含从该接口学习到的1.0.0.0/8路由,但是路由的度量值被设置为16跳。 由于R2到达1.0.0.0/8的RIP路由时通过R1获知的,这意味着R1自己可能直连该网段, 或者通过其他路由器可以到达该网段。换而言之,R1不会从R2到达1.0.0.0/8,因为那样就可能出现环路,所以毒性逆转的思路是R2认为:既然这条路由时R1给我的,那么R1就不可能从我这里到达该网段,所以我就告诉R1,这个网络从我这走是不可达的。这条不可达路由可以彻底杜绝R1从R2到达1.0.0.0/8从而出现环路的可能性。 其实毒性逆转和水平分割是存在矛盾的,如果在R2的接口上同时激活水平分割和毒性逆转,则只有毒性逆转生效。综上,对水平分割通俗的理解就是:”到达某个目的网段的路由既然是你告诉我的,那么我就不应该在说回给你听“,这是一种相对消极的举报。而毒性逆转则显得更加主动积极:”到达某个目的网段的路由是你告诉我的,那么我通过主动告诉你这个网段从我这走不不通杜绝你从我这走的可能“。从这个层面上理解,似乎毒性逆转在避免环路方面要比水平分割更加考劈,但是它依然存在明显的缺点——增加了Response报文的”体积“。
毒性逆转的缺点
R1如果作为一台汇聚层设备,将一定规模的路由信息通过RIP通告给R2,如果R2激活了毒性逆转,那么它除了将路由表中的其他路由通告给R1以外,还会把自己从R1接收到的RIP路由在通告回给R1并且告知其路由不可达,R2所发送的Response报文势必变得更加臃肿,这显然增加了链路带宽的损耗及设备负担
触发更新
触发更新产生背景
路由器会在激活了RIP的接口上周期性的发送Response报文,在缺省情况下,RIP会以30S为周期进行报文发送,这在网络稳定的情况下是没有问题的,但是一旦拓扑出现变更,如果依然要等待下一个更新周期到来才发送路由更新,这显然是不合理的,而且也非常容易引发路由环路。
触发更新的原理
当路由器感知到拓扑发生变更或RIP路由度量值变更时,它无需等待下一个更新周期到来即可立即发送Response报文,如果2-19描述的场景,R1、R2及R3三台路由器运行了RIP,R1在RIP中发布1.0.0.0/8路由,它立即向R2发送一个Response报文,在该报文中包含这条路由以及路由的度量值。R2收到这条路由更新后,将路由加载到自己的路由表。然后(无需等待下一个更新周期到来)立即向R3发送Response报文,将1.0.0.0/8路由通告给它。 现在由于某种原因,R1通告的1.0.0.0/8路由的度量值发生了变化,由原来的1跳变为2跳,R1向R2发送一个Response报文以便将这个变化通知给对方,由于R2是从该条路由的下一跳收到的Response报文,因此即使新的度量值要劣于R2路由表中已经存在的1.0.0.0/8路由的度量值,R2也会立即刷新自己的路由表,并且无需等待下一个更新周期的到来,立即触发一个Response报文给R3,如果2-20所示,R3在收到该报文后,立即刷新自己的路由表。
毒性路由
毒性路由的原理
当一个网络变为不可达时,发现这个变化的路由器立即触发一个16跳的路由更新来通知网络中的路由器——目标网络已经不可达。这种路由被称为毒性路由。
毒性路由实验拓扑
毒性路由实验讲解
如上图所示,R1的直连网段1.0.0.0/8因故障变为不可达,R1将立即发送Response报文(触发更新机制使然)用于通告这个更新,在其发送给R2的这个Response报文中,包含着1.0.0.0/8路由,最重要的是这条路由的度量值被设置为16,R2收到这个Response报文后,就立即意识到该网段已经不可达了,于是将该路由从路由表中移除。值得注意的是,R2虽然将该路由从路由表中删除,但是依然将其保存在RIP数据库中,同时为其启动垃圾回收计时器。
RIPv2
RIPv1与RIPv2
RIPv1和RIPv2的区别:
RIPv1:1>典型的有类路由协议,不支持VLSM,只能在特定的网络提供服务。 2>在Response报文中携带的路由信息只有IP地址而没有目的网络掩码。
RIPv2:1>使用组播方式发送RIP报文; 2>支持无类路由选择。 3>在Response报文中携带的路由信息中增加目的网络掩码。 4>支持报文认证 5>增加下一跳特性,增加路由标记功能,支持手工路由汇总。
RIPv1不支持VLSM的举例说明
实验拓扑
上述实验展示了一个部署VLSM的网络,R1连接着主类网络172.16.0.0/16的一个子网——172.16.1.0/24,R3连接着该主类网络的另一个子网——172.16.3.0/24。如此一来,172.16.0.0/16这个B类地址的两个子网被192.168.12.0/24及192.168.23.0/24这两个C类网络地址段”隔开“了,这种网络又被称为”不连续的主类网络“。现在网络管理员要在R1、R2、R3上部署RIPv1。
实验说明
RIPv1是有类路由协议,运行RIPv1的路由器所泛洪的Response报文中,路由信息是不携带目的网络掩码的,这就存在一个问题:如果R1要向外通告172.16.1.0/24这个子网,路由的目的网络地址是多少?对方收到这个路由而又缺少网络掩码信息,它该如何判断目标网络的掩码?RIPv1定义了一套路由发送及更新规则,关于这些规则的描述超出了本书的范围。如果RIPv1路由器处于主类网络边界,当它将一个主类网络的子网路由通告到另一个主类网络时,会将前者自动汇总成主类路由进行通告。 在本例中,R1处于主类网络172.16.0.0/16及192.168.12.0/24的边界,因此当它向192.168.12.0/24网络通告172.16.1.0/24这个子网路由时,会将该子网路由汇总成主类路由:172.16.0.0(注意R1将该路由通过Response报文通告给R2时是不携带目的网络掩码的)。R2收到这条路由更新后,为172.16.0.0附上该地址的缺省掩码,也就是255.255.0.0,因为最终R2将172.16.0.0/16路由加载到路由表中,该路由的下一跳为R1。 注意,R1及R3都处于主类网络边界,因此他们向R2发送的Response报文都将包含172.16.0.0路由(而且没有目的网络掩码信息),这将使得R2收到这两份Response报文,将两条路由都加载到路由表中,如此一来,R2的路由表中的172.16.0.0/16路由将在R1及R3这两个下一跳执行等价负载分担。这造成的一个直接结果是R2转发到达172.16.3.0/24的数据包时,有可能将其送往R1从而导致通信故障。这就是RIPv1面对不连续的主类网络时存在的问题。 解决这个问题的方法有几个,最为推荐的方法就是使用RIPv2而不是RIPv1。
报文发送方式
RIPv1报文发送方式:
RIPv1使用广播的方式发送协议报文,这些报文的目的IP地址为255.255.255.255,这是一个广播的IP地址,一个设备发送的广播报文将在设备所处的广播域中泛洪,这使得与其同处一个广播域的其他设备都将收到这个报文,并且耗费资源去处理这些报文——即使有些设备并不需要这些报文,例如广播域中的主机、服务器以及其他并未运行RIP的设备等,这些设备收到一个RIPv1报文后,需要将其进行层层解封装,直至看到报文的目的UDP端口号,然后发现本地并未侦听UDP520端口才会将该报文丢弃。
RIPv2报文发送方式:
RIPv2则采用组播地址224.0.0.9作为协议报文的目的IP地址,所有的RIPv2设备都会侦听该组播地址,采用这种方式发送协议报文,可以减少对广播域中其他设备的影响。
报文认证
缺省时报文认证的弊端
弊端说明:
缺省时,RIP路由信息的交互是缺乏安全性的,一旦设备的某个接口激活了RIP,该接口即开始周期性地发送Response报文及侦听RIP报文,如果接口上收到Response报文,RIP只进行简单的检验,例如检查报文的源IP地址与自己的接口IP地址是否在相同网段等,随后就将所收到的Response报文中的路由信息学习过来,这显然是存在一定的安全隐患的。
实验拓扑
实验说明:
在上述拓扑中,R1及R2之间交互这RIP路由,现在R3连接到了交换机上,并且开始在广播域中泛洪Response报文,这些伪造的Response报文中携带着大量垃圾路由,这将造成R1及R2的路由出现紊乱,或者路由表被大量垃圾路由填充,设备资源也将被大量消耗。
RIPv2报文认证的特性:
RIP报文认证,通过在R1及R2的接口上激活RIP认证并在两端配置相同的认证口令,可使RIP报文的交互更为安全,只有当接口上收到的RIP报文中相关认证字段匹配本地配置的认证口令,该报文才被认为是有效的,否则就被认为是非法报文并被丢弃。
RIPv2报文认证时格式讲解
报文格式
讲解
RIP认证是基于报文的,以简单(Simple)认证方式为例,路由器接口上配置RIP报文认证后,该接口发送的RIP报文将会携带认证信息,如上图所示,认证信息会占用报文的第一个路由项(该路由项的地址族标识符为0xFFFF),此时一个Response报文可携带的最大路由条目数量从25条变成24条。 以华为AR2200路由器为例,支持以下几种RIP认证方式: 1>简单认证; 2>MD5认证(IETF标准) 3>MD5认证(私有标准)
下一跳字段
下一跳字段产生原因
实验拓扑图
实验讲解:
RIPv2定义了”下一跳“字段,使得路由器在多路访问网络上可以避免次优路由现象。 上述拓扑所示,R1、R2及R3连接在同一台以太网交换机上,R1及R3运行RIPv2,但R2并不支持RIP。R2直连着2.0.0.0/8,为了让R1能够访问这个网段,我们在R1上部署了静态路由:ip route-static 2.0.0.0 8 192.168.123.2。现在为了让R3也能够访问2.0.0.0/8,而且能够通过RIP学习到去往该网段的路由,R1将静态路由引入RIP。如此一来,R3就能够通过RIP学习到2.0.0.0/8路由,然而由于该条路由是学习自R1的,因此R3将这条路由加载进路由表时,认为R1是其到达该网段的下一跳,这显然并非是最优的方案,因此从R3到达2.0.0.0/8的数据包将首先被转发给R1,再由R1转发到R2,这实际上是存在次优路径的。为什么R3不直接将数据发往R2呢?这是因为对于距离矢量路由协议而言,路由的通告者就被视为该路由的下一跳。
RIPv2”下一跳字段“解决问题的原理
RIPv2增加了”下一跳“字段来解决这个问题,当R1将2.0.0.0/8路由通过RIP通告给R3时,Response报文除了携带该路由的目的网络地址、目的网络掩码、度量值,还会设置”下一跳“字段,该字段的值为R1自己到达目标网段2.0.0.0/8的直连下一跳地址,也就是直连网段中的192.168.123.2(R2的接口地址) 在大多数情况下,当RIP路由器发送路由更新时,路由的”下一跳“字段为0.0.0.0,其他RIP路由器收到该路由更新后,将路由的通告者视为到达目的网段的下一跳。而在本场景中,R1通过设置这个字段来告知路由接受者到达目的网段的具体下一跳地址,从而规避次优路径问题,如此一来,R3收到这个Response报文后,将路由2.0.0.0/8加载进路由表,而路由的下一跳便设置为192.168.123.2(该地址直连可达),当R3收到去往该网段的数据包时,便会将其直接转发给R2,而不会经由R1去转发。
说明:
路由引入(路由重分发)
在同一个网络拓扑结构中,如果存在两种不同的路由协议,由于不同路由协议的机理各有不同,对路由的理解也不相同,这就在网络中造成了路由信息的隔离。在路由协议的边界设备上,将某种路由协议的路由信息引入另一种路由协议中,这个操作被称为路由引入或者路由重分发。
例如一台路由器如果既配置了静态路由,又运行了RIP,那么其路由表中的静态路由对于RIP而言是外部路由,缺省时RIP域内的设备对于这些静态路由是无感知的,如果在该路由器上将静态路由引入RIP,那么RIP域内的其他设备便能通过RIP学习到这些外部路由,这个操作就是路由引入。
路由标记
路由标记的作用
RIPv2增加了”路由标记(Route Tag)“字段,使得从外部被引入RIP的路由能够携带特定的标记信息。
路由标记的原理:
我们将一系列连接的RIP路由器构成的网络称为RIP域,RIP域内的路由通过network命令向RIP发布的路由将会被整个域内的RIP路由器学习到,这些路由的”路由标记“字段值将被设置0. 当一条外部路由,例如静态路由、OSPF或BGP路由等,被重分发到RIP时,RIP可以为该路由设置路由标记,此时执行重分发操作的路由器将向RIP域中泛洪用于描述该外部路由的Response报文。 而在该Response报文中,被引入的外部路由会携带由网络管理员设置(或者协议自动设置)的路由标记,域内的RIP路由器学习到该路由后都能看到该标记,并且可以基于该标记执行路由策略等操作。
路由汇总
路由汇总的作用
路由汇总是非常重要的一种思想,对网络优化的贡献是巨大的,一个大规模的网络中,路由器为了维护大量的路由信息不得不耗费过多的设备资源,为了减小设备的负担,同时保证网络中路由的可达性,部署路由汇总是非常推荐的解决方法。路由汇总指的是同一个网段内的不同子网路由在向外通告时汇总成一条路由的行为,路由汇总主要用于减小网络设备的路由表规模,进而减小网络中的路由更新的流量及设备资源消耗。在一个大型网络中路由汇总几乎是必须考虑的一种网络优化手段。
路由汇总产生的背景
R1连接着172.16.1.0/24、172.16.2.0/24及172.16.3.0/24等大量网段,如果R1将这些网段的路由信息通过RIP统统通告给R2,那么R2的路由表立即就变得”臃肿“,而且为了更新这些路由又得占用掉不少链路带宽。仔细一看不难发现该网络是可以通过部署路由汇总来进行优化的。
如果我们在R1上部署路由汇总,使R1不在通告172.16.0.0/16的子网路由给R2,而是通告汇总路由172.16.0.0/16,那么R2的路由表将极大程度地被精简,当R2转发到达这些子网的报文时,可以使用这条汇总路由来指导转发。当然,需要谨记的是,部署路由汇总的前提是IP地址规划具备一定的合理性,如果网络中的IP地址规划非常紊乱且没有规律,那么路由汇总的部署势必存在极大的障碍。
RIP支持路由自动汇总,所谓路由自动汇总指的是如果RIP路由器处于主类网络边界,当它将一个主类网络的子网路由通告到另一个主类网络时,自动将该子网路由汇总成主类网络路由,只将主类网络路由通告给直连RIP路由器的行为。值得注意的是,RIP路由自动汇总只能将明细路由汇总成主类网络路由,这在某些场景下会存在”颗粒度过大“的问题。 RIPv1及RIPv2对于路由自动汇总的支持情况有所不同: 在RIPv1中,路由自动汇总功能缺省已被激活,而且不能被关闭。 在RIPv2中,路由自动汇总功能缺省已被激活,但是可以通过命令关闭。
RIPv2的配置及实现
案例1:RIPv2基础配置
案例2:Silent-Interface
案例3:RIP路由手工汇总
案例4:RIP报文认证
案例5:配置接口的附加度量值
案例6:配置RIP发布默认路由
案例7:RIP路由标记