定义

  1. 开放式最短路径优先,基于链路状态特征
  2. 工作在IP层,协议号89

    RIP与0SPF比较

    RIP

  • 距离矢量路由协议
  • 基于跳数选择最优路径
  • 每隔30s向邻居广播自己的整个RIP路由表

    OSPF

  • 链路状态路由协议

  • 基于链路开销选择最优路径
  • 触发更新或每隔30分钟向邻接路由器发送链路状态信息的摘要,增量更新机制
  • 工作于IP层之上,IP协议号为89
  • 路由优先级:10/150
    • 内部路由优先级:10
    • 外部路由优先级:150(O_ASE,O_NSSA)
    • 两种优先级可避免双点双向重发布时产生的环路问题和次优路径问题
  • 以组播地址224.0.0.5发送协议包

基本思想:每个路由器将其已知的链路状态信息告诉邻居,收敛以后,网络上每个路由器对全网的链路状态有相同的认识。然后,每台路由器根据了解到的全网链路状态,独立计算路由。

metric值

  • 开销值计算:OSPF基础 - 图1
  • 手动更改接口下开销值
  • 手动更改参考带宽:ospf下 bandwidth-reference <单位>

    报文头部

    image.png

    Router ID

  • 一台路由器如果要运行OSPF协议,则必须存在RouterID(RID)。RID是一个32比特无符号整数,可以在一个自治系统中唯一的标识一台路由器。
  • RID可以手工配置,也可以自动生成。

    1. [R1]router id 1.1.1.1
    2. Info: Router ID has been modified, please reset the relative protocols manually
    3. to update the Router ID.
    4. [R1]ospf 1 router-id 1.1.1.1
  • 如果没有通过命令指定RID,将按照如下顺序自动生成一个RID :

    • 如果存在配置IP地址的Loopback接口,则选择Loopback接口地址中最大的作为Router lD ;
    • 如果没有配置IP地址的Loopback接口,则从其他接口的IP地址中选择最大的作为Router ID(不考虑接口的up/down状态)
    • 自动选举产生Router-id,即使设备配置了更大的环回口地址,router-id不发生改变,除非原地址消失

      Area-id

  • ospf共有2^32个area区域,area0为骨干区域

  • 划分区域的目的:如果网络规模较大,运行ospf时产生的LSDB规模也会较大,基于LSDB计算路径会增加设备的计算压力。划分区域后,每台设备只需维护区域内较小规模的LSDB,减轻设备计算压力

    好处

  • 减少了区域内LSDB中链路状态信息的数量,降低了运行OSPF协议对路由器性能的要求

  • 可以将相同功能性或地理位置的路由器划分为一个区域内,以便于管理。
  • 隔离拓扑变化,减少路由震荡对整个自治系统的影响

    Auth Type

    1. - 0---无认证
    2. - 1---明文认证
    3. - 2---MD5认证

    Auth Data

    | 路由协议的类型 | 路由协议的内部优先级 | 路由协议的外部优先级 | | —- | —- | —- | | Direct | 0 | 0 | | OSPF | 10 | 10 | | IS-IS Level-1 | 15 | 15 | | IS-IS Level-2 | 18 | 15 | | Static | 60 | 60 | | RIP | 100 | 100 | | OSPF ASE | 150 | 150 | | OSPF NSSA | 150 | 150 | | IBGP | 200 | 255 | | EBGP | 20 | 255 |

  • 路由协议的内部优先级则不能被手工修改(当有到达同一个目的地址的多条路由时,可以根据优先级的大小,选择其中一个优先级数值最小的作为最优路由,并将这条路由写进路由表中)

  • 选择路由时先比较路由的外部优先级,当不同的路由协议配置了相同的优先级后,系统会通过内部优先级决定哪个路由协议发现的路由将成为最优路由

    一、OSPF的防环机制

    1、OSPF区域内,采用SPF算法防环。

    同一个区域内所有的路由器,拥有该区域的LSDB相同,基于LSDB采用dijkstra算法计算出一棵以自己为根的、无环的最短路径树,因此在区域内消除了环路。

    2、OSPF区域间,设定规则防环

  1. OSPF规定所有非骨干区域必须直接和骨干区域相连,非骨干区域之间需要通信必须经过骨干区域。
  2. 水平分割。ABR只会将三类LSA转发到骨干区域,如果始发的是本区域的路由是不会被再次注入进来的。ABR不会向区域0传播它在非0区域学习到的类型为LSA三类的路由。

    OSPF更新方式

    组播更新
  • 224.0.0.5—-所有OSPF路由器监听
  • 224.0.0.6—-DR/BDR监听

    OSPF区域划分

  • 划分区域以后,可以带来以下好处:

    • 避免骨干域过大,核心路由器压力过多
    • 每个区别内的LSA均只有自己区域内的,降低了域内的每个路由器的压力
    • 节省区域中的每一个设备的系统资源
      • 大区域被划分以后,小区域中的数据库内容就会变少同一个区域中的所有的路由器,数据库是完全相同
  • 增强 OSPF 网络的稳定性
    • 一个不稳定链路造成的不良影响,仅在同一个区中传播,不会影响到其他区域。
    • 3类LSA和路由聚合可以有效减少或避免某区域内的路由变化对整网带来路由震荡。这个在网络大的时候非常重要。
  • 划分区域的弊端
    • OSPF是链路状态算法,是loop free(无路由环路)的。这个链路状态算法只是在域内,而域间实质上是DV算法。为了避免路由环路,就有了所有非骨干区域必须围绕area0来建立,而为了避免这个问题又引入了虚链接。
  • ospf协议中
    • 多区域部署时必须存在骨干区域(area0),作用是防止环路
    • 单区域部署时可以不存在area0区域

骨干区域

  • 区域0称为骨干区域

非骨干区域

  • 除区域0以外的其他区域称为非骨干区域

RIP存在缺陷:基于传闻路由协议(周期更新完整路由表)、基于跳数计算开销、最大跳数为15跳(16跳不可达)
OSPF改进:基于LSA链路状态通告利用SPF算法独立计算、基于带宽计算开销、区域划分
OSPF基础 - 图3

OSPF协议工作过程

邻居关系建立共准备了三种解析,任选其一观看即可

邻居关系建立过程(一)

状态含义:

  • Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
  • Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
  • 2-Way:在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信。

邻居建立过程如下:
QQ图片20210731122208.png
1、RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2。当RTA启动OSPF后,RTA会发送第一个Hello报文。此报文中邻居列表为空,此时状态为Down,RTB收到RTA的这个Hello报文,状态置为Init。
2、RTB发送Hello报文,此报文中邻居列表为空,RTA收到RTB的Hello报文,状态置为Init。
3、RTB向RTA发送邻居列表为1.1.1.1的Hello报文,RTA在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
4、RTA向RTB发送邻居列表为2.2.2.2的Hello报文,RTB在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
因为邻居都是未知的,所以Hello报文的目的IP地址不是某个特定的单播地址。邻居从无到有,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)。

邻居关系建立过程(二)

1、发现邻居

  • 通过组播hello包
  • 所有邻居都可能跟自己交换链路状态信息

1.png
2.png1.png1.png1.png1.png2.png

2、建立邻接关系

  • 只有建立邻接关系的邻居路由器才会交换链路状态信息
  • 不是跟所有邻居都建立邻接关系
  • 在网络中选举DR和BDR,网络内所有路由器只与DR和BDR建立邻接关系
  • 广播型网络中会选DR和BDR,PPP网络中不会选举DR和BDR

ospf5.png

3.传递链路状态信息

每台设备都有一个LSDB(Link StateDatabase,链路状态数据库)LSDB 中每一条就是LSA(Link State Adverti sement ,链路状态公告):描述链路状态信息,例如网络中某台路由器的编号是什么,其直连的网段是什么,开销是多少等

  • 触发更新每隔30分钟更新一次
    • 触发更新:如果网络发生变化,不需要等到30分钟周期,立刻向邻居发送信息。
  • 增量更新机制,只发邻居需要的LSA
  • 收敛以后,区域内**所有路由器具有相同的LSDB**.
    • 这个LSDB能体现全网的链路状态(该网络中有哪些路由器,各自编号是什么,每台路由器直连的网段是什么,开销是多少)

      4.路由计算

      ospf7.png

      邻居关系建立过程(三)

      OSPF07.png
      1.RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2。RTA启动OSPF后,RTA会发送第一个Hello报文(以组播的方式发送,目的地址为224.0.0.5),此时状态为Down,RTB收到RTA的Hello报文后,状态置为init
      ospf-1.png
      上图是RTA首次发送一个Heloo报文。需要主要的是,首次发送hello包的时候不包括邻居字段,包的长度为44。
      2.RTB发送Hello报文,RTA收到RTB发送的报文之后,状态为Init
      ospf-2.png
      3.RTB向RTA发送邻居列表为1.1.1.1的Hello报文,Hello报文发送三个周期(也有超过3个周期),RTA在收到RTB发来的报文邻居列表中发现自己的Router ID,而且匹配6个条件(建立邻居的6个条件)成功之后,状态为2-way,也称为邻居状态
      ospf-3.png
      4.RTA向RTB发送邻居列表为2.2.2.2的hello报文,Hello报文发送三个周期(也有超过3个周期),RTB在收到hello报文邻居列表中发现自己的Router ID,而且匹配6个条件(建立邻居的6个条件)成功之后, 状态置为2-way,也称为邻居状态
      ospf-4.png

ospf11.png
当邻居建立完成,交换状态就开始了
OSPF基础 - 图20
ospf12.png

邻居关系建立过程(四)

  1. 邻居关系建立完成后进入邻接关系建立阶段
  2. 邻接关系建立指同广播域下的ospf路由的状态机互为full状态
  3. 邻接关系建立过程

未命名文件 (9).png
EX-start

  • 邻接关系建立是在EXstart状态进行主/从选举
    • 主/从关系用于OSPF确认是否收到DBD报文,是OSPF的隐士确认机制
    • 主/从选举规则
      • route-id比大,大的为主(master),小的为从(backup)
    • 主从关系通过DBD报文中DB Description字段中:I(Init)位,M(more)位,MS(Master)位中数值决定。MS位为1代表主(master),0代表从(Backup)
    • 主/从关系选举完成后,从先发送第一个带有LSA简要信息的DBD报文,主回复DBD报文进行确认
  • 影响邻接关系建立的因素
    • MA网络中所有路由器优先级不能为0
    • Broadcast网络中MTU值不一致
      • MTU值在EXstart状态时进行协商
      • 默认状态下华为设备关闭MTU协商,当接口下MTU值不一致时能建立邻接关系,并计算路由
      • 当接口下开启MTU协商时,MTU不一致不能建立邻接关系
        • route-id小的一端(从端)MTU值小于route-id大的一端(主端)时,主/从无法选举,双方状态处于EXstart状态
          • EXstart状态时双方发送空的DBD报文进行主/从协商,序列号协商
          • route-id小的一端所发送的DBD报文能被route-id大的一端处理
          • route-id大的一端所发送的DBD报文不能被route-id小的一端处理
          • 所以route-id小的一端不知道自己route-id小,一直发送MS=1的DBD消息,route-id大的一端就一直接收此消息,导致主/从选举一直处于协商阶段,从而使两端状态停留在EXstart状态
        • route-id小的一端(从端)MTU值大于route-id大的一端(主端)时,从端处于EXchange状态,主端处于EXstart状态
          • EXstart状态时双方发送空的DBD报文进行主/从协商,序列号协商
          • route-id小的一端所发送的DBD报文不能被route-id大的一端处理
          • route-id大的一端所发送的DBD报文能被route-id小的一端处理
          • 所以route-id大的一端不知道自己route-id大,就一直发送空的DBD报文,自己的状态处于EXstart。route-id小的一端知道自己route-id小,将自己的MS位置为0,自己为从,进入EXchange状态

EXchange—-通过交互包含LSA头部信息的DBD,完成数据库对比
Loading—-通过LSR请求、LSU更新、LSAck确认进行LSDB数据库同步
Full—-完成LSDB数据库同步,完全邻接状态

OSPF邻接关系建立的条件

  • 如果接口开启MTU检测(华为默认不开启),则接口MTU需要一致
  • MA网络所有路由DR优先级不同时为0

DR OTHER 之间2-way(DR OTHER既不是DR也不是BDR)
image.png

  1. [R3-GigabitEthernet0/0/0]display this
  2. [V200R003C00]
  3. #
  4. interface GigabitEthernet0/0/0
  5. ip address 123.1.1.3 255.255.255.0
  6. ospf dr-priority 0
  7. #
  8. return
  9. [R3-GigabitEthernet0/0/0]
  10. [R2-GigabitEthernet0/0/0]display this
  11. [V200R003C00]
  12. #
  13. interface GigabitEthernet0/0/0
  14. ip address 123.1.1.2 255.255.255.0
  15. ospf dr-priority 0
  16. #
  17. return
  18. [R2-GigabitEthernet0/0/0]
  19. [R3]display ospf peer brief
  20. OSPF Process 1 with Router ID 3.3.3.3
  21. Peer Statistic Information
  22. ----------------------------------------------------------------------------
  23. Area Id Interface Neighbor id State
  24. 0.0.0.0 GigabitEthernet0/0/0 1.1.1.1 Full
  25. 0.0.0.0 GigabitEthernet0/0/0 2.2.2.2 2-Way
  26. ----------------------------------------------------------------------------

邻居建立过程思维导图

OSPF基础 - 图24

OSPF初始化流程思维导图总结

1.建立邻居和邻接关系
组播地址224.0.0.5只有运行OSPF的设备可以接收到
OSPF基础 - 图25
2.邻接路由器之间交换链路状态信息,实现区域内链路状态数据库同步
OSPF基础 - 图26
3.每台路由器根据本机链路状态数据库,计算到达每个目的网段的最优路由,写入路由表

LSDB同步

状态含义:

  • ExStart(信息交换初始状态):邻居状态变成此状态以后,路由器开始向邻居发送DD报文。Master/Slave关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。在此状态下发送的DD报文不包含链路状态描述。
  • Exchange(信息交换状态):在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。
  • Loading(加载):在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。
  • Full:LSDB同步过程完成,路由器与邻居之间形成了完全的邻接关系。

LSDB同步过程如下:
5.png

  1. RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系。当RTA的邻居状态变为ExStart后,RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master。
  2. 当RTB的邻居状态变为ExStart后,RTB会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于RTB的Router ID较大,所以RTB将成为真正的Master。收到此报文后,RTA会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
  3. 当RTA的邻居状态变为Exchange后,RTA会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,序列号设置为RTB在步骤2中使用的序列号Y(隐式确认),I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示RTA宣告自己为Slave。收到此报文后,RTB会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
  4. 当RTB的邻居状态变为Exchange后,RTB会发送一个新的DD报文,此报文包含了LSDB的摘要信息,DD序列号设置为Y+1, MS-bit=1,表示RTB宣告自己为Master。
  5. 虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,RTA需要对Master发送的每一个DD报文进行确认。所以,RTA向RTB发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading。RTB收到此报文后,会将邻居状态变为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。

6.png
1、RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。
2、RTB向RTA发送LSU报文,LSU报文中包含了那些被请求的链路状态的详细信息。RTA在完成LSU报文的接收之后,会将邻居状态从Loading变为Full。
3、RTA向RTB发送LSAck报文,作为对LSU报文的确认。RTB收到LSAck报文后,双方便建立起了完全的邻接关系。
从建立邻居关系到同步LSDB的过程较为复杂,错误的配置或设备链路故障都会导致无法完成LSDB同步。为了快速排障,最关键的是要理解不同状态之间切换的触发原因。
四、整体流程图
7.png
这是形成邻居关系的过程和相关邻居状态的变换过程。

  1. Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和Router DeadInterval间隔相同。
  2. Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果Router DeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
  3. Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
  4. 2-Way Received:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。
  5. 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
  6. 1-Way Received:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。
  7. ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的;初始DD序列号是在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。
  8. Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
  9. Loading:相互发送LS Request报文请求LSA,发送LS Update通告LSA。
  10. Full:两台路由器的LSDB已经同步。

    LSDB更新

    OSPF基础 - 图30
    LSDB更新.png

    OSPF开销计算

    OSPF基础 - 图32

    OSPF的三张表

  • 邻居表
    • 记录邻居状态和关系
  • 拓朴表
    • 链路状态数据库
  • 路由表

    • 记录由SPF算法计算的路由(每台路由分别会以自己为根节点计算最小生成树)

      OSPF分区域管理

      ospf07.jpg
  • 同一个区域内路由器才会建立邻居关系,交换LSA,收敛后,同一个区域内所有设备具有相同的LSDB,这个LSDB反映了区域内的链路状态,再计算区域内的路由。

  • 不同区域之间,由区域边界路由器ABR直接转发路由。
  • 每个区域有一个ID,ID是32位二进制,可以表示为一个十进制数,也可以表示为点分十进制形式。
    • 例如:区域0等价于区域0.0.0.0;区域1等价于区域0.0.0.1。
  • 骨干区域—区域0。
  • 所有非骨干区域间通信都要通过骨干区域0转发。
  • 如果网络中有不同的ospf区域,肯定有个区域是区域0.

OSPF基础 - 图34

OSPF网络类型

定义

  • 对于不同的二层链路类型的网段,OSPF会生成不同的网络类型
  • 不同的网络类型,DR/BDR选举,LSA细节,协议报文发送形式等会有所不同

    类型

    OSPF基础 - 图35

    Broadcast(广播多路访问)

  1. 以太网链路与FDDI链路(百兆光纤)下启用ospf协议是时网络类型被认定为Broadcast网络
  2. DR/BDR 在2-way阶段完成DR/BDR选举
    1. 用于简化ma网络拓扑结构,介绍LSA的泛洪

OSPF基础 - 图36

  1. 作用讲解
  2. 选举规则
    • 优先级比大
    • 优先级一致,Router-id比大
    • 选举制:无法手动指定DR,只能通过每台设备自动选举。选举时间为40s
    • 终生制:DR/BDR无法抢占,每ospf设备发送的Hello包中会携带,DR/BDR的地址,如果新加入的ospf设备发现已存在DR/BDR,不参与选举,也不等待40
    • 继承制:当DR出现故障时,BDR立即称为新的DR,其余设备只能进行BDR选举
    1. 报文发送方式
  • hello、lsu、lsack—-组播发送
  • DBD、lsr——————单播发送 ```swift [R2]display ospf interface GigabitEthernet 0/0/0

    OSPF Process 1 with Router ID 2.2.2.2

    1. Interfaces

Interface: 123.1.1.2 (GigabitEthernet0/0/0) Cost: 1 State: BDR Type: Broadcast MTU: 1500
Priority: 1 Designated Router: 123.1.1.3 Backup Designated Router: 123.1.1.2 Timers: Hello 10 , Dead 40 , Poll 120 , Retransmit 5 , Transmit Delay 1

  1. > - 以太网网络,需要进行DRBDR的选举
  2. > - BMA是一个支持广播的网络环境,允许多台设备接入,任意两台设备都可以进行二层通信。
  3. > - BMA网络中需要选举DRBDR
  4. > - BMA中以组播的形式发送hello报文,LSU报文,LSAck报文,以单播的形式发送DD报文和LSR报文。
  5. > - 所有的OSPF路由器都会侦听224.0.0.5这个组播地址,当要发送给所有路由器时,目的地址为224.0.0.5.
  6. > - DRBDR会侦听224.0.0.6这个组播地址,当要发送给DRBDR时目的地址为224.0.0.6.
  7. > - 此处的发送指的是OSPF报文。
  8. <a name="DNm6c"></a>
  9. #### P2P(点到点网络)
  10. - pppHDLC封装的接口运行ospf时的网络类型
  11. - 不需要选DR/BDR
  12. - 所有报文全部使用组播发送
  13. - 如果ma网络中只有两台设备,不需要选举DR/BDR,可以修改网络接口类型为p2p,加快邻居建立速度
  14. 不用进行DRBDR的选举,直接形成邻接关系
  15. > - P2P网络是指一段链路上只能连接两台设备的环境,例如PPP链路
  16. > - 当两台设备通过PPP链路进行连接,设备上采用的接口封装协议就是PPP,当激活OSPF时,OSFP会根据接口的数据链路层封装将它网络类型设置为P2P,采用HDLC封装时,缺省网络类型也为P2P
  17. > - P2P网络类型中,5OSPF报文都是通过组播地址224.0.0.5来发送的。在缺省状态下,接口会以10S的周期去发送hello报文。
  18. <a name="azD2z"></a>
  19. #### NBMA(非广播多路访问(完全相连的FR网络))
  20. 1. 帧中继封装的接口运行ospf的网络类型
  21. - 帧中继
  22. - 帧中继使用DLCI标签进行数据转发
  23. - 帧中继转发原理
  24. - 帧中继通过DLCI标签和接口的映射关系进行转发(类似MAC地址和接口的映射关系转发原理)
  25. 2. Hello 30sDead 120s
  26. 2. 需要选举DR/BDR
  27. 2. 不会主动发现邻居,必须手动指定邻居
  28. > - 不能发送广播和组播报文,所以在帧中继网络中,ospf没有办法通过发送hello包来简历邻居关系,只用使用单播方式来制定邻居,命令如下:peer x.x.x.x
  29. > - NBMA虽然也允许多台设备接入,但是它并不具备广播功能。为了顺利的进行邻接关系的建立,一般用单播的形式去发送hello报文。在NBMA网络中,也会进行DRBDR的选举。
  30. > - 缺省情况下,hello报文会以30S的周期被接口发送。
  31. <a name="WXDh4"></a>
  32. #### P2MP(点到多点网络(不完全相连的FR网络))
  33. - 只能通过手动配置修改出此网络类型
  34. - 适用于hub-spoke网络架构
  35. - 不选DR/BDR
  36. - Hello报文组播发送,其他报文单播发送
  37. > - 也是用点到多点的方式来建立连接,不需要进行DRBDR的选举
  38. > - 这种网络类型并不是根据接口封装自己设置的,而是需要管理员手动配置。在这种网络种无需选举DRBDR
  39. > - OSPFP2MP网络类型的接口上,以组播的形式发送hello报文,以单播的形式发送其他报文。
  40. > - 缺省状态下hello报文的发送间隔为30S.
  41. | 网络类型
  42. | Hello/Dead时间
  43. | 是否选举DR/BDR
  44. | 默认是否支持组播
  45. |
  46. | --- | --- | --- | --- |
  47. | P2P | 10s/40s | | |
  48. | Broadcast | 10s/40s | | |
  49. | NBMA | 30s/120s | | |
  50. | P2MP | 30s/120s | | |
  51. <a name="VoEAq"></a>
  52. ### 不同网络类型建立邻居
  53. | 网络类型1
  54. | 网络类型2
  55. | 结果
  56. |
  57. | --- | --- | --- |
  58. | Broadcast
  59. | P2P
  60. | 可以建立,无法计算路由
  61. |
  62. | Broadcast
  63. | P2MP
  64. | 修改Hello可以建立,无法计算路由
  65. |
  66. | Broadcast
  67. | NBMA
  68. | NBMA单播指定邻居机制无法兼容其他网络类型
  69. |
  70. | P2P
  71. | P2MP
  72. | 修改Hello可以建立,可以计算路由
  73. |
  74. | P2P
  75. | NBMA
  76. | 无法建立
  77. |
  78. | P2MP
  79. | NBMA
  80. | 无法建立
  81. |
  82. ```swift
  83. [R1-Serial1/0/0]ospf timer ?
  84. dead Interval after which a neighbor is declared dead
  85. hello Time between HELLO packets
  86. ldp-sync Specify LDP-OSPF synchronization timer interval
  87. poll Interval for sending Poll Hello packet in the NBMA network
  88. retransmit Retransmit interval
  89. [R1-Serial1/0/0]ospf network-type ?
  90. broadcast Specify OSPF broadcast network
  91. nbma Specify OSPF NBMA network
  92. p2mp Specify OSPF point-to-multipoint network
  93. p2p Specify OSPF point-to-point network

OSPF的七种状态机

ospf状态机.png
蓝色的为稳定状态,黄色为过渡
OSPF路由器在完全邻接之前,所经过的几个状态:

  • Down:没有启用OSPF的状态;邻居失效后变为该状态
  • Init:初始化状态,第一次收到对端发来的hello包(包含对端route-id)时,将对端的状态设置为init
  • 2-way:邻居状态,相互间周期发送hello的状态(双方建立会话)
  • Exstart:交换信息的初始化状态
    • 发送DBD(包含本地的LSA的摘要信息)报文,选举主从路由器(利用HELLO报文中的ID和优先权来进行选举,不允许抢占,DR没了,DBDR才能上)
  • Exchange:交换信息的状态
    • 该状态下,相互间发送DBD,告知对端本地所有的LSA的目录;同时,可以发送LSR,LSU,LSACK来学习对端的LSA
  • Loading:加载状态(没有学习完的状态)
    • 发送LSR,LSU,LSACK,专门学习对端的LSA的详细信息
  • Full:邻接状态(学习完的状态)

    • 彼此的LSDB同步,即所有的LSA相同

      OSPF报文类型

      OSPF基础 - 图38

      OSPF报文

      1. Hello消息

  • 用于发现,建立,维持邻居关系

image.png

2. DBD消息

  • LSDB描述,用于存放LSDB简要消息
  • 不携带摘要信息的DBD—-用于主从关系协商,mtu协商(华为设备默认关闭MTU协商)

image.png

  • I:是否为第一个报文
  • M:后续是否还有报文
  • M/S:Master/Slaver
  • DD Sequece:唯一序列号,同于DD对比确认
    • 携带摘要信息的DBD—-携带LSA的摘要消息,进行LSDB比对

image.png

3. LSR消息

  • 链路状态信息的请求
  • 请求分为单播请求和组播请求
    • 单播请求:对明确的邻居进行链路状态请求
    • 组播请求:目的地址为224.0.0.5,对所有启用ospf的设备进行链路状态请求

image.png
以列表形式请求相应LSA细节

4. LSU消息

  • 链路状态更新
  • 新报文分为单播更新和组播更新
    • 单播更新:明确的对一个邻居进行链路状态更新回复
    • 组播更新:目的地址为224.0.0.5,对所有启用ospf的设备进行跟新回复

image.png

5. LSACK消息

  • 链路状态同步的确认,对收到的LSU进行确认,抱枕可靠传输
  • 如果发送lsu后,没有收到LSack,5s后进行重传
  • 确认分为单播确认和组播确认
    • 单播:明确的对一个邻居进行链路状态数据的同步确认
    • 组播:目的地址为224.0.0.5,对所有启用ospf设备进行链路状态数据库同步确认
  • 发送lSU不一定方发LSAck确认
    • 隐士确认:DRother发送LSU时以为224.0.0.6为目标,当中包含DR/BDR
    • DR再向DRother发送更新,以224.0.0.5为目标,目标中也包含了此lsu的产生者
    • DR不需要再向此DRother发送LSack进行确认,通过返还给产生者的lsu进行确认

image.png

OSPF报文类型 作用
Hello 建立并维护邻居关系
Database Description (DD) 数据库内容的汇总(仅包含LSA摘要)
Link State Request (LSR) 请求自己没有的或者比自己更新的链路状态详细信息
Link State Update (LSU) 链路状态更新信息
Link State Acknowledge(LSAck) 对LSU的确认

OSPF报文直接封装在IP报文中,协议号为89。
OSPF06.png

常用命令

命令 作用
[h3c]ospf ‘process id’ router-id ‘rid’ 开启OSPF进程,指定Router-id,进入OSPF协议视图
[H3C]router-id “rid” 配置全局Router-id,对所有协议生效协议内指定Router-id的优先级更高
[h3c-ospf-1]area ‘area id’ 进入区域视图
[h3c-ospf-1]slient-interface ‘interface id’ 配置静默接口OSPF不会在向静默接口上收发协议报文
[h3c-GigabitEthernet0/0]ospf timer hello ‘seconds’ 配置接口HELLO时间
[h3c-GigabitEthernet0/0]ospf timer dead ‘seconds’ 配置接口DEAD时间
[h3c-GigabitEthernet0/0]ospf network-type ‘broadcast/nmba/p2mp/p2p’ 配置接口网络类型
[h3c-ospf-1]Bandwidth-reference ‘value’ 配置参考带宽
[H3C-GigabitEthernet0/0]ospf network-type {broadcast |nbma|p2mp[ unicast ]|p2p[ peer-address-check ]} 配置OSPF接口的网络类型
[H3C-GigabitEthernetO/0]ospf dr-priority priority 配置OSPF接口的路由器优先级
[h3c-ospf-1]default-route-advertise 将已经存在的默认路由引入到OSPF
[h3c-ospf-1]default-route-advertise always 自动产生一条默认路由LSA下发到OSPF
[h3c-ospf-1-area 0.0.0.0]network ‘ip address’ ‘wild-mask’ 宣告网段
wild-mask 掩码通配符0对应的部分需要匹配一致,1对应的部分不检查
reset ospf process 重置OSPF进程
[h3c]display ospf interface 查看OSPF接口信息网络类型通过此命令查看
[h3c]display ospf statistics error 查看OSPF报错信息
[h3c]display ospf lsdb 查看本地LSDB汇总信息
[h3c]display ospf peer 查看OSPF邻居关系FULL:邻接关系2-Way:邻居关系
[h3c]display ospf routing 查看OSPF路由信息可以查看路由所属区域和发布者
[h3c]display ospf statistics 显示OSPF的统计信息
[h3c]display ospf verbose 显示OSPF进程详细信息

[h3c]display ospf routing中type字段中具体的含义

字段 描述
Destination 目的网络
Cost 到达目的地址的开销
Type 路由类型(Intra-area、Transit、Stub、Inter-Area、 Type1 External和Type2 External)
NextHop 下一跳地址
AdvRouter 发布路由器
Area 区域ID
Total nets 区域内部、区域间、ASE和NSSA区域的路由总数
Intra area 区域内部路由总数
Inter area 区域间路由总数
ASE OSPF区域外路由总数
NSSA NSSA区域路由总数

表1-27 display ospf statistics error命令显示信息描述表

字段 描述
Router ID confusion 含有重复路由器ID的OSPF报文数
Bad packet 非法的OSPF报文数
Bad version 错误版本号的OSPF报文数
Bad checksum 校验和出错的OSPF报文数
Bad area ID 非法的区域ID的OSPF报文数
Drop on unnumbered link 在地址借用链路上丢弃的OSPF报文数
Bad virtual link 错误的虚链路的OSPF报文数
Bad authentication type 含有非法验证类型的OSPF报文数
Bad authentication key 含有错误验证码的OSPF报文数
Packet too small 报文长度太小的OSPF报文数
Neighbor state low 在低邻居状态收到的OSPF报文数
Transmit error 传输出错的OSPF报文数
Interface down 接口down的计数
Unknown neighbor 未知的邻居发来的OSPF报文数
HELLO: Netmask mismatch 网络掩码不匹配的Hello报文数
HELLO: Hello-time mismatch Hello定时器不匹配的Hello报文数
HELLO: Dead-time mismatch Dead定时器不匹配的Hello报文数
HELLO: Ebit option mismatch Option字段E位不匹配的Hello报文数
DD: MTU option mismatch MTU不匹配的DD报文数
DD: Unknown LSA type DD报文中描述未知类型LSA数目
DD: Ebit option mismatch Option字段E位不匹配的DD报文数
ACK: Bad ack 收到不匹配的ack数目
ACK: Unknown LSA type 收到LSA类型未知的ack数目
REQ: Empty request 不含有任何请求信息的LSR报文数
REQ: Bad request 请求错误LSA的LSR报文数
UPD: LSA checksum bad LSU报文中LSA校验和出错的LSA数目
UPD: Unknown LSA type LSU报文中含有未知类型LSA数目
UPD: Less recent LSA LSU报文中含有不是最新的LSA数目