标题：RIP协议
概况
RIP协议采用距离向量算法，在实际使用中已经较少适用。在默认情况下，RIP使用一种非常简单的度量制度：距离就是通往目的站点所需经过的链路数，取值为1~15，数值16表示无穷大。RIP进程使用UDP的520端口来发送和接收RIP分组。RIP分组每隔30s以广播的形式发送一次，为了防止出现“广播风暴”，其后续的的分组将做随机延时后发送。在RIP中，如果一个路由在180s内未被刷，则相应的距离就被设定成无穷大，并从路由表中删除该表项。RIP分组分为两种：请求分组和响应分组。
历史演化
RIP-1被提出较早，其中有许多缺陷。为了改善RIP-1的不足，在RFC1388中提出了改进的RIP-2，并在RFC1723和RFC2453中进行了修订。RIP-2定义了一套有效的改进方案，新的RIP-2支持子网路由选择，支持CIDR，支持组播，并提供了验证机制。
随着OSPF和IS-IS的出现，许多人认为RIP已经过时了。但事实上RIP也有它自己的优点。对于小型网络，RIP就所占带宽而言开销小，易于配置、管理和实现，并且RIP还在大量使用中。但RIP也有明显的不足，即当有多个网络时会出现环路问题。为了解决环路问题，IETF提出了分割范围方法，即路由器不可以通过它得知路由的接口去宣告路由。分割范围解决了两个路由器之间的路由环路问题，但不能防止3个或多个路由器形成路由环路。触发更新是解决环路问题的另一方法，它要求路由器在链路发生变化时立即传输它的路由表。这加速了网络的聚合，但容易产生广播泛滥。总之，环路问题的解决需要消耗一定的时间和带宽。若采用RIP协议，其网络内部所经过的链路数不能超过15，这使得RIP协议不适于大型网络。
报文格式
071531
命令字（1字节）版本（1字节）必须为0（2字节）
地址类型标识符（2字节）必须为0（2字节）
IP地址
必须为0
必须为0
Metric值（1—16）
（最多可以有24个另外的路由，与前20字节具有相同的格式）
“命令字”字段为1时表示RIP请求，为2时表示RIP应答。地址类型标志符在实际应用中总是为2，即地址类型为IP地址。“IP地址”字段表明目的网络地址，“Metric”字段表明了到达目的网络所需要的“跳数”。
补充内容
RIP(RoutinginformationProtocol)是应用较早、使用较普遍的内部网关协议(InteriorGatewayProtocol,简称IGP)，适用于小型同类网络，是典型的距离向量(distance-vector)协议。文档见RFC1058、RFC1723。
RIP通过广播UDP报文来交换路由信息，每30秒发送一次路由信息更新。RIP提供跳跃计数(hopcount)作为尺度来衡量路由距离，跳跃计数是一个包到达目标所必须经过的路由器的数目。如果到相同目标有二个不等速或不同带宽的路由器，但跳跃计数相同，则RIP认为两个路由是等距离的。RIP最多支持的跳数为15，即在源和目的网间所要经过的最多路由器的数目为15，跳数16表示不可达。
有关命令
--------------------------------------------
任务命令
--------------------------------------------
指定使用RIP协议router rip
--------------------------------------------
指定RIP版本version{1|2}1
--------------------------------------------
指定与该路由器相连的网络network network
---------------------------------------------
注：1.Cisco的RIP版本2支持验证、密钥管理、路由汇总、无类域间路由(CIDR)和变长子网掩码(VLSMs)
举例
Router1:
router rip version 2 network 192.200.10.0 network 192.20.10.0！相关调试命令：show ip protocol
show ip route在全局设置（#）模式下：1．启动RIP路由router rip2．设置参与RIP路由的子网network子网地址3．允许在非广播型网络中进行RIP路由广播neighbor相邻路由器相邻端口的IP地址4．设置RIP的版本RIP路由协议有2个版本，在与其它厂商路由器相连时，注意版本要一致，缺省状态下，Cisco路由器接收RIP版本1和2的路由信息，但只发送版本1的路由信息，设置RIP的版本vesion1或2。另外，还可以控制特定端口发送或接收特定版本的路由信息。1．只在特定端口发版本1或2的信息，在端口设置模式下rip send version1或22．同时发送版本1和2的信息ip rip send receive1or23．在特定端口接受版本1或2的路由信息ip rip receive1or24．同时接受版本 1和2的路由信息ipripreceive1or2选择路由协议几点建议：1．在大型网络中，建议使用ospf,eigrp.2．如果网络中含有变长了网掩码（VISM）不能使用igrp,rip版本1，可以使用rip版本2，ospf，eigrp或静态路由。3．如果使用路由安全设置可以使用RIP版本1或OSPF。4．选用ospf,eigrp在系统稳定后所占带宽比RIP，IGRP少得多，IGRP比RIP所占带宽也少。5．综合使用动态路由，静态路由，缺省路由，以保证路由的冗余。6．在拨号线路上尽量使用静态路由，以节省费用。7．在小型网络上数据量不大的情况下，且不需要高可性，广域网线路为X.25SVC时，建议用静态路由。
RIP协议的局限性
1)、协议中规定，一条有效的路由信息的度量（metric）不能超过15，这就使得该协议不能应用于很大型的网络，应该说正是由于设计者考虑到该协议只适合于小型网络所以才进行了这一限制。对于metric为16的目标网络来说，即认为其不可到达。
2)、该路由协议应用到实际中时，很容易出现“计数到无穷大”的现象，这使得路由收敛很慢，在网络拓扑结构变化以后需要很长时间路由信息才能稳定下来。
3)、该协议以跳数，即报文经过的路由器个数为衡量标准，并以此来选择路由，这一措施欠合理性，因为没有考虑网络延时、可靠性、线路负荷等因素对传输质量和速度的影响。
RIP的特性
（1）路由信息更新特性：
路由器最初启动时只包含了其直连网络的路由信息，并且其直连网络的metric值为1，然后它向周围的其他路由器发出完整路由表的RIP请求（该请求报文的“IP地址”字段为0.0.0.0）。路由器根据接收到的RIP应答来更新其路由表，具体方法是添加新的路由表项，并将其metric值加1。如果接收到与已有表项的目的地址相同的路由信息，则分下面三种情况分别对待：第一种情况，已有表项的来源端口与新表项的来源端口相同，那么无条件根据最新的路由信息更新其路由表；第二种情况，已有表项与新表项来源于不同的端口，那么比较它们的metric值，将metric值较小的一个最为自己的路由表项；第三种情况，新旧表项的metric值相等，普遍的处理方法是保留旧的表项。
路由器每30秒发送一次自己的路由表（以RIP应答的方式广播出去）。针对某一条路由信息，如果180秒以后都没有接收到新的关于它的路由信息，那么将其标记为失效，即metric值标记为16。在另外的120秒以后，如果仍然没有更新信息，该条失效信息被删除。
（2）RIP版本1对RIP报文中“版本”字段的处理：
0：忽略该报文。
1：版本1报文，检查报文中“必须为0”的字段，若不符合规定，忽略该报文。
>1：不检查报文中“必须为0”的字段，仅处理RFC 1058中规定的有意义的字段。因此，运行RIP版本1的机器能够接收处理RIP版本2的报文，但会丢失其中的RIP版本2新规定的那些信息。
（3）RIP版本1对地址的处理
RIP版本1不能识别子网网络地址，因为在其传送的路由更新报文中不包含子网掩码，因此RIP路由信息要么是主机地址，用于点对点链路的路由；要么是A、B、C类网络地址，用于以太网等的路由；另外，还可以是0.0.0.0，即缺省路由信息。
（4）计数到无穷大（Counting to Infinity）
前面在RIP的局限性一部分提到了可能出现的计数到无穷大的现象，下面就来分析一下该现象的产生原因与过程。考察下面的简单网络：
c(目的网络）－－－－router A－－－－－－router B
在正常情况下，对于目标网络，A路由器的metric值为1，B路由器的metric值为2。当目标网络与A路由器之间的链路发生故障而断掉以后：
c(目的网络）－－||－－router A－－－－－－router B
A路由器会将针对目标网络C的路由表项的metric值置为16，即标记为目标网络不可达，并准备在每30秒进行一次的路由表更新中发送出去，如果在这条信息还未发出的时候，A路由器收到了来自B的路由更新报文，而B中包含着关于C的metric为2的路由信息，根据前面提到的路由更新方法，路由器A会错误的认为有一条通过B路由器的路径可以到达目标网络C，从而更新其路由表，将对于目标网络C的路由表项的metric值由16改为3，而对于的端口变为与B路由器相连接的端口。很明显，A会将该条信息发给B，B将无条件更新其路由表，将metric改为4；该条信息又从B发向A，A将metric改为5……最后双发的路由表关于目标网络C的metric值都变为16，此时，才真正得到了正确的路由信息。这种现象称为“计数到无穷大”现象，虽然最终完成了收敛，但是收敛速度很慢，而且浪费了网络资源来发送这些循环的分组。
另外，从这里我们也可以看出，metric值的最大值的选择实际上存在着矛盾，如果选得太小，那么适用的网络规模太小；如果选得过大，那么在出现计数到无穷大现象的时候收敛时间会变得很长。
提高措施
水平分割
在上面的“计数到无穷大”现象中，产生的原因是A、B之间互相传送了“欺骗信息”，那么针对这种情况，我们自然会想到如果能将这些“欺骗信息”去掉，那么不就可以在一定程度上避免“计数到无穷大”了吗。水平分割正是这样一种解决手段。
“普通的水平分割”是：如果一条路由信息是从X端口学习到的，那么从该端口发出的路由更新报文中将不再包含该条路由信息。“带毒化逆转的水平分割”是：如果一条路由信息是从X端口学习到的，那么从该端口发出的路由更新报文中将继续包含该条路由信息，而且将这条信息的metric置为16。
“普通的水平分割”能避免欺骗信息的发送，而且减小了路由更新报文的大小，节约了网络带宽；“带毒化逆转的水平分割”能够更快的消除路由信息的环路，但是增加了路由更新的负担。这两种措施的选择可根据实际情况进行选择。
触发更新
上面的“水平分割”能够消除两台路由器间的欺骗信息的相互循环，但是当牵涉到三台或者以上的路由器时，效果就有限了。考察下面的网络：
+---++----++-----+/-----\
|||C+-------|D|-----||E||
|A+------|||+----||
+-+-++----++---+-+\-----/
|--|
|--|
|--|
+----+|
|||
|B+-----------------------
||
+----+
E是目标网络
针对目标网络，各路由器的路由信息分别如下：
A：3C
B：2D
C：2D
D：1直连
当D与目标网络之间发生故障中断以后，B和C都能正确的从D得到网络不可达的信息，但是，从上面的路由信息中可以看出，A虽然不会给C发送错误信息，但是A可能在未收到网络不可达信息之前就给B发送了路由信息，让B错误的认为可以通过A到达目标网络，继而又会出现“计数到无穷大”的现象。
触发更新就是为了针对上述情况进行的一种改善，它的具体实现措施是：路由器一旦察觉到网络变化，就尽快甚至是立即发送更新报文，而不等待更新周期结束。只要触发更新的速度足够快，就可以大大的防止“计数到无穷大”的发生，但是这一现象还是有可能发生的。
使用了触发更新以后，当网络拓扑发生变化的时候，网络中会出现类似于“多米诺骨牌”的更新报文潮流，并最后中止于从未发生变化的路径到达目标网络的路由器。
定时器
RIP中一共使用了4个定时器：updatetimer,timeouttimer,garbagetimer,holddowntimer。
Updatetimer用于每30秒发送路由更新报文。
Timeouttimer用于路由信息失效前的180秒的计时，每次收到同一条路由信息的更新信息就将该计数器复位。
Garbagetimer和holddowntimer同时用于将失效的路由信息删除前的计时：在holddowntimer的时间内，失效的路由信息不能被接收到的新信息所更新；在garbagetimer计时器超时后，失效的路由信息被删除。
另外，在触发更新中，更新信息会需要1到5秒的随机延时以后才被发出，这里也需要一个计时器。
版本2简介
RIP版本2的报文格式如下：071531
命令字（1字节）版本（1字节）路由域（2字节）
0xFFFF（2字节）验证类型（2字节）
验证（16字节）
地址类型标识符（2字节）路由标签（2字节）
IP地址
子网掩码
下一跳IP地址
Metric值（1—16）
（最多可以有24个另外的路由，与前20字节具有相同的格式）
版本2的RIP使用了版本1中“必须为0”的字段，增加了一些对于路由的有用信息，其主要新添的特性如下：
（1）报文中包含子网掩码，可以进行子网路由
（2）支持明文/MD5验证
（3）报文中包含了下一跳IP，为路由的选优提供了更多的信息。