rip的基本概念
rip是基于距离矢量算法的路由协议,是一种较为简单的内部网关协议,它使用跳数来作为度量,衡量到达目的网络的距离。rip是通过UDP报文进行路由信息的交换,使用UDP的520端口。
rip共有两个版本分别是ripv1和ripv2,其中ripv2是在ripv1的基础上进行的扩充。
rip是用于结构较简单规模较小的网络,对于一些规模较大,发杂性较高的网络来说,一般是不会使用rip协议的。
rip的基本原理
在rip网络中,默认情况下,设备到它直接相连网络的跳数为0,通过一个设备可到的网络的跳数为1,其余依此类推。也就是说,度量值等于从本网络到达目的网络间的设备数量。为限制收敛时间,RIP规定度量值取0~15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。由于这个限制,使得RIP不可能在大型网络中得到应用。
rip共享的是自己的路由信息,所以在rip报文中装的是路由信息。
rip路由表的形成
在rip刚启动时候的路由表中,只有本路由器的直连路由条目,rip协议就是共享的我们指定的直连的路由信息,通过相邻设备互相学习路由表项,才能实现各网段路由互通。
过程
rip协议启动之后,路由器会向与自己相连的路由器广播发送一个request报文。
当路由器接收到request报文后,就把自己的rip路由表封装在response报文内,向该接口对应的网络广播。
路由器会根据接收到的response报文形成自己的路由表。
值得注意的是,rip协议是使用的贝尔曼算法来进行路由更新的。
关于rip的更新与维护
RIP协议在更新和维护路由信息时主要使用四个定时器:
更新定时器(Update timer):当此定时器超时时,立即发送更新报文。
老化定时器(Age timer):RIP设备如果在老化时间内没有收到邻居发来的路由更新报文,则认为该路由不可达。
垃圾收集定时器(Garbage-collect timer):如果在垃圾收集时间内不可达路由没有收到来自同一邻居的更新,则该路由将被从RIP路由表中彻底删除。
抑制定时器(Suppress timer):当RIP设备收到对端的路由更新,其cost为16,对应路由进入抑制状态,并启动抑制定时器。为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由cost小于16的更新,也不接受。当抑制定时器超时后,就重新允许接受对端发送的路由更新报文。
RIP路由与定时器之间的关系:
RIP的更新信息发布是由更新定时器控制的,默认为每30秒发送一次。
每一条路由表项对应两个定时器:老化定时器和垃圾收集定时器。当学到一条路由并添加到RIP路由表中时,老化定时器启动。如果老化定时器超时,设备仍没有收到邻居发来的更新报文,则把该路由的度量值置为16(表示路由不可达),并启动垃圾收集定时器。如果垃圾收集定时器超时,设备仍然没有收到更新报文,则在RIP路由表中删除该路由。
触发更新
触发更新是指当路由信息发生变化时,立即向邻居设备发送触发更新报文,而不用等待更新定时器超时,从而避免产生路由环路。
上面所写的,ripv1与ripv2都具备,接下介绍ripv2的增强特性
RIPv1(即RIP version1)是有类别路由协议(Classful Routing Protocol),它只支持以广播方式发布协议报文,报文格式如图1所示。RIP-1的协议报文中没有携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1无法支持路由聚合,也不支持不连续子网(Discontiguous Subnet)。
RIPv2(即RIP version2)是一种无分类路由协议(Classless Routing Protocol),报文格式如图
与RIPv1相比,RIPv2具有以下优势:
-
支持外部路由标记(Route Tag),可以在路由策略中根据Tag对路由进行灵活的控制。
-
报文中携带掩码信息,支持路由聚合和CIDR(Classless Inter-Domain Routing)。
-
支持指定下一跳,在广播网上可以选择到目的网段最优下一跳地址。
-
支持以组播方式发送更新报文,只有支持RIPv2的设备才能接收协议报文,减少资源消耗。
-
支持对协议报文进行验证,增强安全性。
RIPv2路由聚合(汇总)
路由聚合的原理是,同一个自然网段内的不同子网的路由在向外(其它网段)发送时聚合成一个网段的路由发送。
RIPv1的协议报文中没有携带掩码信息,故RIPv1发布的就是自然掩码的路由。RIPv2支持路由聚合,因为RIPv2报文携带掩码位,所以支持子网划分。在RIPv2中进行路由聚合可提高大型网络的可扩展性和效率,缩减路由表。
路由聚合有两种方式:
-
基于RIP进程的有类聚合:
聚合后的路由使用自然掩码的路由形式发布。比如,对于10.1.1.0/24(metric=2)和10.1.2.0/24(metric=3)这两条路由,会聚合成自然网段路由10.0.0.0/8(metric=2)。RIP–2聚合是按类聚合的,聚合得到最优的metric值。
-
基于接口的聚合:
用户可以指定聚合地址。比如,对于10.1.1.0/24(metric=2)和10.1.2.0/24(metric=3)这两条路由,可以在指定接口上配置聚合路由10.1.0.0/16(metric=2)来代替原始路由。
在华为设备中可以使用summary命令启动路由自动汇总功能。
使用undo summary命令关闭自动汇总,可以使用手动汇总。
手动汇总使用rip summary-address命令 ,手动汇总的优先级高于自动汇总。
注意:必须在接口视图下执行,而且要区分接口
这个路由汇总是将本路由器连接的多条路由汇总在一起发出去的,注意不要搞错顺序性,它并不是将收到的路由信息再进行汇总,而是将本地连接的多条直连路由汇总以后再发出去的。
# 使能RIPv2有类聚合。
<Huawei> system-view [Huawei] rip 1 [Huawei-rip-1] version 2 [Huawei-rip-1] summary
# 在配置了水平分割后使能RIPv2有类聚合。
<Huawei> system-view [Huawei] rip 1 [Huawei-rip-1] summary always
水平分割
水平分割(Split Horizon)的原理是,RIP从某个接口学到的路由,不会从该接口再发回给邻居路由器。这样不但减少了带宽消耗,还可以防止路由环路。
水平分割在不同网络中实现有所区别,分为按照接口和按照邻居进行水平分割。广播网、P2P和P2MP网络中是按照接口进行水平分割的,如图所示。
RouterA会向RouterB发送到网络10.0.0.0/8的路由信息,如果没有配置水平分割,RouterB会将从RouterA学习到的这条路由再发送回给RouterA。这样,RouterA可以学习到两条到达10.0.0.0/8网络的路由:1.跳数为0的直连路由;2.下一跳指向RouterB,且跳数为2的路由。
但是在RouterA的RIP路由表中只有直连路由才是活跃的。当RouterA到网络10.0.0.0的路由变成不可达,并且RouterB还没有收到路由不可达的信息时,RouterB会继续向RouterA发送10.0.0.0/8可达的路由信息。即,RouterA会接受到错误的路由信息,认为可以通过RouterB到达10.0.0.0/8网络;而RouterB仍旧认为可以通过RouterA到达10.0.0.0/8网络,从而形成路由环路。配置水平分割后,RouterB将不会再把到网络10.0.0.0/8的路由发回给RouterA,由此避免了路由环路的产生。
对于NBMA(Non-Broadcast Multiple Access)网络,由于一个接口上连接多个邻居,所以是按照邻居进行水平分割的。路由就会按照单播方式发送,同一接口上收到的路由可以按邻居进行区分。从某一接口的对端邻居处学习到路由,不会再通过该接口发送回去。
如图所示,在NBMA网络配置了水平分割之后,RouterA会将从RouterB学习到的20.0.0.0/8路由发送给RouterC,但是不会再发送回给RouterB。
在华为设备中配置RIP水平分割的命令为rip split-horizon,,它可以启动RIP的水平分割功能,
而在undo rip split-horizon,则就关闭RIP的水平分割功能。
需要注意的是,水平分割需要在接口视图下配置。
毒性反转
毒性反转(Poison Reverse)的原理是,RIP从某个接口学到路由后,从原接口发回邻居路由器,并将该路由的开销设置为16(即指明该路由不可达)。利用这种方式,可以清除对方路由表中的无用路由。
如图所示,配置毒性反转后,RouterB在接收到从RouterA发来的路由后,向RouterA发送一个这条路由不可达的消息(将该路由的开销设置为16),这样RouterA就不会再从RouterB学到这条可达路由,因此就可以避免路由环路的产生。
在华为设备中配置RIP毒性反转的命令为rip poison-reverse,它可以启动RIP的毒性反转功能,
而在undo rip poison-reverse,则就关闭RIP的毒性反转功能。
需要注意的是,配置毒性反转的话,需要在接口视图下配置。
如果同时打开水平分割与毒性反转,则只有毒性反转会生效。
多进程与多实例
RIP多进程允许为指定的RIP进程关联一组接口,从而保证该进程进行的所有协议操作都仅限于这一组接口。这样,就可以实现一台设备有多个RIP进程,不同RIP进程之间互不影响,它们之间的路由交互相当于不同路由协议之间的路由交互。
RIP多实例是为每个VPN实例绑定一个RIP进程,从而实现VPN实例与指定进程下的所有接口相关联。
RIP认证
RIPv2支持对协议报文进行认证,并提供简单认证和MD5认证两种方式,增强安全性。其中,简单认证使用未加密的认证字段随报文一同传送,其安全性比MD5认证要低。
在华为设备中的命令为rip authentication-mode
参数 | 参数说明 | 取值 |
---|---|---|
simple | 指定使用简单认证方式。 | - |
md5 | 表示使用MD5密文认证方式。 | - |
usual | 表示MD5密文认证报文使用通用报文格式(私有标准)。 | - |
nonstandard | 表示MD5密文认证报文使用非标准报文格式(IETF标准)。 | - |
plain | 表示只能键入明文认证密码,在查看配置文件时以明文方式显示。注意: 如果使用plain选项,密码将以明文形式保存在配置文件中,存在安全隐患。建议使用cipher选项,将密码加密保存。 | - |
plain-text | 指定明文方式显示的认证密码。 | 字符串形式,可以为字母或数字,区分大小写,不支持空格。当认证模式为simple或md5 usual时,长度为1~16;认证模式为md5 nonstandard或hmac-sha256时,长度为1~255。 |
cipher | 表示可以键入明文或密文认证密码,但在查看配置文件时均以密文方式显示。 | - |
password-key | 指定密文方式显示的认证密码。 | 字符串形式,可以为字母或数字,区分大小写,不支持空格。当认证模式为simple或md5 usual时,长度为1~16的明文或24和32的密文;认证模式为md5 nonstandard或hmac-sha256时,长度为1~255的明文或20~392的密文。 |
keychain keychain-name | 指定使用密钥链表认证方式。 | 字符串形式,长度范围是1~47,不区分大小写。字符不包括问号和空格,但是当输入的字符串两端使用双引号时,可在字符串中输入空格。 |
key-id | 指定MD5密文认证标识符。 | 整数形式,取值范围是1~255。 |
hmac-sha256 | 指定HMAC-SHA256密文验证方式。 | - |
在配置rip认证的时候,我们需要在本区域的所参与路由的路由器上都配置认证,如果只配置一台或几台路由器,会造成部分设备联不通,需要注意的是,我们在配置认证的时候,需要在接口视图下配置。