谈谈OSPF

OSPF的几个简要要点

  1. OSPF是一个自治系统AS内的内部网关协议(IGP)
  2. OSPF基于链路状态。
  3. OSPF通过LSDB数据库计算得到OSPF路由表

OSPF如何建立邻居关系

使用Hello报文建立邻居关系

  • OSPF协议直接封装在IP 报文中,协议号89,说明IPV4和OSPF相辅相成。OSPF是一种运行在IPv4上的路由协议(OSPFv2 依赖于IPv4的网络环境)

  • IP 头 OSPF头 OSPF报文

  • OSPF 头部字段包含的8 个字段

    • 在这里插入图片描述

    • version:2

    • message type

      • 1 代表 hello
      • 2 代表 DBD
      • 3 代表LSR
      • 4 代表LSU
      • 5 代表LSACK
    • packet leg:描述OSPF包长度

    • router id:描述router id

    • area id:接口所属的区域

    • checksum:校验和

    • auth type:0 代表null;1代表明文;2代表md5

    • auth data:认证信息

  • hello packet:

    • 在这里插入图片描述

    • network mask:接口掩码

    • hello interval :P2P broadcast 默认10s;P2MP,NBM默认30s

    • router priority:优先级,用于broadcast,NBMA型链路选举DR,BDR,默认为1,取值范围0-255

    • dead interval:默认为hello间隔的4倍

    • DR:该链路DR接口的IP 地址

    • BDR:该链路上BDR接口的IP地址

    • option:E bit位:=1代表能交换5类LSA; N bit 位:=0代表不能交换7类LSA

任何情况下要满足的建立邻居关系的条件:

  1. router id 不能冲突:主从选举;
  2. area id 必须相同
  3. auth type 要一致
  4. auth data 要匹配
  5. hello interv 要一致
  6. dead interval 要一致
  7. E bit N bit 要一致

特定场景下,对其他参数的要求:

  1. P2P 链路不要求地址在同一网段,不要求掩码一样(站在ospf协议的角度)
  2. broadcast NBMA 要求地址必须在同一个网段,掩码必须相同
  3. P2MP 默认要求地址在同一个网段,默认要求掩码一致(可以通过命令忽略)

其他报文对邻居关系的影响:DBD报文中的IP MTU值要一致,默认情况下,华为设备不对DBD IP MTU 值检测;华为设备DBD MTU 默认为0

OSPF 建立邻居状态机:
在这里插入图片描述

down:代表还没发现任何存在的邻居
init:收到邻居的hello包,但hello包中没有发现自己的router id 你发现了邻居,但不代表邻居已经发现你
two-way:收到邻居hello报文,并且从hello中发现自己的router id
two-way之后,drother之间就只到two-way状态,不会进行LSDB同步。其他情况会继续进行LSDB的同步,进入exstart状态,开始发送DBD报文。
exstart:主从选举,实现可靠的DBD同步。

exstart发送的DBD报文只做主从选举,而不会携带任何LSDB中LSA的头部信息。并各自表达自身是初次发送DBD,后续还希望继续发送DBD,并自身是MASTER,随机生成DBD序列号,进行主从选举。彼此交换DBD报文后,根据router id的大小完成主从选举。

在这里插入图片描述
在这里插入图片描述

exchange:slave路由器开始发送携带自身LSDB中LSA的头部信息的DBD
在这里插入图片描述

1.1.1.1 I = 1 M= 1 MS = 1 SEQ = X

2.2.2.2 I = 1 M = 1 MS = 1 SEQ = Y

slave 1.1.1.1 I = 0 M =1 MS =0 SEQ= Y

master 2.2.2.2 I = 0 M =1 MS = 1 SEQ = Y+1(确认)

slave 1.1.1.1 I = 0 M =1 MS = 0 SEQ = Y+1

master 2.2.2.2 I = 0 M =1 MS = 1 SEQ = Y+1+1(确认)

slave 1.1.1.1 I = 0 M = 0 MS =0 SEQ = Y+2

master 2.2.2.2 I = 0 M =0 MS =1 SEQ=Y+3

slave 1.1.1.1 I = 0 M = 0 MS =0 SEQ = Y+3

slave总是用master的序列号向master发送DD报文,master将slave的序列号加1 向slave发送DD报文,实现DD报文的隐式确认。why?
因为DD报文携带自身LSDB中所有LSA的头部信息,信息较多,一一确认比较麻烦,消耗设备资源,影响邻居收敛的时间,所以采用相对简单的隐式确认

exchange完成后,邻居根据LSA头部信息和自身LSDB的头部信息作比较。进行LSDB的同步。
同步的规则:交换彼此没有的LSA以及新的LSA,替换老旧的LSA,实现邻居LSDB的一致性

为了实现同步,对LSA 的数据结构做出定义要能实现如下两个功能

  1. 如何实现唯一的区分一条LSA
  2. 如何实现LSA的新旧判断
    而这些功能就是LSA的头部信息(摘要信息),DBD报文携带的就是LSA的头部信息,exstart状态下不携带LSA头部信息

LSA通过6个参数标识自身和新旧程度:

  1. LSA 类型
  2. Link state ID
  3. adv router 谁产生这条LSA

三个参数相同则认为是同一条LSA,如果都有这条LSA,则需要进一步进行新旧判断,用新的同步旧的

那么怎么判断呢?需要三个参数:

  1. LSA seq 越大越新
  2. LSA checksum seq相同,校验和越大越新
  3. LSA age 校验和相同,则判断lsa age是否等于3600s,如果等于,则认为最新。用于删除一条lsa。如果不等于,则判断差值,大于900s则lsa age小的最新,小于900s则认为相同的LSA

通过DBD中携带的LSA头部信息,完成LSDB的差异比较,向邻居发送LSR,请求自身需要的LSA

为什么要设计DD报文呢?
实现按需同步,提高收敛速度。

OSPF 采用三次握手建立邻居,可靠性的体现。

至此,我们已经讨论了OSPF 邻居关系的建立,LSDB的同步。
那么OSPF还要讨论哪些内容呢?

  1. 邻居关系的建立
  2. LSDB同步
  3. LSA泛洪更新机制
  4. 链路类型
  5. LSA类型
  6. 区域类型
  7. 认证机制
  8. 选路机制
  9. 放环机制

链路就是路由器之间的连接(物理链路,逻辑链路)
状态就是链路属性的变化
链路属性:链路上的邻居,链路上的接口地址,链路上的开销,链路的网络类型

把描述链路状态的信息称为LSA
LSA头部的作用

  1. 标识不同的LSA
  2. 判断LSA的新旧,新的要替换旧的

LSA类型

  1. LSA-1 Router LSA 区域直连拓扑
  2. LSA-2 Network LSA
  3. LSA-3 Network Summary LSA
  4. LSA-4 ASBR Summary LSA
  5. LSA-5 AS External LSA
  6. LSA-7 NSSA LSA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值