RIP(routinginformation protocol)

V1和V2的共同点:

     1.采用贝尔曼-福特算法

     2.典型的距离矢量型路由协议

     3.采用周期性更新 30s更新一次

     4.AD120

     5.基于UDP520

     6.跳数作为唯一的度量值,最大16跳,然后将会为possible down

  7.相同的放环机制 

        a.最大跳数--16

        b.水平分割----从一个接口发送出去的路由条目,将不会从这个接口接收

                        帧中继的主接口水平分割默认是关闭的,其他接口默认是开启的

                  c.毒性逆转---从一个接口学习到的路由条目,容许在从这个接口发出去,但是会被设为16条,不可达

                  d.触发更新---串口支持

                  e.抑制计时器-----180s----当一个路由器从相同的更新源收到一个跳数更大的路由,那么180s之内不会接收该路由条目的更新。180s之后如果跳数依旧比本地跳数大,那么将会被路由条目写进路由器

    8.相同的4个计时器

                a.更新计时器----30s

       b.失效计时器---180s没收到更新,将该路由标记为不可达(possibly down)

                c.刷新计时器---60s,如果180s之后还是没收到该路由的更新,会将该路由从路由表删除

   d.抑制计时器---------单独的180s

-------------------------------------------

Showip protocol(查看四个计时器)

9.有相同的更新路由表的原则

           路由器收到路由条目,检查本地是否存在相同的路由条目:

                          没有------直接加表

                          有:本地路由条目的跳数大----更新

                                  本地路由条目跳数小----如果是同一个更新源,抑制计时器180s之后加表,不是同一台设备,丢弃

                           RIP并不会绝对接受,只有当路由的发送IP地址和自己接收的接口IP地址处于同网段时,才会接收,否则忽略

                         no vaildate-update-source  关闭有效更新源检测

10.RIP数据包最大字节是512

                   4   +     8     +       20*25                 = 512   

 RIP基本报头   UDP报头   路由条目的大小

-------------------------------------------------------------------------------------

RIPV1的特点

           1.不支持VLSM(可变长子网掩码)和CIDR(无类域间路由)         

           2.有类的路由协议

           3.不支持路由标记和链路验证

 

同时应该将ip cef关闭,因为路由器会记住一次去往目标网络的地址,cef转发优先级优于路由表

RIPv1试验

RIP ver 1会将收到的路由自动汇总为主类网络,并且无法关闭该功能,结果为RIP ver1的收到的路由条目全部都为主类,即掩码总是为8位,16位,24位其中的一种,但并不永远都是这样子,因为RIP 发送的ver 1更新中,路由条目只包含IP网络号,并没有掩码长度,所以对于收到的路由条目,掩码是接收路由器自己加上去的,由于自动汇总,从而造成所有路由的掩码长度都归为了8位,16位,24位;但有一种情况是绝对的例外,那就是如果收到的路由条目与接收该路由的接口属于同一主类网络时,那么该路由则被加上与该接收接口IP地址相同的掩码长度,比如路由器的接口地址是10.1.1.2/24,从该接口上收到一条路由10.1.2.0,则给10.1.2.0加上24位的掩码长度,而不会自动汇总是8位掩码。由此可以看出,RIP给路由的掩码,只是猜测的,也许该路由并不是自己所猜的掩码长度,因此可能会造成网络中路由表的不精确。但是当接收路由的接口配有Secondary地址时,则采用Secondary地址的掩码长度赋予接收路由,例如收到的路由为10.1.2.0,而接口主IP地址为10.1.1.2/24Secondary IP地址为10.1.1.3/25,那么将设定10.1.2.0的掩码长度为25位,所以RIP采用Secondary IP的掩码长度优先。

RIP始终认为与自己直连的对端路由器的IP地址和自己是同子网的,认为双方掩码是相同的,其实这也只是RIP路由器自己认为而已,它并没有办法知道对方是否真的与自己在同一子网。有时,RIP希望避免造成不必要的错误,比如自己有条路由条目为10.1.3.0/25,当要将该路由从某个接口发出去之前,都会做一次检测,如果检测到该接口的IP地址与需要发送的路由属于同一主类,那么两者必须拥有相同的掩码长度,才会将路由发出,例如接口IP地址为10.1.1.1/25,要发送的路由为10.1.3.0/25,这时要发送的路由与接口属于同一主类,并且路由的掩码长度与接口掩码长度也相同,所以可以成功发出10.1.3.0/25,但是如果接口IP地址的掩码长度不是25位,例如IP地址为10.1.1.1/24,那么最后因为两者的掩码长度不同,从而放弃发送10.1.3.0,因为RIP认为接口对端的接收者应该和自己属于同一子网,应该是10.1.1.0/24IP地址,如果对方收到10.1.3.0,必定会将掩码定义为24位(10.1.3.0/24),所以RIP知道将该路由发给对方后,会造成对方路由表错误,因此在明知对方会犯错的情况下,采用不发送该路由的方式来避免对方犯错误,32位主机路由除外

 

同一个主类,掩码相同会被发送,掩码不同将会被扔掉

但是32位主机路由路由除外

 

 

一个主类 A 10.0.0.0 32位主机路由会被发送过去

另外一个主类A 1.0.0.0 32位会被转变为A 8

rip在宣告时只需要宣告主类,10.1.1.0/10.2.2.2/10.11.11.1只需要宣告一个10.0.0.0

 

RIPV1发送规则(其实就上对上面那对话的总结)

路由条目是否和本地接口地址在同一个主类网络中

       不是,将路由条目汇总成A,B,C的主类网络,发送给其他的路由器

       是,检查路由条目的掩码跟本地接口是否相同,相同,发送,不相同,丢弃(32位主机路由除外)

RIPV1接收规则

       检查收到的路由条目与本端端口是否在一个主类网络中

         是,将路由条目的掩码变成端口地址的掩码写进路由表(32位主机路由除外)

        不是,检查路由表中是否存在该主类网络的子网

            存在更加精确的路由,丢弃主类路由,(路由加表规则)

            不存在,将主类网络写进路由表

----------------------------------------------------------------------------------

两个直连的路由器接口,网络号相同即可通信,不管掩码是否相同

 

 

 

 

RIP的数据格式

 

 wKioL1Q75O3Q1xX-AAEX-urDXe8676.jpg

 

 

屏幕剪辑的捕获时间: 2014/7/22 0:06

command:1--请求路由更新

                    2-发送路由更新

Version---rip版本

Address family identify:

          0x0002--RIP传递的是IPV4的路由条目

                      0x0000---请求完整的路由表

IP address----网段

Metric---跳数

RIPv1数据包格式中没有子网掩码,只能支持主类网段

 

 

 

RIPV2的特点

    1.采用组播更新,更新地址为224.0.0.9

    2.支持VLSM,支持部分CIDR(rip不支持超网汇总,即汇总之后掩码变小:192.168.0-3.0汇总为192.168.0.0/22,子网掩码本来应为24位,RIPV2不支持)

  3.支持不连续的子网

    4.支持链路验证和路由打标

V2的数据格式(和V1相比,三个空的位置使用):

wKiom1Q75LaTR5e2AAFtz9fi2dk996.jpg

 

  route tag

 netmask

 next hop (防止数据包绕远)

------------------

RIP V2的配置:

 version 2

No auto-summary

Net xxx.xxx.xxx.xxxx

-------------------------------------------------------------------------------------

RIP的偏移列表:人为的增加跳数,干扰路由选路

                                   先用acl抓取

                             然后在路由进程中:offset-list 1(acl-number) {in|out}x(跳数) 接口

 

---------------------------------------------------------------------

Router rip

      offset-list 0(acl-number 对所有的路由条目生效) in|out <1-15>

-----------------------------------

Distribute-list:同样先用acl抓取路由条目,在acl中定义的行为permit或者deny即为distribute-list的行为

              distribute-list 1 (acl-number) in|out s0/0

---------------------------------