动态路由协议 RIP协议(正篇)

RIP 版本

                     RIPv1 ;                          RIPv2;                         RIPNG;

                #   RIP  一共三个版本  ( RIP v1 ,  RIPv2,  RIPNG )

                  v1,v2 主要是服务于  IPV4 协议,    RIPNG 服务于 IPV6 

                #   RIPv1  和 RIPv2 的区别 :

                         RIPv1 是有类别的路由协议;  RIPv2 是无类别的路由协议 

                            有类无类上篇文章也提到过!

                            有类别 :  就是 不携带掩码,没有掩码,按照 A类、B类、主类

                            无类别 :     就是我们主流的表示,携带掩码!!  

                 

                     *     RIPv1 不支持手工认证,      RIPv2 支持手工认证

                            我们动态路由协议不是需要路由器之间相互沟通交流,那势必存在信息的传递

                            交流,那也避免不了存在安全问题!

                            那么为了预防安全问题,我们就设置一种 “ 口令  ” 就像暗号,两边设备可以提前

                            设置一个 暗号,(只有两台设备知道的暗号) 发送信息时,就把 暗号带上,当

                            接受时便查看暗号,暗号正确了,便信任该流量包!!  

                   

                   *      RIPv1 采用广播形式发送信息,   RIPv2 以组播形式 

                           组播地址 :  224.0.0.9 ( 224 开头的都是组播地址!)

             #     RIP 的封装 :

                    RIP 本身是一个应用层协议,所以封装它,其传输层( 使用的是 520 端口)

                    RIP 使用的是 UDP  520 端口进行传输信息的!!

RIP 的更新机制

        先了解下  RIP 的数据包 :

              ===>>>  

                            request 包  :  请求包 

                         response 包  :  应答包  ( 它则携带路由信息 )

        RIP 在收敛完成后仍然会 每隔 30 秒 发送一个 response 包 ----  这种行为称之为 周期更新! 

        那么,为什么要每隔 30 s 还发送一个包( 周期更新 )

        ===>>>  RIP 使用的是 UDP 协议 ( UDP 的特点就是 不可靠 )

                       而我们收集路由信息是需要 可靠的!!! 但是,RIP 使用的就是 UDP 协议( 不可

                       靠),那怎么办 ??

                       只能靠 RIP 协议自己去 补偿可靠性!!所以 RIP 就得不停发,不停发!

                       实际上,RIP  周期更新的目的 就是为了补偿 自身没有确认机制 和 保活机制 保证数

                       据传输的可靠性

                        保活机制 :  就是 为了证明自己还在( 就是这台设备 还可以进行通讯 ) 

RIP  的计时器  : 

        更新计时器  :   30 S 

        失效计时器  :   180  S 

                         #       在前面讲过,RIP 周期更新有一个目的就是 保活机制 ,既然有保活机制,

                                     那么,势必就要做时效判断,( 保活机制是不是就是如果没有收到对方给

                                     自己发来的信息就会判断对方死亡了; 但是,也不不能太草率,不能人家

                                     一没给你发信息,你就断定对方死亡,你得给人家时间呀,你得稍微多等

                                     一会儿,再确定它是否真正的死亡!!)

                           #        因此,无效计时器主要作用就是做 时效判断的!!

                                    ( 就是 什么时候判定他无效!!)

                           #         那这个计时器 是给谁计时呢??

                                      是给 具体的路由条目 计时的!!!!( 并不是给 路由器计时!)

                                      路由条目一旦在路由表中刷新就直接开始  180 S 倒计时!!

                                      怎么刷新??

                                       ===>>>   BellFord 算法 里的刷新; 你路由表如果收到了新的路由条目,

                                                       不就直接记录在路由表里了嘛,那记录后一边就开始 180 S 倒

                                                       计时,另一边 你这个新的路由条目的发送者不也得 进行 30 S

                                                       的 周期更新!! ( 周期更新的话,不就得 给路由表发路由条

                                                       目,一发路由条目就得更新,一更新就得重新 180 S 倒计时)

                             #       路由条目刷新后会启动 180 S 的计时器,若 180 S 结束,路由条目未刷

                                      新则认定该目标网段不可达(意思就是这个网段去不了了),将该路由条

                                      目从全局路由表中删除,并且COST 值 改为 16 ,将其保存在 缓存表中,

                                    ( 然后启动垃圾收集计时器,120秒倒计时) 之后周期更新时携带!! 

                                    ( 你会发现 COST 值怎么改为 16 了,我们前面不是讲过 COST 值最大

                                      为 15)      

                                       那最大值 为 15 ,现在给你改为 16 意思就是  这个网段不可达!!

                                       保存在缓存中并且周期更新还携带着( 那么,为什么还要携带?)

                                       因为 RIP 只有更新包,也就是说 RI 只能告诉别人能去哪儿,并不能告诉

                                       别人不能去哪,所以 它就把 COST 值改为 16 你收到后,一看现在能去一

                                       个网段,但是它的 COST 是 16,所以接受的那个设备就知道这个网段是

                                       不可达的!!!  ( 这就叫 带毒传输 )

                                       

                                        综上 : 180 秒到了之后,不会彻底删除这条路由,在缓存中存储,然后

                                                      进行带毒传输,(会携带一段时间)

                                         那么,带毒传输,要携带多长时间呢??

                                                            120 秒!!

                                                                 

        垃圾收集计时器 :   120 秒 

 同步更新 与 异步更新

                      同步更新 :   就是网络范围内,所有路由器都是同时开始 30 S 计时,也必然会同时

                                            发送数据!!

                                            造成的结果就是 : 每到 30 秒的时候 网络就会特别特别卡!!

                                            所以 RIP 的周期更新 肯定不是 同步周期更新!!!

                      异步更新 :   就是各个设备都把时间岔开了,就与 同步是个 相反的!!

                                            所以, RIP 的周期更新一定是  异步周期更新!!

RIP 成环问题

                      

         就是因为 RIP  的异步更新,就使得 成环必然   :

               

           上示 : 就是向大家展示下 两台路由器 通过 RIP 协议 异步周期相互通讯的过程; 

                        两台 路由器 R1 ,R2    R2 有两个网段 ( 2.2.2.0/24;  3.3.3.0/24)

                        现在假设R1 的路由表里已经有 R2 的两个网段!

                        那么,现在开始推演 :

                                    正常情况下, R2 每隔 30 S 要给 R1 发送 周期更新包,那周期更新包里肯

                                    定也会携带着 2.0/24 cost =1 , 3.0/24  cost =1  ( 这两个信息来到 R1 

                                    R1 也会把这两条信息 再重新抄一遍 -- 因为和自己路由表上的信息一样啊,

                                    其实对R1 的影响不大,只是刷新了计时器而已)

                                    那么, R1 是不是肯定也会 每隔 30 S 进行 周期更新 也会发给 R2 数据包

                                    ( 2.0/24  cost = 2, 3.0/24 cost = 2) 是的, cost 变为 2 了( 加一 )

                                    但是,R2 收到后,依据BellFord 算法, 发来的 cost 值  比本地的 cost 值

                                    大,所以不刷新!! 

                                    以此往复!!!! ( 各个设备 周期更新 30 S  相互沟通交流)

                                    

                                    现在有个特殊情况, 假设 R2 的 3.0 网段 突然断开了,当然, R2 肯定是

                                    感知最快的,那 R2 就会 把这个 3.0 网段 的路由条目 cost 值 改为 16,放

                                    到缓存中,然后周期更新携带的时候再发给其它设备,告诉其它设备 3.0 网

                                    段现在去不了了。

                                    但是,由于是 异步周期,就会存在一个情况 :

                                     R2 的周期更新时间还没到,但是 R1 的周期更新时间却到了,也就是说,

                                     R2 想要告诉 其它设备 3.0 网段 去不了的这条消息还没发出去,R1 的周期

                                     更新包(3.0/24 cost =2, 3.0/24 cost = 2)已经传给 R2 了;

                                      那么,对于 R2 来说, R2 会咋想 ???

                                      由于 BellFord 算法知 :  

                                                        其实,对于 R2 来说, 2.0 这个网段没啥好想的,cost 值没有

                                                        R2 本地的小,不刷新,但是,对于 3.0 网段来说,cost 值要

                                                        比本地 16 小,所以 R2 就会认为,它自己(R2)去不了 3.0

                                                        网段,但是 R1 可以去,所以,R2 关于 3.0 网段就会更新路由

                                                        更新为 3.0/24    cost = 2   下一跳 是 R1 

                                      那么,真要是有个数据包是要去 3.0 网段 发给了 R2 ,那么,R2 必然会

                                      把 数据发给 R1 , 而 R1 收到后,查自己路由表看看有没有 去往 3.0 网段

                                      一查诶,还真有是去往 R2 的,又接着把数据发给了 R2 。

                                      那这不问题就出来了,出环了!!

RIP 的破环机制  : 

                    首先,虽然 出环的根本是在 异步周期,但是,解决环路可不能通过 将 异步周期改为

                    同步周期方面去想!!

                    大家仔细想想,刚才出现环路最最前期的时候,是不是 R2 已经感知到了 自己的 3.0

                    网段已经断开了,不能用了,正准备给 其它设备通过 周期更新 说这件事儿,结果

                    R1 的周期更新时间到了,给自己( R2 ) 发了数据包-----这其实才是 出环的最最根

                    本原因

                     

                     那我们现在就想,R2 你能不能别等了( 你之所以没把 3.0 网段消息发出去,是因为

                     你一直在等 周期更新时间 )  也就是说 R2 没有第一时间,没有 3.0 网段刚一出现问

                     题就第一时间告诉其它设备;   

                     所以,我们就想 当拓扑发生变化时,设备应该第一时间就将消息发出--  触发更新! 

                     我们前面说过  一个协议的好坏是 :

                                               1.    收敛快

                                               2.    占用资源少

                                               3.    选路佳( 无环 )

                      其实,触发更新就是破环的最核心机制,它就是拓扑中,那个链路或设备一出现问

                      题,就立刻,马上发消息给其它设备,让所有设备都知道( 这就是 收敛快!!)

       

                     那么,大家再思考下,触发更新 能彻彻底底完全解决 环路嘛??

                     ===>>>      不能!! ( 这次的不能有点 勉强的成分 在里面 )

                                        但是,这次不能的情况是特别特别  就是扣时间的!!

                                        就是说,当 R2 一收到 3.0 网段无法到达的消息,马上给其它设备发通知

                                        就偏偏有一种情况,就偏偏在 R2 发出去的前 万分之一秒, R2 收到了 

                                        R1 的数据包 ( 也就是说,还是没能赶上时间 ) 在 R2 发 3.0 网段断掉

                                       之前收到了 R1 的更新包!!

                                        

                                        也就是说, 触发更新 能解决大部分情况,并不能完全解决 出环问题,

                                        所以,还得几个帮手 一起 破环!!!

        水平分割 :     从此口进的路由,不许再从此口出 

                                 在介绍水平分割前,先回想下环路产生的原因,想想那个过程!

                                 我们先不谈 拓扑发生变化时怎么样,先谈谈就正常情况下的运转 :

                                  

                                  看上图, 三台路由器相互通讯, 当他们相互沟通后, 1 ,2,  3 的路由表就

                                  都有了 5 条路由 ,好! 它们现在各自都有整个拓扑的网段!

                                

                                  那对于 R1 来说它的路由表有 1,2,3,4,5 个网段也就是5条路由 ,它的 1  ,2 网

                                  段是跟自己直连的, 就是自己路由表本身就有的路由条目, 那么对于 3,4,5

                                  网段来说,则是通过 R2 的 2.2 接口来传给 R1,才使得 R1 的路由表齐全了

                                  整个拓扑的所有网段!!

                                  好,现在来看看周期更新 :

                                  三台设备之间要互相传 路由表,那问题就来了 :

                                  真的是需要把路由表里所有的内容都扔给别人嘛?????

                                   你再看上面说的 R1 , 对于 R1 说 3,4,5 是 R2 给 R1 的,当周期更新时,

                                   R1你又把 3,4,5  扔给 R2 ( 因为是整张路由表传给别人呀!) ,所以,这

                                  不就是问题嘛,3,4,5 是R2 给R1 ,的 你 R1 又把 3,4,5 扔给 R2 这就是问

                                  题!!!!      

                                  R2  都能 把 3,4,5 发给 R1 , 人家 R2 的路由表里会没有 3,4,5???

                                  所以,这个行为其实本身就有问题 !!

                                  一个 增加了链路资源,一方面 也极有可能导致出环啊!!

                                   

                                   因此,这个时候就需要 水平分割 站出来了!!( 从此口进,不从此口出)

                                   3,4,5 是从 R2 的2.2接口发给 R1 的,所以在进行周期更新的时候,R1 只需

                                   要将 1,2 网段发给 R2 就好( 实质上R1 都只需要将 1 这个网段发给 R2 就

                                   好,因为 2 这个网段是和R1 , R2 直连的)

                                   所以,按道理只需要将 不是你给我的和不是我和你直连的网段发给你就行!

                             

                                   那这个机制一出现还有没有坏 ??

                                   其实,对于上示的直线型拓扑是不会再出现环路的,但是,我们所学习的拓

                                   扑类型也有很多种啊,还有 环形,多环形等等

                                   对于多环形就不行了, 还是会出环的!!

                                   因为,多环形它的路很多啊,会绕回到原点又出环了!!

                                   所以, 水平分割仅限于直线型拓扑防环!!   

                                   那水平分割就仅仅只有这一个作用嘛??-- 就防环作用???

                                   其实 水平分割有一个很重要的作用 :

                                   请看 :

                                    

                                    上示拓扑, 1 上有一个 环回,那么 1 就会把这个环回告诉 2吧? 2呢?

                                     2 也会把这个环回告诉 3 ,这是我们学习过的内容!!

                                     所以,我们得出一个结论 : 就是一旦我从我的邻居A那里学到一个路由我

                                     就会把这个学来的路由再共享给我的 B 邻居!!

                                    但是呢,网络中有一种比较特殊的情况,我们叫做 MA 网络 - 多路访问网络

                                    示例  :

                                   

                                   上示就是一个多路访问网络,就是一个网段里有多个路由器(上示就是一个

                                   广播域)

                                   上示呢, 1 上还有一个 环回,1要把环回往下发的时候会以 广播或者组播的

                                   形式往下发,那么发下来就会被交换机洪泛,也就是说 下面的2,3,4,5 路由

                                   器都会收到来自 1 的数据包,就是等于 2,3,4,5 对于 1 而言都是 邻居!

                                   好,问题来了 :

                                   上示图呢,对于1来说 2,3,4,5 都是 1 的邻居,而对于 2 来说呢 1,3,4,5 也是

                                   2 的邻居,同理,对于3,对于4,对于5都是一个道理!!

                                   那意味着什么呢 ??

                                   拿 2 来说, 当2自己 收到 了 来自1 的数据包,对于2来说 这就是个新的路

                                   由,2 也会 把 1 发给它 路由 再 发给 3,4,5 同理,但是,3,4,5已经收到了来

                                   自1 的数据包啊,以此类推,就会出现大量的重复性更新!!!

                                   这时, 想想 水平分割!!!!

                                   从此口进的路由不许再从此口出,也就是说当 1 发给 下面四个路由器,下面

                                   四个就没有资格再往回发了,只能往自己下面发,这样就没有重复了!!

                                   这才是 水平分割的核心意义!!

                                   水平分割 主要用于避免 MA 网段中的重复更新问题!! 

                        

                                   

                                                                      

        毒性逆转水平分割 :     从那个口学来的还从那个口出 ,但是必须得带毒 

                                               你刚看到这个机制,你肯定就会好奇,为什么叫 毒性逆转。。。

                                               就会觉得这个名字一定有背后的秘密!!

                                                

                                               当时在发明 RIP 协议时,仅仅只发明了更新包,就是只能发出消息

                                               告诉邻居我能到哪!!  而不能给邻居发消息说 我不能到哪!!

                                               就是没法告诉邻居 说我不能到那个网段!!

                                               所以,发明 RIP 协议这个人就想了一种方法,

                                               由于它不能表达不能到那去,举个例子就是 : 我只能告诉你我有什

                                               么吃的,没法告诉你我没有吃的 !

                                               所以,我就告诉你我有一瓶耗子药你要不要!!!

                                               你肯定不要啊,耗子药不就有毒嘛,谁能吃耗子药呢???

                                               所以你收到后就会知道我其实是没有吃的!!!

                                               具体举例 :

                                                我告诉你我能到 1.0 网段,但是要 16 跳,你要不要??

                                                ( RIP 最大跳数才是 15 跳 ,你现在告诉我 16 跳,当我收到后自

                                                  然就明白,1.0 网段是到不了的!!)   

                                                这就叫   毒性  !!!!

                                            那逆转是什么呢 ??

                                             那么当收到 16 跳的这台路由器,是否收到了,给它发的路由器知不

                                             知道?? 不知道啊!!!  又没有确认机制!!!

                                             所以 ,收到 16 跳的路由器 还会把 16 跳的这条路由再返回去,再返

                                             给发给它的路由器以此来告诉  收到了这条路由 !!!!

                                              因为水平分割是 从此口出 不许再从此口入,但,实际上还是可以 返

                                              回一次的!!

                                             这个  行为就是 逆转水平分割!!

                                               

       

        看得出来 水平分割 和 毒性逆转 是矛盾的,一个让从口出,一个不让从口出,所以只能 二选

        一,华为设备默认开启的是水平分割,如果水平分割和毒性逆转同时开启,华为设备则按照

        毒性逆转的方式进行!!​​​​​​​

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值