OSPF(open shortest path first )

概述:

   1.OSPF 是公有标准协议,OSI 模型第三层,属于 IGP 路由协议;
   2.OSPF的数据包是直接封装在 IP 头部后面,协议号是 89 
   3.通过组播的方式发送报文,组播地址是 224.0.0.5,表示的是所有的OSPF路由器;

一、为什么会出现OSPF:

        在OSPF出现前,网络上广泛使用RIP(Routing Information Protocol)作为内部网关协议。由于RIP是基于跳数路由协议,距离矢量协议依照传闻进行路由的更新和路由的选择。这种情况下路由器并不了解整个网络的拓扑,只知道到达目的网络的距离,以及到达目的网络应该走哪个方向或者哪个接口,路由在传递过程中不能超过16个路由,严重影响网络的发展,因此只适用于小型企业,虽然思科推出了IGRP 和EIGRP 但是那是人家私有的,其它厂商是用不了的。对此存在着收敛慢、路由环路、可扩展性差等问题,所以就被OSPF取代。

二、工作原理:(三张表)
 (一)、建立邻居表,形成邻居关系;

        怎样建立邻居表:

        建立邻居是通过设备相互发送hello 报文进行参数比较,通过后形成邻居关系。

报文类型:
        1.Hello,负责邻居表的建立、维护和拆除;
        2.DD,database description,数据库描述报文
        3.LSR,link state request,链路状态请求;
        4.LSU,link state update ,链路状态更新;
        5.LSAck,link state ack,链路状态确认报文;

hello报文

OSPF hello 报文解析:

        1.OSPF header


   -version                    --- 表示 OSPF 的版本号,版本为2    
   - type                       --- 表示 OPPF 的报文类型 
   -packet length         --- 表示 OSPF 的报文长度
   -router id                  --- 表示 发送当前 OSPF 报文的那个路由器的 router-id 
   -area id                    --- 表示 OSPF 报文所属于的区域
   -checksum               --- 表示 OSPF 报文的校验和
   -auth type                --- 表示 OSPF 报文的认证类型,默认是Null,即空认证,也就是没做认证
   -auth data                --- 表示 OSFP报文的认证数据,即密码

        2.OSPF Hello packet


   -network mask                 - hello 报文的出接口的IP地址的网络掩码
   -hello interval                   - 发送 hello 报文的周期,默认是 10s 
   -options                           - 可选字段,体现的是一个 OSPF 路由器的能力
   -router priority                  - 表示路由器的优先级,默认是 1 
   -router dead interval        - 表示邻居关系的最大存活时间,默认是40s 
   -designated router           - 指定路由器(接口的概念,指的不是路由器)
   -back designated router  - 备份指定路由器(接口的概念,指的不是路由器)
   -active neighbor               - 包含的是邻居设备的 router-id ; 

        3.OSPF 邻居建立的影响因素 

        1.两个设备之间的IP必须互通
        2.确保路由器能够发送 OSPF 报文 
              ①.发送报文的接口的网段,必须 network 命令后面;

        不network 这个接口就不会发送hello包,没有包后面什么都不是了。


              ②.确保发送报文的接口,没有被配置为 OSPF 的静默接口(silent-interface)
        3.确保发送报文的方式是相同的
              1.要么都是组播  网络类型有  Broadcast  P2P P2MP  在接口下面进行修改。
              2.要么都是单播  网络类型有 NBMA  在接口下面进行修改。

        常见类型:
         广播(Broadcast) 
           -是否需要DR:是的
           -是否主动发送报文:是的
           -发送方式:组播, 224.0.0.5
           -hello计时器:10s
           -dead计时器:40s
         非广播(NBMA)
           -是否需要DR:是的 
           -是否主动发送报文:不是
           -发送方式:如果想要发,必须手动指定,进行“单播”
           -hello计时器:30s
           -dead计时器:120s   
         点到点(P2P)    , 此时认为该端口上仅仅2个设备,不需要 DR 的选举;
           -是否需要DR:不需要
           -是否主动发送报文:是 
           -发送方式:组播,224.0.0.5 
           -hello计时器:10s
           -dead计时器:40s
         点到多点(P2MP),此时认为该端口上存在很多个 P2P 的邻居,不需要 DR 的选举
           -是否需要DR:不需要
           -是否主动发送报文:是
           -发送方式    :组播, 224.0.0.5 
           -hello计时器:30s
           -dead计时器:120s   
        4.确保路由器能够接收 OSPF 报文 
              ①.接收报文的接口的网段,必须写在 network 命令后面;
              ②.确保接收报文的接口,没有被配置为 OSPF 的静默接口(silent-interface)
              ③.确保接收报文的接口,没有配置 ACL 策略,拒绝 OSPF 报文 
        5.确保路由器之间比较 OSPF hello 报文:
              1. router-id ,不能相同
              2. area-id ,必须相同
              3.认证,必须成功
              4.接口网络掩码,必须相同 【在特殊情况下】
              5.hello 周期,必须相同 
              6.可选项(options),必须相同
              7.路由优先级不能全为 0    【在特殊情况下】
              8.dead 周期,必须相同

 (二)、OSPF数据库:

        包含的内容是:LSA ,即 link state advertisement ,链路状态通告,也叫链路状态信息。OSPF 路由表中的条目信息,都是通过各种类型的 LSA ,计算出来的。如果没有 LSA,肯定没有 OSPF 路由, 如果有 LSA ,也不一定有 OSPF 路由。

      关于 LSDB ,需要知道的:
         1.LSDB 中包含了“自己的LSA”,以及“别的设备产生的 LSA ”
         2.在一个路由器的 LSDB 中,各种类型的 LSA 是按照“区域”进行组织起来的; 
         3.每个区域中的 OSPF 路由器的 LSDB 都是相同的(因为状态是 Full)
         4.不同区域中的 OSPF 路由器的 LSDB 都是不相同的

要想学好LSDB就得了解它,并且爱上它,从它的结构,同步过程呀,以及它的作用和计算原理。

        ①.LSDB的结构:

 分析一下:

        type:表示的是 LSA 的类型,类型包括 1/2/3/4/5/7
        LinkState ID ,表示的是LSA的名字;不同类型的 LSA ,名字的表示方法是不相同的
        AdvRouter,表示的是 产生这个 LSA 的路由器的 router-id ; 
        Sequence,表示的是 LSA 的“序列号”,体现 LSA 的新旧程度;序列号越大,表示越新;

如果 LSA 的 “type”相同、“LinkState ID”相同、“AdvRouter”也相同, 那就可以说:它两是相同的 LSA 。两个相同咋办 那只能看它们的Sequence ,保留数字大的。
那么最终的话,仅仅会在数据中保留1个,即只会保留“最新的LSA”,也就是“序列号”大的那一个。

        ②.LSDB同步过程:

        1.两个 OSPF 路由器,在互相直连的接口,周期性的发送 OSPF Hello报文,通过比较 hello 报文的参数,进行邻居状态的迁移,从而邻居状态从 down 变成 full 。  
邻居的状态迁移
        down,此时表示邻居完全断开。
        init,初始化状态,表示刚刚收到邻居发送过来的hello报文,并且在该hello报文中没有自己。比如你喜欢一个姑娘,你俩也认识彼此,你给那姑娘买了一束花想给个惊喜,于是你就放在了她的桌子上,她来了看到了花让后四处观看是谁送的,结构你害羞就没回应,于是她以为是她暗恋的人给买的,结构就没结构了,你俩就只能成为朋友,就不能再上进一点了,哎 还是码字吧。
        two-way,双向通信状态,表示在邻居发送过来的hello报文中,发现了自己的 router-id ,为了实现后续的数据库同步过程更加的高效,此时,就开始进行 DR/BDR 的竞选。 
                 选择原则:
                     接口优先级不能全为0,全为0的设备,永远只能是 DRother ;
                     首先比较端口的 dr 优先级,越大越好;默认是1;
                     其次比较路由器的 RID ,越大越好;     
                同时, DR/BDR 有个特点就是稳定。即邻居之间的 DR/BDR 一旦选定了,那么即使来了一个 DR 优先级更高的路由器,也不会将DR/BDR 的身份抢占过去,如果想要重新选举DR ,那么就不修得“重启OSPF路由器”或者“OSPF协议进程”,并且,一旦有了DR、BDR、DRother,那么各种设备之间的关系是: 
                   所有的设备,都和DR/BDR 同步数据库,建立 Full 状态的邻接关系。
                   DRother 之间,永远只能处于 two-way 状态,此时只能称之为邻居关系。

        exstart,交换初始化状态。主要的目的是为了接下来的“exchange"做准备工作。该在状态的时候,设备之间发送了第一个 DD 报文 ,主要是用来确定邻居设备之间的主/从关系,为了后续的数据库同过程中更加的“可靠”。
                主/从关系的选举原则:比较两个邻居路由器的 router-id ,越大越好; 

               在 DD 报文中,存在以下3个关键的字段:
                     i:   表示的是initional,初始化的意思;
                              -如果1,表示这个DD就是“初始化”DD报文,即第一个DD报文;
                              -如果0,表示这个DD报文不是“第一个”DD报文; 
                    m:表示的是 more ,更多的意思;
                              -如果1,表示后续还有更多的DD报文,即当前这个DD报文不是最后一个DD;
                              -如果0,表示后面没有更多的DD报文,即当前这个DD报文是最后一个DD;                         
                    M/S:表示的是 Master/Slave ,即主/从关系的身份                     
                              -如果1,表示发送这个DD报文的设备身份是 Master,即主设备;
                              -如果0,表示发送这个DD报文的设备身份是 Slave,即从设备;

        exchange,交换状态,在该状态交换的是邻居设备之间的数据库条目的“简要信息”,即大量的 DD 报文。  DD,就是数据库描述报文。里面包含的是仅仅是数据库条目中的 LSA 的简要信息,不是详细信息。当邻居设备之间的数据库的 DD 报文,全都“交换”完毕的时候,两边设备才开始对比DD报文,看看两个设备的数据,哪里存在差异。对自己没有的 LSA ,主动开始进行请求。

        loading,加载状态。基于“交换状态”收到的大量的 DD 报文,以及最终的比对结果。终于知道了双方的数据库到底存在哪些类型的 LSA 的差异。所以,开始主动的向对方发送 LSR,对方收到以后,就开始回复 LSU 。并且,LSR和LSU这两种类型的数据库,都必须通过可靠的方式进行传输。 所以,在传输 LSR 和LSU 的时候的,都会返回一个 LSAck 。 当两边的数据库中的 LSA 的信息,完全一致的时候,就算是“加载完毕”,然后进入下一个状态
                
        Full ,完全邻接。此时互为邻居的两个设备,数据库完全一致,可以称之为“邻接”。

        ③.LSA的作用:

1类LSA
作用:
      任何一个路由器,都会在自己所连接的任何一个区域,产生1个1类LSA
      用于表示自己的每个链路的信息,相当于设备在指定区域中的“自我介绍”      
type : router 
link-state ID : 每个路由器的 router-id  
AdvRouter :  每个路由器的 router-id 
特点:
     该类型的 LSA ,仅仅在一个区域内部传输;
     每个路由器都会在所连接的每个区域,都独自产生1个;

2类LSA
作用:
    DR 产生2类LSA的作用,主要就是在一个网段中,描述 DR 的管理范围/设备; 
type : Network
link-state ID : DR的接口IP地址
AdvRouter : DR接口所在的路由器的 router-id 
特点:
    只有 DR 可以产生2类LSA 
    该类型的 LSA 只能在一个区域内部传输

3类LSA
作用: 
   在不同的区域之间,进行路由条目信息的传递;
type : sum-net
link-state ID : 区域之间的路由的网段
AdvRouter :  ABR 的 router-id 
特点:
     只有ABR可以产生3类 LSA ,在不同区域之间传递路由信息;
     该类型的 LSA 只能在一个区域内部传输
     该类型的 LSA 在传输过程中,每经过一个 ABR ,advRouter 就会变成所经过的那个 ABR 的 router-id 

4类LSA
作用: 
    在不同区域之间,传递 ASBR 的 router-id ; 
    配合5类LSA,进行 OSPF 外部路由的计算。
type : Sum-Asbr
link-state ID : ASBR 的 router-id 
AdvRouter :  与 ASBR 在同一个区域的 ABR 的 router-id 
特点:
     与ASBR在同一个区域的ABR产生的;
     该类型的 LSA 只能在一个区域内部传输
     该类型的 LSA 在传输过程中,每经过一个 ABR ,advRouter 就会变成所经过的那个 ABR 的 router-id 

5类LSA
作用: 
     表示 OSPF 的外部路由;传遍整个 OSPF 网络。
type : External
link-state ID : 外部路由的网段;
AdvRouter :  ASBR 的 router-id 
特点:
   只有 ASBR 才可以产生 5类 LSA 
   5类 LSA 在传输过程中,没有任何区域限制。

7类LSA  (特殊区域才有)
作用: 
     表示 OSPF 的外部路由,但是只能在 NSSA 区域内部传输;
type : NSSA
link-state ID : 外部路由的网段;
AdvRouter :  ASBR 的 router-id 
特点:
   只有 NSSA 区域中的 ASBR 才可以产生 7类 LSA 
   该类型的 LSA 只能在区域内部传输;
   该区域的 ABR 会自动的将7类LSA转换成5类LSA
   如果该NSSA区域有多个ABR,只有router-id 大的才能进行7->5的转换;

为了避免这种不稳定的外部链路,对内网中重要的 OSPF 区域的影响,

我们提出了“ OSPF 特殊区域” 的概念:即不要4/5类LSA的区域,就叫做特殊区域;具体类型,分为:
-stub(末梢区域)
   *作用:保护该区域不受到不稳定的外部链路的影响;
   *配置:在该区域的所有路由器上,配置下面的命令: 
              ospf 1
                 area 12 
                    stub 
   *特点:
         1.该区域不要4/5类LSA 
         2.该区域要1/2/3类LSA 
         3.该区域的ABR,会自动的产生1个表示默认路由的3类LSA
-totally stub (完全末梢区域)
   *作用:保护该区域不受到不稳定的外部链路的影响,也不受到其他区域的链路的影响;
   *配置:仅仅在 stub 区域的 ABR 上,配置下面的命令: 
              ospf 1
                 area 12 
                    stub  no-summary 
   *特点:
         1.该区域不要3/4/5类LSA 
         2.该区域要1/2类LSA 
         3.该区域的ABR,会自动的产生1个表示默认路由的3类LSA
-nssa(not so stub area :不那么stub的区域)
   *作用:保护该区域不受到不稳定的外部链路的影响;
              但是, 
              自己本区域的设备,却是可以引入外部路由的。
   *配置:在该区域的所有设备上,配置下面的命令: 
              ospf 1
                 area 45
                    nssa                                 
   *特点:
         1.该区域不要4/5类LSA 
         2.该区域要1/2/3/7类LSA 
         3.该区域的ABR,会自动的产生1个表示默认路由的7类LSA
-totally nssa (完全  nssa )
   *作用:保护该区域不受到不稳定的外部链路的影响;同时也不受到其他区域的不稳定的链路的影响;
              但是, 
              自己本区域的设备,却是可以引入外部路由的。
   *配置:仅仅在NSSA区域的ABR上,配置下面的命令: 
              R4/R7:
              ospf 1
                 area 45
                    nssa        no-summary                         
   *特点:
         1.该区域不要3/4/5类LSA 
         2.该区域要1/2/7类LSA 
         3.该区域的ABR,会自动的产生2表示默认路由的LSA:一个是3类LSA,一个是7类LSA
           最终,该区域中的所有路由器,使用的默认都是,都是通过3类LSA计算出来的;
           
          

(三)、计算路由,形成路由表:

     在OSPF网络中,每台路由器根据自己周围的网络拓扑结构生成链路状态通告LSA(Link State Advertisement),并通过更新报文将LSA发送给网络中的其它路由器。RIP交互的是路由。与RIP不同,OSPF交互的是链路状态信息。也就是说,RIP中,路由器的选路依赖于邻居路由器的路由信息,但不管邻居路由器传达的信息是否正确;而OSPF中,路由器的选路是一种“自主行为”,LSA只是一种选路的参考信息。

每台路由器都通过链路状态数据库LSDB(Link State DataBase)掌握全网的拓扑结构。每台路由器都会收集其它路由器发来的LSA,所有的LSA放在一起便组成了链路状态数据库LSDB。LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。在网络拓扑稳定的情况下,各个路由器得到的有向图是完全相同的。

OSPF 建立好邻居以后,就开始交互LSA ,更新LSA,最后形成LSDB ,OSPF 又用SPF 算法,以每个OSPF 路由器自身为根,计算一棵到全网的最短路径树,这棵树给出了到自治系统中各节点的路由。相对于RIP,这种机制极大地提升了路由器的自主选路能力,使得路由器不再依靠路由通告进行选路。SPF时间间隔为5秒钟。

这几个图很重要。

OSPF 路由 主要是通过1 类 3类 5类/7类 计算出来的,他们直接的优先级是1 > 3 >5/7

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值