网络技术 百分网手机站

浅析OSPF协议的工作原理(2)

时间:2017-05-11 10:59:57 网络技术 我要投稿

浅析OSPF协议的工作原理

  6.Exchange: 信息交换状态,本地路由器向邻居发送数据库描述包,并且会发送LSR用于请求新的LSA.

  7.Loading: 信息加载状态,本地路由器向邻居发送LSR用于请求新的LSA .

  8.Full: 完全邻接状态,这种邻接出现在Router LSA和Network LSA中.

  在DR和BDR出现之前,每一台路由器和他的邻居之间成为完全网状的OSPF邻接关系,这样5台路由器之间将需要形成10个邻接关系,同时将产生 25条LSA.而且在多址网络中,还存在自己发出的LSA 从邻居的邻居发回来,导致网络上产生很多LSA的拷贝,所以基于这种考虑,产生了DR和BDR.

  DR将完成如下工作:

  1. 描述这个多址网络和该网络上剩下的其他相关路由器.

  2. 管理这个多址网络上的flooding过程.

  3. 同时为了冗余性,还会选取一个BDR,作为双备份之用.

  DR BDR选取规则: DR BDR选取是以接口状态机的方式触发的.

  1. 路由器的每个多路访问(multi-access)接口都有个路由器优先级(Router Priority),8位长的一个整数,范围是0到255,Cisco路由器默认的优先级是1优先级为0的话将不能选举为DR/BDR.优先级可以通过命 令ip ospf priority进行修改.

  2. Hello包里包含了优先级的字段,还包括了可能成为DR/BDR的相关接口的IP地址.

  3. 当接口在多路访问网络上初次启动的时候,它把DR/BDR地址设置为0.0.0.0,同时设置等待计时器(wait timer)的值等于路由器无效间隔(Router Dead Interval).

  DR BDR选取过程:

  1. 在和邻居建立双向(2-Way)通信之后,检查邻居的Hello包中Priority,DR和BDR字段,列出所有可以参与DR/BDR选举的邻居.所有 的路由器声明它们自己就是DR/BDR(Hello包中DR字段的值就是它们自己的接口地址;BDR字段的值就是它们自己的接口地址)

  2. 从这个有参与选举DR/BDR权的列表中,创建一组没有声明自己就是DR的路由器的子集(声明自己是DR的路由器将不会被选举为BDR)

  3. 如果在这个子集里,不管有没有宣称自己就是BDR,只要在Hello包中BDR字段就等于自己接口的地址,优先级最高的就被选举为BDR;如果优先级都一样,RID最高的选举为BDR

  4. 如果在Hello包中DR字段就等于自己接口的地址,优先级最高的就被选举为DR;如果优先级都一样,RID最高的选举为DR;如果选出的DR不能工作,那么新选举的BDR就成为DR,再重新选举一个BDR。

  5. 要注意的是,当网络中已经选举了DR/BDR后,又出现了1台新的优先级更高的路由器,DR/BDR是不会重新选举的

  6. DR/BDR选举完成后,DRother只和DR/BDR形成邻接关系.所有的路由器将组播Hello包到AllSPFRouters地址 224.0.0.5以便它们能跟踪其他邻居的信息,即DR将洪泛update packet到224.0.0.5;DRother只组播update packet到AllDRouter地址224.0.0.6,只有DR/BDR监听这个地址.

  四 OSPF邻居关系

  邻接关系建立的4个阶段:

  1.邻居发现阶段

  2.双向通信阶段:Hello报文都列出了对方的RID,则BC完成.

  3.数据库同步阶段:

  4.完全邻接阶段: full adjacency

  邻居关系的建立和维持都是靠Hello包完成的,在一般的网络类型中,Hello包是每经过1个HelloInterval发送一次,有1个例外: 在NBMA网络中,路由器每经过一个PollInterval周期发送Hello包给状态为down的邻居(其他类型的网络是不会把Hello包发送给状 态为down的路由器的).Cisco路由器上PollInterval默认60s Hello Packet以组播的方式发送给224.0.0.5,在NBMA类型,点到多点和虚链路类型网络,以单播发送给邻居路由器。邻居可以通过手工配置或者 Inverse-ARP发现.

  OSPF泛洪

  Flooding采用2种报文

  LSU Type 4---链路状态更新报文

  LSA Type 5---链路状态确认报文

  在P-P网络,路由器是以组播方式将更新报文发送到组播地址224.0.0.5.

  在P-MP和虚链路网络,路由器以单播方式将更新报文发送至邻接邻居的接口地址.

  在广播型网络,DRother路由器只能和DR&BDR形成邻接关系,所以更新报文将发送到224.0.0.6,相应的DR以 224.0.0.5泛洪LSA并且BDR只接收LSA,不会确认和泛洪这些更新,除非DR失效 在NBMA型网络,LSA以单播方式发送到DR BDR,并且DR以单播方式发送这些更新.

  LSA通过序列号,校验和,和老化时间保证LSDB中的LSA是最新的,

  Seq: 序列号(Seq)的范围是0x80000001到0x7fffffff.

  Checksum: 校验和(Checksum)计算除了Age字段以外的所有字段,每5分钟校验1次.

  Age: 范围是0到3600秒,16位长.当路由器发出1个LSA后,就把Age设置为0,当这个LSA经过1台路由器以后,Age就会增加1个LSA保存在LSDB中的时候,老化时间也会增加.

  当收到相同的LSA的多个实例的时候,将通过下面的方法来确定哪个LSA是最新的:

  1. 比较LSA实例的序列号,越大的越新.

  2. 如果序列号相同,就比较校验和,越大越新.

  3. 如果校验和也相同,就比较老化时间,如果只有1个LSA拥有MaxAge(3600秒)的老化时间,它就是最新的.

  4. 如果LSA老化时间相差15分钟以上,(叫做MaxAgeDiff),老化时间越小的越新.

  5. 如果上述都无法区分,则认为这2个LSA是相同的.