计算机网络技术——OSPF基础

发布时间 2023-07-07 14:28:08作者: YuanKx

OSPF协议基础

OSPF三部曲

  1. 建立邻居关系,所有一切的开始

    router id
    • OSPF协议的router id 如何确认
      • 默认使用路由器的全局router id 作为OSPF 的router id
      • 默认情况下路由器上配置的第一个IP地址为全局router id
      • 允许管理员手工配置全局router id
      • 当管理员手工配置OSPF进程的router id 时,优先级最高
    • 工程项目上的建议
      • 一般项目上通常使用loopback接口地址作为全局router id 或者 协议的 router id 方便网络管理
      • 协议router id 变更生效,需要重启协议进程,导致邻居关系中断,网络产生震荡 ,一般现网不会频繁更改router id
    发现并建立邻居——hello 报文
    • hello 报文如何发送

      • 凡是加入到OSPF 协议的物理接口/隧道接口,就会主动发送hello 报文

      • hello 报文的源地址为接口的IP 地址,目的地址为224.0.0.5

        @在P2P链路、Broadcast链路中 hello报文每隔10S周期发送

        @在NBMA、P2MP链路每个30S周期发送

        @邻居失效时间默认为hello间隔时间的4倍,时间到没收到邻居的hello报文,则认为邻居失效,断开 邻居关系并重新计算路由

        hello 报文头部携带的主要参数

        version: ospf 协议的版本

        message type: 1. HELLO 2. DD 3. LSR 4. LSU 5. LSACK

        router id: 路由器的OSPF 的router id

        area id: 描述发送hello报文的接口所属的区域

        auth type: 0 代表无认证, 1 代表明文认证 , 2 代表MD5 认证

        auth data: 明文密码/密文MD5 值

        hello 报文数据部分携带的主要参数信息

        network mask:发送hello报文接口的子网掩码

        hello interval: hello报文的发送周期

        option:N bit, E bit

        router priority:默认是1 用于选举 DR/BDR

        dead interval:邻居失效时间

        DR:broadcast/nbma链路上DR路由器接口的IP地址

        BDR:broadcast/nbma链路上BDR路由器接口的IP地址

        ​ 如果链路是P2P,P2MA,则DR/BDR 取值为0.0.0.0 即不进行DR/BDR选举

    • 影响邻居关系建立的因素

      • 在一条链路上router id 不能冲突
      • 在一条链路上所有接口应加入在同一个area id
      • auth type 要一致,auth data 要匹配
      • hello 间隔 和dead 间隔 要一致
      • N bit 和 E bit 取值要一致
    • 建立邻居的过程

      • Down:没有收到hello报文,但可以向外发送hello报文
      • Init:收到hello报文,但没有看到自己的信息
      • 2-Way:收到hello报文,并看到自己是对方的邻居
    • OSPF 邻居建立的可靠性体现

      • hello报文之间的3次握手形成 2-way
      • DD 报文序列号+1 机制,隐式确认
      • LSAck 对LSU 中LSA 信息的确认,显示确认
  2. 进行LSDB的同步,即链路信息同步

    进入2-Way状态后,开始进行lsdb的同步

  • ExStart:预启动状态,发送不携带LS摘要信息的DD报文,进行主从选举,router id 大的成为Master,小的成为Slave,完成主从选举后进入Exchange 状态

    DD 报文中 I M Ms 的含义

    I 0 表示不是第一次发送DD 报文 1 表示第一次发送DD报文

    M 0 发送的最后一个DD 报文 1 还要继续发送DD 报文

    MS 0 我是Slave 从路由器 1 我是Master 主路由器

  • Exchange:将自身LSDB中所有的LSA的摘要信息通过DD报文进行交换,实现LSDB同步

    所谓的LSDB同步,就是邻居之间最终拥有相同的LSA信息,以及这些LSA的新旧程度一致

    LSA 的摘要信息也称为LSA 的头部信息

    摘要信息的用途

    • 唯一的标识一条LSA,由type、ls id 、Adv rtr 3个参数唯一的表示一条LSA
      • type:描述LSA的种类
      • Ls id:LSA的名字,取值由type决定
      • Adv rtr:产生这条LSA的路由器的router id
    • 用于判断LSA的新旧,由seq、chksum、ls age 3个参数判断新旧程度
      • seq越大的越新,起始值0x80000001,最大值 0x7fffffff
      • 如果seq相同,则比较chksum,越大越新
      • 如果chksum相同,则判断Ls age 是否等于3600,等于3600的最新,如果都不等于3600,则判断ls age 的差值,如果大于900,则Ls age 小的为最新,如果小于等于900,这认为这两条LSA 为相同
  1. 运行SPF算法进行路由的计算

SPF算法主要使用到一类LSA和二类LSA
  • Router-LSA 一类LSA 描述路由器自身加入到OSPF进程的直连链路的链路状态。凡是运行OSPF 的路由器都会产生一条一类LSA

一类LSA的链路状态,有4种link type

  • stubnet 描述路由器直连的网络信息

    • link id 直连链路的网络号
    • Data 子网掩码
    • Metric 自身到直连网络的开销
  • P-2-P 描述P2P/P2MP链路上的实节点邻居

    • link id 邻居的router id
    • Data 与邻居相连的接口IP
    • Metric 到邻居的COST
  • TransNet 描述Broadcast/NBMA链路上的伪节点邻居

    • link id 伪结点的router id(由该链路上的DR接口地址充当)

    • Data 和伪结点相连的接口地址

    • Metric 自身到伪结点的开销

      伪节点和DR的关系

      • 伪节点不是DR,伪节点与该链路上所有节点相连,包括DR

      • 伪节点是MA 链路中逻辑上虚拟出来的一台路由器

      • 伪节点的router id 使用的是DR的接口

      • 伪节点到链路上其它节点的开销为 0

  • virtual 描述vlink 上的实节点邻居

    • link id vlink 上的邻居的router id
    • Data 和vlink的邻居相连的接口地址
    • Metric 自身到vlink上邻居的开销
关于DR/BDR/DRother
  • 默认情况下OSPF协议在Broadcast/Nbma类型网络会自动选举DR/BDR
  • DR/BDR 选举规则
    • 比较接口的优先级,默认为1,取值范围 0 -255 优先级越大越优先,0 表示不参与选举
    • 优先级相同则比较 router id ,router id 越大优先成为DR,其次BDR
    • DR/BDR 没有抢占性,根据先到先得的原则
  • 如果DR失效,则判断是否存在BDR,如果存在BDR,则BDR成为DR,然后重新选举BDR
  • 如果BDR失效, 则重新选举BDR
  • 每条Broad/Nbma链路上都会存在一个DR,可以没有BDR,链路上的其它路由器为DRother
  • DRother之间保持2-Way的关系,不进行LSDB同步
  • DR、BDR、DRother 之间需要 保持Full 的关系,需要进行LSDB的同步
  • DRother通过组播地址224.0.0.6将LSA更新发送给DR/BDR,然后DR通过组播地址224.0.0.5将更新发送给DRother,也就是说DR/BDR同时监听224.0.0.5、224.0.0.6 而DRother 仅监听224.0.0.5
  • DR/BDR/DRother 只是路由器在某条链路上充当的角色,也就说一个路由器可以是多个角色
  • Network LSA 二类LSA 由DR产生 描述伪节点连接着哪些节点

    然后在根据这些由二类LSA找出的节点,查找它们的一类LSA即可完整的画出整个拓扑结构

    通过一类二类LSA计算出来的路由信息称为区域内路由,即通过SPF算法计算出来的路由,100%无环路!