目录
前言
学IE以前认为IA很简单,学IE以后发现IA最重要;好多IE学员拿到证以后还不知道什么是二层转发,什么是三层转发;这些都是IA的基础,基础扎实学IE才会顺风顺水一举拿下,学IA一定要做到对知识点一公里深一厘米宽,知识点延展不用太宽。
没有什么知识点是一个实验解决不了的,如果有就再抓个包!
RIP协议
路由信息协议RIP(Routing Information Protocol)的简称,它是一种距离矢量(Distance-Vector)算法的协议,使用跳数作为度量来衡量到达目的网络的距离。
RIP主要用于规模较小的网络中。
RIP通过UDP报文进行路由信息的交换,使用的端口号为520。
RIP包括RIP-1与RIP-2两个版本,RIP-2对RIP-1进行了扩充,使其更具优势。
特点
- 配置简单
- 易于维护
- 适合小型网络
RIP是一种比较简单的内部网关协议。RIP使用了基于矢量的贝尔曼-福特算法(Bellman-Ford)来计算到达目的网络的最佳路径。
最初的RIP协议开发时间较早,所以在带宽、配置和管理方面要求也较低,因此,RIP主要适合于规模较小的网络中。
RIP协议中定义的相关参数也比较少。例如RIP-1,它不支持VLSM和CIDR,也不支持认证。
基本原理
RIP是一种基于距离矢量(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量值来衡量到达目的地址的距离。在RIP网络中,缺省情况下,设备到与它直接相连网络的跳数为0,通过一个设备可达的网络的跳数为1,其余以此类推。也就是说,度量值等于从本网络到达目的网络间的设备数量。为限制收敛时间,RIP规定度量值取0~15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。由于这个限制,使得RIP不可能在大型网络中得到应用。
RIP路由表的形成
RIP启动时的初始路由表仅包含本设备的一些直连接口路由。通过相邻设备互相学习路由表项,才能实现各网段路由互通。
RIP路由形成过程如上图
- RIP协议启动之后,RouterA会向相邻的路由器广播一个Request报文。
- 当RouterB从接口接收到RouterA发送的Request报文后,把自己的RIP路由表封装在Response报文内,然后向该接口对应的网络广播。
- RouterA根据RouterB发送的Response报文,形成自己的路由表。
做实验抓包看一下RIP路由形成过程
没运行RIP之前,只能看到直连路由。
运行RIP之后,抓包可以看出AR1广播发送Request报文。
AR2收到AR1发送的Request报文后,将自己的路由表封装在Response报文中广播发送。
RIP的更新与维护
RIP协议在更新和维护路由信息时主要使用四个定时器:
- 更新定时器(Update timer):当此定时器超时时,立即发送更新报文。默认为30秒。
- 老化定时器(Age timer):RIP设备如果在老化时间内没有收到邻居发来的路由更新报文,则认为该路由不可达。默认为180秒。
- 垃圾收集定时器(Garbage-collect timer):如果在垃圾收集时间内不可达路由没有收到来自同一邻居的更新,则该路由将被从RIP路由表中彻底删除。默认为120秒。
- 抑制定时器(Suppress timer):当RIP设备收到对端的路由更新,其cost为16,对应路由进入抑制状态,并启动抑制定时器。为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由cost小于16的更新,也不接受。当抑制定时器超时后,就重新允许接受对端发送的路由更新报文。
RIP路由与定时器之间关系:
- RIP的更新信息发布是由更新定时器抑制的,默认为每30秒发送一次。
- 每一条路由表项对应两个定时器:老化定时器与垃圾收集定时器。当学习到一条路由并添加到RIP路由表中时,老化定时器超时,设备仍没有收到邻居发来的更新报文,则在RIP数据库中把该路由的度量值置位16(表示路由不可达,路由表中删除),并启动垃圾收集定时器。同时设备对外发送不可达路由更新请求报文,如果垃圾收集定时器超时,设备仍然没有收到更新报文,则在RIP数据库中删除该路由。
关于老化定时器与垃圾收集定时器实验
首先描述一下display rip route命令的参数
项目 | 描述 |
Destination/Mask | 目的IP地址/掩码长度 |
Nexthop | 路由的下一跳 |
Cost | 路由权值 |
Tag | 区分内部RIP路由和外部路由的标识
|
Flags | 第一个字符指示此路由是RIP或TRIP路由,第二个字符指明该路由状态
|
Sec | 此路由项处于某种状态的时间 |
AR1的RIP数据库正常显示如下:
在AR2的rip进程下输入undo network 2.0.0.0,观察AR1的RIP数据库,Flags位由RA变为RG,启动垃圾收集定时器,120秒后仍没收到该路由更新报文,将该路由从RIP数据库中删除。
触发更新
触发更新是指当路由信息发生变化时,立即向邻居设备发送触发更新报文,而不用等待更新定时器超时,从而避免产生路由环路。
当网络10.4.0.0不可达时,RouterC最先得到这一信息。
- 如果设备不具备触发更新功能,RouterC发现网络故障之后,需要等待更新定时器超时。在等待过程中,如果RouterB的更新报文传到了RouterC,RouterC就会学到RouterB的去往10.4.0.0的错误路由。这样RouterB与RouterC上去往网络10.4.0.0的路由都指向对方从而形成路由环路。
- 如果设备具备触发更新功能,RouterC发现网络故障之后,不必等待更新定时器超时,立即发送路由更新给RouterB,这样就避免了路由环路的产生。
RIP-2的增强特性
RIP包括RIP-1与RIP-2两个版本,RIP-2对RIP-1进行了扩充。
RIP-1与RIP-2的比较
RIP-1(即RIP version1)是有类别路由协议(Classful Routing Protocol),它只支持以广播方式发布协议报文。RIP-1的协议报文中没有携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1无法支持路由聚合,也不支持不连续子网(Discontiguous Subnet)。
RIP-2(即RIP version2)是一种无分类路由协议(Classless Routing Protocol),有两种报文传送方式:广播方式与组播方式,缺省将采用组播方式发送报文,使用的组播地址为224.0.0.9。当接口运行RIP-2广播方式时,也可接收RIP-1的报文。
与RIP-1相比,RIP-2有如下优势:
- 支持外部路由标记(Route Tag),可以在路由策略中根据Tag对路由进行灵活的控制。
- 报文中携带掩码信息,支持路由聚合与CIDR(Classless Inter-Domain Routing)。
- 支持指定下一跳,在广播网上可以选择到目的网段的最优下一跳地址。
- 支持以组播方式发送广播报文,只有支持RIP-2的设备才能接收协议报文,减少资源消耗。
- 支持对协议报文进行验证,增强安全性。
RIP-2路由聚合
路由聚合的原理是,同一个自然网段内的不同子网的路由在向外(其他网段)发送时聚合成一个网段的路由发送。
RIP-1的协议报文没有携带掩码信息,所以RIP-1发布的就是自然掩码的路由。RIP-2支持路由聚合,因为RIP-2报文携带掩码位,所以支持子网划分。在RIP-2中进行路由聚合可提高大型网络的可扩展性与效率,缩减路由表。
路由聚合有两种方式:
- 基于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.1.0/16(metric=2)来代替原始路由。
水平分割与毒性翻转
水平分割
水平分割(Split Horizon)的原理是,RIP从某个接口学到的路由,不会从该接口再发回给邻居路由器。这样不但减少了带宽消耗,还可以防止路由环路。
水平分割在不同网络中实现有所区别,分为按照接口与按照邻居进行水平分割。
广播网、P2P与P2MP网络中是按照接口进行水平分割的。如下图所示:
RouterA会向RouterB发送到网络10.0.0.0/8的路由信息,如果没有配置水平分割,RouterB会将从RouterA学习到的这条路由再发送回给RouterA。这样,RouterA可以学习到两条到达10.0.0.0/8网络的路由:跳数为0的直连路由;下一跳指向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学习到的172.16.0.0/16路由发送给RouterC,但是不会再发送回给RouterB。
配置命令:接口视图:rip split-horizon
- 在NBMA网络中,缺省情况未使能水平分割功能。
- 同时配置水平分割与毒性反转,只有毒性反转生效。
- 缺省情况下,水平分割默认开启,毒性反转默认关闭。
毒性反转
毒性反转(Posion Reverse)原理是,RIP从某个接口学到路由后,从原端口发回邻居路由器,并将该路由的开销设置为16(即指明该路由不可达)。利用这种方式,可以清除对方路由表中的无用路由。
配置毒性反转后,RouterB在接收到RouterA发来的路由后,向RouterA发送一个这条路由不可达的消息(将该路由开销设置为16),这样RouterA就不会再从RouterB学到这条可达路由,因此就可以避免路由环路的产生。
配置命令:接口视图:rip poison-reverse
查看接口水平分割与毒性翻转的命令:display rip 1 interface G0/0/0 verbose
多实例与多进程
RIP多进程允许为指定的RIP进程关联一组接口,从而保证该进程进行的所有协议操作都仅限于这一组接口。这样,就可以实现一台设备有多个RIP进程,不同RIP进程之间互不影响,它们之间的路由交互相当于不同路由协议之间的路由交互。
RIP多实例是为每个VPN实例绑定一个RIP进程,从而实现VPN实例与指定进程下的所有接口相关联。
RIP与BFD联动
网络上的链路故障会导致路由器重新计算路由,因此缩短路由协议的收敛时间对于提高网络性能是非常重要的。加快故障感知速度并快速通告给路由协议是一种可行的方案。
双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测邻居路由器之间链路故障的检测机制,它通常与路由协议联动,通过快速感知链路故障并通告使得路由协议能够快速的重新收敛,从而减少由于拓扑变化导致的流量丢失。在RIP与BFD联动中,BFD可以快速检测到链路故障并通知RIP协议,从而加快RIP协议对于网络拓扑变化的响应。
RIP协议在使用BFD前后的链路故障检测机制及收敛速度的如下:
是否配置BFD检测 | 链路故障检测机制 | 收敛速度 |
否 | RIP老化定时器超时(默认是180s) | 秒级(>180s) |
是 | BFD会话状态为Down | 秒级(<30s) |
原理
路由与BFD联动包括静态BFD与动态BFD两种模式:
- 静态BFD
静态BFD是指通过命令行手工配置BFD会话参数,包括配置了本地标识符与远端标识符等,手工下发BFD会话建立请求。
- 动态BFD
动态BFD是指由路由协议动态触发BFD会话建立。动态BFD中,本地标识符是动态分配的,远端标识符是从对端的BFD报文中获取。路由协议在建立了新的邻居关系时,将对应的参数及检测参数(包括目的地址、源地址等)通告给BFD,BFD根据收到的参数建立起会话。当发生链路故障时,联动了BFD的路由协议可以快速感知到BFD会话状态为Down,从而实现将流量快速切换到备份路径,避免了数据大量丢失。
静态BFD可以不受对端设备的限制,在对端设备不支持BFD功能的情况下,本端通过静态BFD实现单臂BFD检测功能。而动态BFD比静态BFD则更具灵活性。
应用
RIP和BFD相关联后,一旦链路发生故障,BFD在毫秒级时间内感知该故障并通知RIP协议,然后路由器在路由表中删除掉故障链路的路由并快速启用备份路径,提高了路由协议的收敛速度。
RIP与BFD联动的原理:
- RouterA、RouterB、RouterC及RouterD建立RIP邻居。经过路由计算,RouterA到达RouterD的路由下一跳为RouterB。在RouterA及RouterB上使能RIP与动态BFD联动检测机制。
- 当RouterA与RouterB之间的链路出现故障时,BFD快速感知并通知给RouterA,RouterA删除掉下一跳为RouterB的路由。然后RouterA重新进行路由计算并选举新的路径,新的路由经过RouterC、RouterB到达RouterD。
- 当RouterA与RouterB之间的链路恢复之后,二者之间的会话重新建立,RouterA收到RouterB的路由信息,重新选择最优路径进行报文转发。
RIP与动态BFD联动配置命令:rip进程:bfd all-interfaces enable
RIP与单臂静态BFD联动配置命令:
系统视图:
bfd 1 bind peer-ip 192.168.2.2 interface GigabitEthernet1/0/0 one-arm-echo
discriminator local 1
min-echo-rx-interval 200
commit
相关接口视图:rip bfd static \\在使能RIP的特定接口下使能静态BFD特性。
RIP NSR
具有分布式结构的设备可支持RIP NSR(Non-stop Routing)。
通过NSR特性,RIP将所有与路由相关的数据从主用主控板AMB(Active Main Board)备份到备用主控板SMB(Standby Main Board)。所以无论何时主用主控板出现故障,备用主控板都会变成激活状态,接替主控板工作。由于主备板采取高度同步的方式,所以发生倒换时邻居不会感知本设备故障,因此保持了业务在整网中的平稳运行。
常用命令
display rip \\查看RIP进程的当前运行状态及配置信息。
display rip bfd session \\查看BFD会话信息。
display rip database \\查看RIP发布数据库的所有激活路由。
display rip database verbose \\显示RIP发布数据库中路由的详细信息。
display rip interface verbose \\用来查看RIP的接口详细信息。
display rip neighbor verbose \\用来查看RIP的邻居详细信息。
display rip neighbor last-nbr-down \\用来查看RIP进程最近一次Down掉的邻居信息。
display rip route \\用来查看所有从其他路由器学来的RIP路由信息,以及每条路由相关的不同定时器的值。
display rip statistics interface [all verbose neighbor] \\用来查看RIP接口上的统计信息,包括从接口上收到与发送的报文数量。
reset rip configuration \\用来复位RIP特定进程的系统配置参数。当RIP进程启动时,所有配置参数将采用缺省值。该命令会重建RIP邻居,同时删除已经学习到的路由,请谨慎使用。
reset rip statistics \\用来清除由特殊RIP进程维护的计数器的统计数据。该命令便于在调试时重新记录统计数据。
rip bfd block \\用来阻塞指定接口创建BFD特性。
rip input \\用来控制允许指定接口接收RIP报文。默认情况下接口为不抑制状态。
rip output \\用来允许接口发送RIP报文。默认情况下接口为不抑制状态。
silent-interface \\用来抑制接口,使其只接收报文,用来更新自己的路由表,而不发送RIP报文。优先级大于在接口下配置的rip input与rip output。
summary \\用来使能RIP有类聚合,聚合后的路由以使用自然掩码的路由形式发布。
rip version 2 \\用来配置接口的RIP版本。
filter-policy export \\用来配置RIP路由的出口过滤策略。
filter-policy import \\配置接收的RIP路由信息时的过滤策略。
version 2 \\指定一个全局RIP-2版本。
network \\用来对指定的网段接口使能RIP路由。
import-route \\用来配置从其他路由协议引入路由。
peer \\用来指定RIP邻居IP地址。配置此命令后,更新报文以单播形式发送到对端,而不采用正常的组播或广播的形式。
preference \\用来配置RIP路由的优先级。
RIP常见配置错误
无法接收邻居的RIP更新报文
故障现象
在链路正常的情况下,无法接收邻居的RIP更新报文。
操作步骤
1.使用命令display current-configuration configuration rip,检查RIP的配置信息。
- 检查入接口是否在RIP中使能,只有使能了RIP协议的接口才会接收RIP报文。
- 检查对方版本号与本地接口接收的版本号是否匹配,如果不匹配,则可能会导致RIP邻居无法正常建立。
2.使用命令display current-configuration interface interface-type interface-number,检查入接口配置信息。
- 检查入接口是否配置了undo rip input命令。如果配置了此命令,将会禁止该接口接收RIP报文。
- 检查链路两端的接口认证方式是否匹配。当两端接口的认证方式匹配时,才会接收RIP报文。
无法向邻居发布RIP更新报文
故障现象
在链路正常的情况下,无法向邻居发布RIP更新报文。
操作步骤
1.使用命令display current-configuration configuration rip,检查RIP的配置信息。
- 检查出接口是否在RIP中使能,只有使能了RIP协议的接口才会进行RIP报文的发送。
- 检查出接口是否配置了silent-interface命令,如果配置了此命令,将会抑制接口使其不发送RIP报文。
2.使用命令display current-configuration interface interface-type interface-number,检查入接口配置信息。
- 检查入接口是否配置了undo rip output命令,如果配置了此命令,将会禁止接口发送RIP报文。
- 检查链路两端的接口认证方式是否匹配。当两端接口的认证方式匹配时,才会发送RIP报文。
- 检查出接口是否配置了水平分割命令。水平分割规定从一个接口学到的路由,将不能再从该接口对外发布。
说明:缺省情况下,出接口使能了水平分割,该命令的显示信息中没有关于水平分割的配置项;但对于NBMA网络连接的出接口,如果没有显示关于水平分割的配置项,则表明在该接口上没有使能水平分割。
RIP网络发生路由振荡
故障现象
在链路正常的情况下,运行RIP的网络发生路由振荡,查看路由表时发现部分路由表时有时无。
操作步骤
1.使用命令display rip,检查RIP定时器的配置信息。
在RIP网络中,应确保全网定时器的配置一致,如果定时器的值配置不当,会引起路由振荡。它们的配置值关系是:update<age,update<garbage-collect
2.使用命令timers rip update age garbage-collect,配置RIP定时器的值。
RIPng
简介
RIPng是一种较为简单的内部网关协议,是RIP在IPv6网络中的应用。RIPng主要用于规模较小的网络中,比如校园网以及结构较简单的地区性网络。由于RIPng的实现较为简单,在配置与维护管理方面也远比OSPFv3与IS-IS for IPv6容易,因此在实际组网中仍有广泛的应用。
说明:由于RIPng没有安全认证机制,存在安全隐患。建议选择OSPFv3,IS-IS(IPv6)或BGP4+代替。
RIPng原理描述
RIPng的特性
随着IPv6网络的建设,同样需要动态路由协议为IPv6报文的转发提供准确有效的路由信息。因此,IETF在保留了RIP优点的基础上针对IPv6网络修改形成了RIPng(RIP next generation,下一代RIP协议)。RIPng主要用于在IPv6网络中提供路由功能,是IPv6网络中路由技术的一个重要组成协议。
RIPng与RIP的差异
为了实现在IPv6网络中应用,RIPng对原有的RIP协议进行了修改:
- RIPng使用UDP的521端口发送与接收路由信息。
- RIPng的目的地址使用128比特的前缀长度。
- RIPng使用128比特的IPv6地址作为下一跳地址。
- RIPng使用链路本地地址FE80::/10作为源地址发送RIPng路由信息更新报文。
- RIPng使用组播方式周期性地发送路由信息,并使用FF02::9作为链路本地范围内的路由器组播地址。
- RIPng报文头部(Header)与多个路由表项RTEs(Route Table Entry)组成。在同一个RIPng报文中,RTE的最大数目根据接口的MTU值来确定。
现网中RIP与RIPng使用很少,但是作为一个IE要抱有一个无所不知的心态去学习,动态路由协议有共通点,例如触发更新不仅RIP有此特性,其他协议也有,多学有益。
RIP是一种基于距离矢量算法的路由协议,存在收敛慢、易产生路由环路、可扩展性差等问题,目前逐渐被OSPF取代。