文章目录
1.RIP路由更新及接收
1.1 路由器初始启动
R1、R2和R3三台路由器直连,图中每台设备的路由表显示了路由的目的网络地址/网络掩码、协议类型、度量值及出接口。
现在我们在这三台路由器上激活RIP并观察路由的交互过程。在初始情况下,所有的路由器都能自动发现自己的直连路由,并且将直连路由写入路由。
RIP将直连路由的度量值视为0跳,因为该直连网段就在“家门口”。所谓的"0跳”指的是到达该网段不需要经过任何一台路由器。
1.2 初次交换路由信息
由于R1、R2及R3都运行了RIP,因此它们都将自己路由表中的路由通过RIP协议报文周期性地从所有激活了RIP的接口通告出去(RIPv1使用广播地址作为协议报文的目的IP地址,而RIPV2则使用组播地址)。
对于R2而言,它会将自己的路由表从GEO/0/0和GE0/0/1接口通告出去。以192.168.23.0/24路由为例, R2会将关于该路由的更新从GEO/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地址),出接口设置为GEO/0/0
1.3 路由完成收敛
由于运行RIP的路由器会周期性地将自己的路由表通告出去,因此在下一个更新周期到来时,所有路由器再次将自己的路由表通告出去。
R1收到R2通告的路由后发现路由3.0.0.0/8在路由表中并不存在,因此将该条路由学习过来,加载到路由表并关联度量值:2跳,这意味着R1要到达3.0.0/8需要经过两个路由器。同理,另一边的R3也能够从R2学习到1.0.0.0/8路由。
如此一来,三台路由器都拥有了到达全网各个网段的路由,如图2-3所示,而且设备的路由表此时已经稳定,这个阶段被称为“网络中的路由已经完成了收敛”。虽然网络中路由器的路由表已经稳定,但它们依然会周期性地将自己的路由表通过RIP通告出去,以确保路由的有效性。
2.RIP路由更新与路由表
RIP的工作过程:从直连路由器收到RIP路由更新;将路由加载到路由表;将路由通告给其他直连路由器。
3.度量值
RIP以跳数( Hop Count)作为路由的度量值,所谓的跳数,就是到达目的网络所需经过的路由器个数,显然RIP的度量值需为非负整数,而且跳数越少,路由被认为越优。
4. 报文格式及类型
RIP的协议报文采用UDP封装,报文的源、目的端口均是UDP520端口。RIP定义了两种报文,它们分别是请求(Request)报文和响应(Response)报文。Request报文用于向邻居请求全部或部分RIP路由信息,而Response报文则用于发送RIP路由更新,在Response报文中携带着路由以及该路由的度量值等信息。
一旦路由器的某个接口激活RIP后,该接口立即发送一个Request报文和Response报文,并开始侦听RIP协议报文。随后接口开始Response报文的周期性发送。
RIPv1使用广播地址255.255.255.255作为协议报文的目的IP地址,而RIPV2则不同,它使用组播IP地址224.0.0.9作为协议报文的目的IP地址。
当RIP路由器收到Request报文后,会使用Response报文进行回应,在该报文中携带对方所请求的路由信息。
当RIP路由器收到Response报文后,会解析出该报文中所携带的路由信息,如果报文中的路由信息是自己尚未发现的,并且路由的度量值有效,则路由器将学习该路由并将路由加载进路由表,同时为这条路由关联度量值、出接口和下一跳信息。
4.1 RIPV1的报文结构
字段 | 长度 | 含义 |
---|---|---|
命令字段 (Command) | 8比特 | 该字段用于标识RIP报文的类型. 值为1时该报文为Request报文 值为2时该报文为Response报文, 一个Response报文中最多可携带25个路由条目,当待发送的路由数量大于该值时,需使用多个Response报文。 |
版本字段 (Version) | 8比特 | 在RIPv1中,该字段的值为1。 |
地址族标识符 (Address Family Identifier, AFI) | 16比特 | 该字段值为2时表示IP协议。 如果该报文为Request报文并且是用于向直连路由器请求其整张路由表,则该字段值被设置为0,同时这个Request报文中包含且只包含一个路由条目,该路由的目的网络地址为0.0.0.0,度量值为16 |
IP地址 (IPAddress) | 32比特 | 路由的目的网络地址。 |
度量值 (Metric) | 32比特 | 路由的度量值。 |
RIP v1的Response报文中并不携带路由的目的网络掩码。
4.2 RIP v2的报文结构
字段 | 长度 | 含义 |
---|---|---|
命令字段 (Command) | 8比特 | 与RIPV1类似 |
版本字段 (Version) | 8比特 | 在RIPv2中,该字段的值为2. |
地址族标识符 (Address Family Identifier) | 16比特 | 与RIPV1类似 |
路由标记 (Route Tag) | 16比特 | 用于为路由设置标记信息,缺省为0。当一条外部路由被引入RIP从而形成一条RIP路由时, RIP可以为该路由设置路由标记,当这条路由在整个RIP域内传播时,路由标记不会丢失。 |
IP地址 (IPAddress) | 32比特 | 路由的目的网络地址。 |
网络掩码 (Netmask) | 32比特 | RIP V2在这一点上做了改进,定义了该字段用于存储路由条目的目的网络掩码,如此一来, RIPv2便能够支持VLSM(VariableLength Subnet Mask,可变长子网掩码) |
下一跳 (Next Hop) | 32比特 | RIPV2定义了该字段,使得路由器在多路访问网络上可以避免次优路径现象。 |
度量值 (Metric) | 32比特 | 路由的度量值。 |
5.计时器
RIP定义了多个计时器,其中最重要的三个计时器如下。
更新计时器(Update Timer):该计时器的时间为RIP路由器周期性泛洪路由表(周期性在接口上发送Response报文)的时间间隔。在缺省情况下,路由器以30s为周期从已经激活RIP的接口向外发送Response报文。
如果一个网络中有多台RIP路由器接入,每台路由器所有激活RIP的接口如果在更.新计时器超时后一齐泛洪Response报文,就有可能引发不必要的冲突或者使得同一时间内网络中充斥着大量的RIP广播或组播报文。为了避免这个问题, RIP引入一个随机的偏移量,也就是路由器不以严格的30s为周期发送RIP报文,而是在该时间的基础上关联一个随机的、细小的偏移量(加/减0~5s)
老化计时器(Age Timer):当一条RIP路由被学习并加载到路由表时,路由器立即为该路由启动老化计时器(缺省180s),该计时器被启动后即开始计时。
此后每当更新周期来临时,路由器会再次收到该条路由的更新,老化计时器又被重置并重新开始计时。
若一条路由持续未被刷新并最终导致老化计时器超时,路由则变为不可用并从路由表中删除,虽然被立即从路由表中删除,但该条路由依然被保存在RIP数据库中(以便路由随时能够恢复),在老化计时器超时的同时,该路由的垃圾回收计时器也被立即启动。
值得注意的是,对于老化计时器已超时的失效RIP路由,依然会被包含在路由器对外发送的Response报文中,只不过路由的度量值被设置为16跳,即不可达。
垃圾回收计时器(Garbage-Collect Timer):垃圾回收计时器缺省被设置为120s.当一条RIP路由的老化计时器超时,该条路由会变为不可用并被设备从路由表中删除,但是依然被保存在RIP数据库中,同时设备立即为该路由启动垃圾回收计时器。
在垃圾回收计时器计数的这段时间, RIP路由器在泛洪路由更新时将该条路由的度量值设置为16跳,以便告知其他路由器关于该网络的不可达情况。
若连该计时器也超时,则路由便被彻底删除。在RIP配置视图下,使用times rip命令可以修改上述三个计时器的时间值,该命令可指定三个参数,分别对应RIP的路由更新时间间隔、老化时间以及垃圾回收时间。
如timers rip 35 190 200
6 Silent-Interface(静默接口)
一个RIP接口一旦被指定为Silent-Interface,则该接口将不再发送RIP报文,而,只是被动地接收RIP报文,也就是只收不发。
Silent-Interface接口仅仅是不向外泛洪Response报文,但是它依然可以接收Response报文。