首页 > 代码库 > rip路由协议 细节分析及实例配置【完整版】

rip路由协议 细节分析及实例配置【完整版】

rip路由协议 细节分析及实例配置【完整版】

RIP呢,这是一个比较重要的知识点,所以它的知识覆盖面很广泛;但是呢,我将会对碰到的问题进行一些分析解刨(主要是为了帮助自己理清思维);也希望能够从中发现自己不足的问题,也希望能够找到一些比较冷僻的问题,这样子才会有意思多了。

 技术分享

先上图,这个就是我准备做实验的基本用图了。现在已经按照图上标注的IP将所有基本配置设置好了。

在这个实验中,大多数都是基于ripv1,只有在需要比较的时候才会把版本改成ripv2,然后判断完之后再切换为ripv1;

 

 

第一步:测试连通性;

在配置rip之前,先对没有进行任何配置的拓扑图进行一些测试;

【1】因为通过查看路由表:(因为是直连链路。所以R1有到达R2的路由;同理R2上面也有如何到达R1路由器的路由:)

 技术分享

所以我尝试用PC1去ping通AR2的G0/0/1端口:(因为所有的PC机的默认网关都是指向路由器)

但是会显示超时;

技术分享

这是为什么呢?

 技术分享

所以这个时候各个路由器下的网段都没有互联起来。需要使用一种协议来使各个网段能够互相知晓;

 

第二步:配置rip

配置rip之前先查看下路由表信息;

[R1]display ip routing-table

 

 技术分享


[R1]rip

[R1-rip-1]network 192.168.14.0           宣告网络;该地址一定是自然网段的地址

[R1-rip-1]network 192.168.12.0           不能是子网地址;

[R1-rip-1]network 192.168.1.0            (使能了所有的路由器)

自然网段就是A,B,C类网络地址;所以不需要掩码。每个ip地址的范围就决定了属于的类型;

[R1]display ip routing-table protocol rip    使用这个命令查看rip的路由;


 

技术分享

但是我们看到并没有任何rip路由,这是因为我们只是启动了R1的rip协议并且通告。但是其他路由器却并没有使能rip,导致没有路由器能够响应R1的通告。所以没有信息;

 技术分享

但是我们从这张表中发现:所有的rip都只是建立了“直连路由”找不到的路由;

 

第三步:解决发现的问题

----------------中断-----------华丽的分割线----------------------------

【问题】这里就发现了一个问题:

rip到底建立了相邻路由器之间的路由(因为优先级不够不显示)而没有在表中显示?

还是说rip根本就没有建立相邻路由器之间的路由呢?

 

【1】、首先我考虑了是否可以吧直连路由的优先级修改一下。但是现实是残酷的:

 技术分享

【2】所以我准备修改下rip的优先级:

 技术分享

但是也残酷啊,因为允许修改的最小值才是1.别个直连链路是0啊0啊!

【3】所以只有间接测试了!

 技术分享

使用这张图:因为在没有做任何配置的情况下,从R6直接pingR8是不能到达的;

所以准备在这个网络中运行rip协议,并且设置一条静态路由;

  修改rip路由的优先级,看是否路由表中会出现rip协议产生的路由;

[R8]ip route-static 10.0.1.2 24 10.0.1.1

[R6]ip route-static 10.0.1.0 24 10.0.0.2

当我建立了rip然后准备通告的时候。又有问题发生了:

 技术分享

 

这里并不能通告10.0.1.0   这是为啥子呢?!

这个应该和network只能通告自然网段有关系吧:(既然碰到这个知识点了就先分析下)

 技术分享

不过也没关系,反正10.0.1.0也属于A类网段;所以我们只需要通告

[R7-rip-1]network 10.0.0.0

照样能在每个路由器之间发现rip的路由:

 技术分享 

技术分享

这个时候为了验证之前的问题:我将修改优先级为1;

[R6/7/8-rip-1]preference 1

 技术分享

技术分享

我们发现:当我们修改了优先级之后:使用命令

[R6]display ip routing-table之后;

在整体路由表中,看不到优先级比较小的rip路由;只能看到静态路由;

【结论】

[R6]display ip routing-table       -------查看整体路由表

使用这个命令查看的是整体路由表,说明整体路由表是会自动隐藏优先级小的路由项的;

[R6]display ip routing-table protocol rip

使用这个命令会显示rip生成的所有的路由项;而不会因为优先级较小而隐藏;

所以也可以同时证明。Rip不会生成相邻路由间的路由条目;(因为没必要)

 

----------------接着上面话题-----------华丽的分割线----------------------

第四步:查看运行的rip参数

 技术分享

抓包分析:

 技术分享

从上往下看,可以看出以下信息: 

1、Frame 1

这个是帧的发送格式吧,我也不了解;看不懂上面的参数;不过这个也不是我们需要讨论的重点;

2、Ethernet II 

以太网封装:从这里可以看出来源MAC地址和目标MAC地址;

3、Internet Protocol

IP封装:从这里看到源IP地址和目标IP地址(广播地址)

4、User Dategram Protocol

UDP封装:看到目标端口和源端口号,这里并不像Telnet的服务器的端口号是任意 端口号,而是都是520;也说明RIP是应用层协议;

5、Routing Information Protocol

RIP数据:最里面的当然就是RIP的数据啦。

 技术分享

然后我们展开最后个RIP的数据内容:

 技术分享

这个是RIP的展开数据;可以看到里面的详细信息;

 

第五步:修改参数;

既然我们在上一个步骤中看到了很多的参数,所以这些参数到底是什么作用,然后这些参数应该怎么去修改呢?这是我们这个步骤需要讨论的问题:

1】首先呢,我们将R1的rip的版本更迭为ripv2;

然后我们查看路由表信息;

R1上没有任何rip路由:只有直连路由;

 技术分享

但是R2,和R3都有到达R1非直连的路由;

 技术分享

[R1-rip-1]version 2[R1-rip-1]display ip routing-table

[R1-rip-1]display ip routing-table protocol rip

首选进行抓包:

 技术分享

我们来分开展开下这两个包的详细信息:

 技术分享

 

RIP在ipv4有v1和v2两个版本;

在不指定版本的情况下,默认情况下ripv1的版本;

ripv1能接受V1和V2两个版本,但是只能发送V1的报文。

Ripv2只能接受和发送ripv2的报文,不能接受ripv1的报文;

 

2】修改定时器

在修改定时器之前,我们先还原R1设置的ripv2的版本;依旧将其设置为V1

rip中,定时器一共有三种:

1更新计时器:默认30s更新报文;

2超时计时器:默认时间180s;

3垃圾收集定时器:默认时间120s;       

  即从一个路由表失效到完全消失需要5分钟;

 

[R1-rip-1]timers rip 20 120 60             修改定时器时间,(分别对应的是:更新,超时,垃圾收集定时器)

[R1-GigabitEthernet0/0/0]undo rip output       停止发送rip报文;

[R1-GigabitEthernet0/0/0]display rip 1 database  查看rip发布数据库中的所有激活的路由;

 技术分享

我们可以发现三个定时器的参数已经发生了变化;

 

 

 在这里先补充下什么是undo rip output和undo rip input:

 技术分享

 

 

1.我们先观察更新报文;

修改了更新计时器的发送情况和默认更新计时器的对比:

 技术分享

 

2、观察超时定时器;

这时候使用在R1R2相连的接口上undo rip output;使其不再发送rip报文;查看定时器使发送的rip报文发生的变化;

[R1-GigabitEthernet0/0/0]undo rip output    停止发送rip报文

 

在这个时候, 我又发现个好玩的东西;

第六步:解决发现的问题

 

-------------先中断内容,开始说说路由环路-------华丽的分割线------------------

 技术分享

这是发现问题地方的截图:

 

1】先解释下什么是路由环路:在维护路由表信息的时候,如果在拓扑发生改变后,网络收敛缓慢产生了不协调或者矛盾的路由选择条目,就会发生路由环路的问题,这种条件下,路由器对无法到达的网络路由不予理睬,导致用户的数据包不停在网络上循环发送,最终造成网络资源的严重浪费。

 

2】产生路由环路的原因(摘抄自百度百科;虽然是思科的图,但是技术不分家~

 技术分享

如图所示,在网络11.4.0.0发生故障之前,所有的路由器都具有正确一致的路由表,网络是收敛的。在本例中,路径开销用跳数来计算,所以,每条链路的开销是1。路由器C与网络11.4.0.0直连,跳数为0。路由器B经过路由器到达网络11.4.0.0,跳数为1。路由器经过路由器B到达网络11.4.0.0,跳数为2
  如果网络11.4.0.0 故障,就可能会在路由器之间产生路由环路,下面是产生路由环路的步骤:
  1、当网络11.4.0.0 发生故障,路由器最先收到故障信息,路由器把网络11.4.0.0 设为不可达,并等待更新周期到来通告这一路由变化给相邻路由器。如果,路由器B的路由更新周期在路由器C之前到来,那么路由器C就会从路由器B那里学习到去往11.4.0.0的新路由(实际上,这一路由已经是错误路由了)。这样路由器C的路由表中就记录了一条错误路由(经过路由器B,可去往网络11.4.0.0,跳数增加到)。
  2、路由器学习了一条错误信息后,它会把这样的路由信息再次通告给路由器B,根据通告原则,路由器B也会更新这样一条错误路由信息,认为可以通过路由器C去往网络11.4.0.0,跳数增加到。
  3。这样,路由器 认为 可以通过路由器去往网络11.4.0.0,路由器认为 可以通过路由器去往网络11.4.0.0,就形成了环路。

 

 3】解决环路的几种方式:(水平分割,毒性逆转,触发更新常用;)

[R1-GigabitEthernet0/0/1]undo rip split-horizon    关闭水平分割;(默认开启)

[R2-GigabitEthernet0/0/1]rip poison-reverse       开启毒性逆转;(默认关闭)

水平分割

一种消除路由环路并加快网络收敛的方法是通过叫做水平分割的技术实现的。其规则就是不向原始路由更新来的方向再次发送路由更新信息

逆转

rip从某个接口接收到路由信息后,将该路由的开销设置为16,并从元接口发回邻居设备;利用这种方式,可以清楚对方路由表中的无用路由,这是超越水平分割的一个特列,这样保证所有的路由器都接受到了毒化的路由信息。

控制更新时间(即抑制计时器)

抑制计时器用于阻止定期更新的消息在不恰当的时间内重置一个已经坏掉的路由。抑制计时器告诉路由器把可能影响路由的任何改变暂时保持一段时间,抑制时间通常比更新信息发送到整个网络的时间要长。当路由器从邻居接收到以前能够访问的网络现在不能访问的更新后,就将该路由标记为不可访问,并启动一个抑制计时器,如果再次收到从邻居发送来的更新信息,包含一个比原来路径具有更好度量值的路由,就标记为可以访问,并取消抑制计时器。如果在抑制计时器超时之前从不同邻居收到的更新信息包含的度量值比以前的更差,更新将被忽略,这样可以有更多的时间让更新信息传遍整个网络。

触发更新

正常情况下,路由器会定期将路由表发送给邻居路由器。而触发更新就是立刻发送路由更新信息,以响应某些变化。检测到网络故障的路由器会立即发送一个更新信息给邻居路由器,并依次产生触发更新通知它们的邻居路由器,使整个网络上的路由器在最短的时间内收到更新信息,从而快速了解整个网络的变化。这样触发更新将有时间传遍整个网络,从而避免了已经损坏的路由重新插入到已经收到触发更新的邻居中,也就解决了路由环路的问题。

 

 

4】好了,接着说问题:【为了能够加快现象的产生:我将更新报文改为10s

 技术分享

 

我先将g0/0/1rip output 关闭后,在开启rip output 后:抓包是这样的:

 技术分享

发生这个的原因就是:水平分割:(防环的措施之一;默认开启)

在这里:因为之前关闭了R1的output功能:所以R2不会收到来自R1的rip的更新报文;当开启了rip 的output功能后:R2收到了R1更新报文:发现R1更新报文也通告了192.168.12.0这个网段的路由;所以R2知道了R1是相邻的;为了防止路由环路,于是就基于水平分割,在之后通告的报文中将192.168.12.0这个网段的路由的度量值设置为16;同时启动垃圾收集定时器(120s);等待这条通告路由的消失:

 技术分享

5】验证毒性逆转:

毒性逆转的优先级是高于水平分割:但是毒性逆转是默认关闭的;

在这个时候,所有的rip都恢复正常了:

 技术分享

[R1-GigabitEthernet0/0/1]rip poison-reverse

[R2-GigabitEthernet0/0/1]rip poison-reverse

 

这时候我们在对R2g0/0/0进行抓包:

 技术分享

 

-------------先中断内容,开始说说路由环路-------华丽的分割线------------------

【接】第五步:修改参数;

 

接着之前的说:如何观察超时定时器呢?

为了方便观察:我将前面的毒性逆转给关闭了;

[R1-GigabitEthernet0/0/0]undo rip input

 技术分享

如图所示:将路由器R1g0/0/1的端口设置为不接受任何更新报文,自然也学习不到R4的路由信息了。这时候我们在对R1R2之间的报文进行抓包:

 

【这是自动开启了触发更新吧?!】

我没有能够抓取到超时计时器的现象,是因为每个接口都默认开启了触发更新吗?就算我关闭了R1G0/0/1接口的rip input,然后同时在R2G0/0/2接口上进行抓包,还是没能观察到超时定时器;好像超时计时器的180s从来没有出现过;到时垃圾收集定时器总是能观察到;

 技术分享

 

3】配置rip路由附加度量值

技术分享

 

[R1-GigabitEthernet0/0/1]rip metricin 3      配置metricin为3,

[R2-GigabitEthernet0/0/1]rip metricout 2     配置metricout为2

[R1-GigabitEthernet0/0/1]display rip 1 database       查看rip的数据库;

 

技术分享

技术分享

通过查看路由表,我们发现,如果报文要从R2到达R3时,下一跳地址是192.168.23.3;(就是上面那一条路);现在我们要对修改cost值来改变路径;

[R2] g0//-GigabitEthernet0//]rip metricout

技术分享

这时候通过查看R3的路由表信息,发现R3R2会选择走下面开销为2的路了。

说明了metricout能够影响其他设备的选择;)

 

[R2-GigabitEthernet0/0/2]undo rip metricout 先取消R2的metricout

[R3]int g0/0/2[R3-GigabitEthernet0/0/2]rip metricin 10  在R3上面增加metricin

技术分享

这时候通过查看R3的路由信息,发现R3R2会选择走下面开销为2的路了。

(这也说明了metricin能够影响本地设备的选择)

 

 

第七步:安全性考虑

1】配置rip抑制接口

1、在路由器和主机之间配置抑制接口;

在RIPv1中,路由信息都是通过广播形式传播的,但是这就有一个问题,rip的报文会将一些信息泄露出去,所以为了能够保证信息的安全,所以在必要地方都要设置抑制接口;比如说可以在连接外界(和主机相连的接口)设置抑制接口:

什么是rip抑制接口呢?

RIP支持抑制接口的配置,即配置后禁止接口发送更新报文,但是此接口所在的网段路由可以发布出去; 默认状态是不抑制状态;

 技术分享

默认情况下是没有配置抑制端口的;

 技术分享

但是通过抓包。R1都会发送更新报文到PC1上,然后PC1都会返回一个目的不可达的ICMP报文;但是坏人可以通过分析发送来的RIP更新报文,从而获取内网的相应信息;

[R1]rip 1[R1-rip-1]silent-interface g0/0/2    配置抑制端口


我们可以发现,配置了抑制端口的端口,没有任何报文在链路上传输,保证了安全性;

 技术分享

 

 

当然,可以做到这个要求的除了抑制端口,还可以使用:

[R1-GigabitEthernet0/0/2]undo rip

[R1-GigabitEthernet0/0/2]undo rip output   (关闭端口的rip 发送)

[R1-GigabitEthernet0/0/2]undo rip input

不过silent-interface只接受报文,但不能发送报文,优先级大于在接口下配置的undo rip output;

 

2、在路由器之间配置抑制接口

 技术分享

  就在如图上两个路由器之间设置抑制端口吧;

R4上面设置抑制端口;

[R4]rip 1[R4-rip-1]silent-interface g0/0/0           设置抑制端口

查看R4

技术分享

通过上图我们可以发现:原来在R1上存在的到达192.168.4.10的路由已经不存在了。这是因为抑制端口导致R4不能对自己的路由信息进行通告。所以这个时候R1也不会知道如何到达192.168.4.10这个网段了。

 技术分享

自然使用PC1pingPC4是不可能ping的通的;

 

 

所以,该如何使配置了抑制端口的两端能够继续建立rip更新呢?

 

3、单播更新

[R1-rip-1]peer 192.168.14.4[R4-rip-1]peer 192.168.14.1这个时候:[R4-rip-1]display ip routing-table protocol rip

从这里就能看出R4已经通过单播更新获取到通往192.168.1.0网段的路由信息了;

 

【注意】

1当使用silent-interface命令配置抑制接口后,在指定单薄更新的目的地址后,单播更新有效;

2如果在接口下使用undo rip output命令来配置抑制接口,即使在指定单薄更新的目的地址也是无法发送更新的路由条目的;

3、但是使用抑制端口的优先级却大于undo rip output

 

2】在ripv2设置认证;

RIPv1没有密码验证;RIPv2有密码验证:

MD5密文验证但是一种单项消息摘要算法或安全散列函数

 技术分享

 

1、基本配置,按照要求把所有的配置好

2、搭建RIP网络

技术分享

 [AR1-rip-1]rip                   打开rip

[AR1-rip-1]version 2           切换到RIPv2

[AR1-rip-1]network 192.168.10.0   设置自然网段为192.168.10.0[AR1-rip-1]network 10.0.0.0       设置自然网段为10.0.0.0

技术分享

 

已经能够正常ping通

3、模拟网络攻击;

将攻击者介入网络,将地址配置为10.0.12.3,与公司路由器在同一个网段,配置RIPv2协议,通告该网段

[AR3-LoopBack0]ip address . -LoopBack1]ip address .       配置欺骗的环回接口(和主机一样)
                           并在协议中通告这两个欺骗网段

<AR1>display ip routing-table   然后查看r1的路由表,发现出现了欺骗的网段路由;

发送ping包在R3抓包,发现从pc1发来的包(负载均衡)

 

4、配置RIPv2简单验证;(避免发生欺骗)

[AR1]interface GigabitEthernet 0/0/1[AR1-GigabitEthernet0/0/1]rip authentication-mode simple huawei

[AR2-GigabitEthernet0/0/1]rip authentication-mode simple huawei

过一段时间,路由表恢复很长,配置了rip认证之后,密码不对的就会认为非法让后丢弃;

 

5、配置RIPv2 MD5 密文验证;(之前的简单验证是明文)

[AR1-GigabitEthernet0/0/1]undo rip authentication-mode     先取消之前的rip认证模式

[AR1-GigabitEthernet0/0/1]rip authentication-mode md5 usual huawei  设置md5模式

然后在抓包,然后就看不到啦。看不到。

 

 

剩下就是补充下相关知识点:

一、rip路由协议基本配置

RIP目前有两个版本:RIP1v1和RIPv2,RIPv2针对v1是扩充;能够便携的携带跟多的信息量,并增强了安全性能;RIP V1 和 V2都是基于UDP的协议;

二、ripv2的认证

MD5密文验证但是一种单项消息摘要算法或安全散列函数

三、rip路由协议的汇总

ripv1是有类别路由协议,无法支持路由聚合,所有的路由会被自动汇总为有类路由;

ripv1只发布汇总之后的有类路由,ripv1默认开启自动汇总切无法关闭,也不支持手动汇总;

ripv2是无类路由协议;支持手动和自动路由汇总两种方式;

ripv2支持自动汇总,默认是开启的可以关闭;如果以太网接口启用了水平分割或者毒性逆转的接口,默认自动汇总就就会失效;

四、配置rip

RIP在ipv4有v1和v2两个版本,在不指定版本的情况下,默认情况下能接受V1和V2两个版本,但是只能发送V1的版本。

在指定版本的情况下,ripv1只能接受和发送v1的报文,ripv2只能接受和发送v2的报文

 

更新计时器:默认30s更新报文;

超时计时器:默认时间180s;

垃圾收集定时器:默认时间120s;       即从一个路由表失效到完全消失需要5分钟;

 

RIP默认的协议优先级为100;

 

R1采用版本1,选择广播发送更新。R2采用版本22.选择组播发送更新;*发送至224.0.0.9

R1没有明确指明版本,可以接受V1和V2,但是只发送V1,所以R1里面有rip路由信息;

R2指明的版本,只能接受和发送V2,所以R2里面不会存在rip路由器信息;

 

R1会把静态路由加入IP路由表中,因为若同一条路由条目来自两个不同协议,、

且协议优先级一样,路由器会根据协议内部优先级来选择最优路由,内部优先级也就是协议优先级的初始值。

 

五、配置rip抑制接口以及单播更新;

RIP支持抑制接口的配置,即配置后禁止接口发送更新报文,但是此接口所在的网段路由可以发布出去; 默认状态是不抑制状态;

   silent-interface只接受报文,但不能发送报文,优先级大于在接口下配置的undo rip output;

   undo rip iniput:禁止接口接受RIP更新报文;

 

当使用silent-interface命令配置抑制接口后,在指定单薄更新的目的地址后,单播更新有效;

如果在接口下使用undo rip output命令来配置抑制接口,即使在指定单薄更新的目的地址也是无法发送更新的路由条目的;

六、rip与不连续子网

rip会在主网边界自动汇总,当汇总发生时,

汇总的子网路由在边界处会被抑制,只会通告主网路由;

 

连续子网是指:所连接的子网属于同一主网,

不连续子网指:相同主网下的子网被另一主网分隔;

 

个人理解:不连续子网就不能通告所有的路由;会在中间隔断

 

出现这种情况的原因:由于采用了ripv1,在R2和R4分别接受到了10.0.12.0/24

10.0.12.0/24的路由条目时,默认打开了自动有类汇总功能,所以在主网边界

向外发送路由信息的时候都汇总了10.0.0.8/8,发送给R3,最终在R3上由于收到

了两条目的网段相同,代价也相同的路由条目;

 

RIPv2的环境中,因为默认情况下自动汇总是开启的,所以在设计网络中,

应该尽量不要出现同主网的子网被其他主网分割;

如果出现了。关闭自动汇总是最好的做法,不足之处是路由条目会增加;

 

七、rip的水平分割问题以及触发更新

四、水平分割:指的是rip从某个接口接收到的路由信息,不会从该接口在发回给邻居设备,这样不但减少了宽带消耗,还可以防止路由环路;默认开启;

触发更新:当路由信息发生变化时,运行rip的设备会立即向邻居设备发送更新报文,而不必等待定时更新;缩短了手链时间;

毒性逆转:rip从某个接口接收到路由信息后,将该路由的开销设置为16,并从元接口发回邻居设备;利用这种方式,可以清楚对方路由表中的无用路由,

          如果同时配置了毒性逆转和水平分割,则会选择毒性逆转;毒性逆转默认关闭的;

 

ripv2和ripv1都支持水平分割、触发更新和毒性逆转的功能;


本文出自 “12630368” 博客,请务必保留此出处http://12640368.blog.51cto.com/12630368/1908151

rip路由协议 细节分析及实例配置【完整版】