OSPF 动态路由协议(状态机及报文)

本文详细介绍了OSPF协议的状态机流程,包括DR和BDR的选举规则,以及影响OSPF邻接关系建立的各种因素,如routerid冲突、认证设置等。此外,还涵盖了Hello报文、确认机制、网络类型和OSPF减少LSDB规模的机制。
摘要由CSDN通过智能技术生成

目录

OSPF 概述

OSPF 状态机

DR和BDR的选举

DR和BDR 抢占问题

Exstar状态选举主从

OSPF 确认机制

OSPF 报文

Hello 报文字段

影响OSPF邻接关系建立的因素

router id 冲突

接口区域 ID冲突

认证

进程

静默接口

Hello Time 和 Dead Time

掩码

接口优先级

区域类型不一致

网络类型不一致

MTU协商

OSPF 网络类型

路由器角色

OSPF减少LSDB规模机制

OSPF 概述

定义:OSPF(open shortest path first)  开放最短路径优先协议,基于SPF算法的动态路由协议。

基于IP 层,协议号 89,是一种链路状态协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。

OSPF 状态机

46cdecf7632841f9b61594655f702991.png

Down:初始状态,开始交互Hello报文,以组播的形式发送,向组播地址224.0.0.5发送Hello报文,让别人发现我,其中Hello报文中带有我的router id,邻居列表为空。

Init:当R2收到了R1发来的Hello报文后,表示我发现了别人,但别人并没有发现我,单方面知道对方的存在。

2-way:此时R2会发送Hello报文,里面携带R2本身的router id 和邻居R1的router id。当R1收到这个hello报文后,发现neighbor 和自己的router id相同,就会认为,我知道了对方知道我的存在,进入2-way状态。这时,R1也会发送一个Hello报文,把邻居列表改为对面的router id发送给对面,当R2收到了这个hello报文后,对比邻居列表和自己的router id,发现相同,也进入2-way。

双方都到达2-way状态,表示双方已经建立了邻居关系。

Exstar:在双方建立了邻居关系并且已经选举DR,BDR(在一些网络中不需要选举,则直接跳过;DR,BDR后面会说)后,通过发送第一个DD报文(空的),选举主从。

Exchange:在双方选举主从后,进入Exchange状态,互相发送携带LSA头部的DD报文,简单的理解就是LSA信息的摘要部分,为下一步同步链路状态数据库做准备。

Loading:此时双方会和本地lsdb(链路状态数据库:Link state database)对比上一个状态的LSA信息,通过发送LSR,LSU报文进行lsdb的同步。

Full:在同步完成数据库后,发送LSAck报文,进入Full状态。(发送LSAck不算Full,只有当LSR的重传列表为空时,才到Full状态)

DR和BDR的选举

1.选举阶段:在2-way状态下选举。

2.选举规则:先比优先级(在Hello报文中有个字段是描述DR的优先级的),范围为0-255,0不参与选举,以大为优;如果优先级相同,就比router id ,也是以大为优。

3.选举作用:用于数据库的同步,减少邻接关系,节省网络资源。

4.邻居和邻接:

        邻居关系是在2-way状态下建立的,而邻接关系是要用于同步数据库,在Full状态下建立成功。在一个已经到达Full状态的ospf网络中,DR和BDR是邻接关系,DRother(非DR,BDR路由器)和BDR,DR之间也是形成邻接关系(因为要向DR,BDR同步数据库),但是DRother之间是邻居关系,他们之间不需要同步数据库。

        通俗的理解,DR和BDR相当于班长和副班长,班里的其他人(DRother)都向DR,BDR同步数据库,减少了邻接关系,大大地节省了网络资源。

        在DRother向DR,BDR同步数据库时,组播地址为224.0.0.6,只有DR,BDR监听这个组播地址,但是224.0.0.5是ospf内的所有人都监听。

5.选举过程:先选BDR,再将BDR升级成为DR,所有的DR先当BDR。

DR和BDR 抢占问题

1.如果出现了优先级更高的设备角色,不会变成DR,不支持抢占;

2.原因:因为OSPF 中所有人都会向DR,BDR建立邻接关系,同步数据库,如果支持抢占,则会要向新的DR进行重新同步,网络要重新收敛,造成网络震荡。

Exstar状态选举主从

e4243bc18a2944fdb103d74f66c7b0ee.png

1.在Exstar状态下,通过发送第一个DD报文(空的)来选举主从,第一个DD报文没有LSA信息。

2.DD报文中的三个字段:

        I 位置为1表示第一个DD报文,置为0表示不是第一个DD报文;

        M 位置为1表示后面还有DD报文,置为0表示没有DD报文了;

        M/S 位 表示是为Mster(主)设备,还是为Slave(从)设备。

3.选举依据:RID大的为主,小的为从

4.选举过程:

        开始双方都会认为自己是Master设备,互相发送空的DD报文,当R1收到R2的空的DD报文,发现R2的router id比自己的大,意识到自己是从设备,转变为Exchange状态,使用R2(主设备)的序列号Y,发送空的DD报文(但是不是第一个了),当R2收到这个报文后,意识到自己是主设备,进入Exchange状态,而后R2发送带LSA头部的DD报文进行交互。

        这时可以发现,从设备用的是主设备的序列号,每一次由主设备进行序列号的增加。

5.选举主从的作用:由于OPSF 是基于IP的,IP网络没有确认机制,所以选举主从是为了用主的序列号做隐式确认,保证数据库同步的有序可靠。

OSPF 确认机制

1.显式确认:在Loading状态下,通过LSR,LSU,LSAck报文机制进行显式确认。

2.隐式确认:

        1)在双方建立邻居的过程中,通过交互hello报文,解析报文中的邻居列表进行隐式确认;

        2)在Exstar状态下选举主从时,选举主从后,主从设备都用主的序列号做隐式确认,确保数据库同步的有序可靠。

        3)在针对发送的LSU还有一种隐式确认机制。DR可以进行隐式确认,当DR收到 DRothers的LSU时,不需要回复LSACK。因为DR会向其他的DRother发送LSU的更新,这样就进行了隐式确认。DR监听的是224.0.0.6,而其他人监听的则是224.0.0.5。

OSPF 报文

Hello :用来发现,建立和维护邻居,用邻居列表做隐式确认,

            MA,P2P 网络10s一次,NBMA,P2MP 网络 30s一次。

DD: 空的DD报文用来选举主从,用序列号做隐式确认;后续的DD报文携带LSA头部。

LSR :链路状态请求信息,请求自己没有的LSA信息,包含了LSA的三部分信息:LS Type ,LS ID,Adv Rtr。

LSU:链路状态更新信息,包含了LSA的完整信息。

LSAck: 链路状态确认信息,收到LSU后进行确认,可以一次进行多次确认,包含了LSA的头部信息。

Hello 报文字段

1.阴影部分是OSPF头部信息,白色部分是Hello报文字段

13b78b97c7ed42c5a4a5fe125f4e7abf.png

2.各个字段的含义

d4c7be91219841b2968c64a67821f863.png

3.Broadcast,P2P,NBMA,P2MP 四种网络的Hello Time 和 Dead Time

c119afdec1fa4bb392ce782bd0b3f342.png

影响OSPF邻接关系建立的因素

router id 冲突

1)同区域直连:邻居无法正常建立。

2)同区域非直连:R1和R3的router id 冲突,双方各自和R2的邻居都能建立,但是在同步数据库时会出现问题,路由计算会有问题。

3)不同区域非直连:

        如果在不引入外部路由的情况下,是没有问题的,因为在区域内部传递的是1类,2类LSA,在区域间传递的是三类LSA,三类LSA的adv是ABR的router id。双方在区域间传递路由的时候,区域间路由只是被当作叶子挂在ABR上,本区域内计算的树不会出现相同的router id节点。

        如果引入的外部路由,就会出现问题,因为ASBR的router id是需要被OSPF 域内的所有路由器知道的,这样asbr 的router id与本设备本身的router id一样时,就会出现问题。

接口区域 ID冲突

area id 封装在OSPF头部报文中,area id 相同则会影响邻居建立。

认证

OSPF 的认证类型和认证信息在OSPF 头部信息中;

OSPF可以在接口视图下配置认证,也可以在区域下配置认证,接口认证优先于区域认证;

OSPF要求认证类型和认证信息完全一致才可以建立邻居关系,如果一端认证配置在接口视图下,一端配置在区域视图下,只要认证信息完全一致也是可以建立邻居关系的。

进程

OSPF 进程号不影响邻居的建立,因为OSPF 的进程编号仅仅在本地有效,所有的报文中都没有包含进程号的字段,没有通过报文携带进行交互。

静默接口

在接口配置静默(Slience)之后,不发送也不接收OSPF报文,邻居无法建立。

Hello Time 和 Dead Time

Hello Time 和 Dead Time 要一致才能建立起邻居关系。

掩码

如果是广播网络链路,掩码不一致会导致邻居无法建立,不过可以通信。但是如果是P2P网路类型,掩码不一致不会影响邻居的建立。

原因是在广播网络中需要1类和2类LSA描述拓扑信息,其中2类LSA描述的是MA网络中的网段信息,如果掩码不一致,一个2类LSA无法描述多个网段,所以会导致邻居起不来。但是在P2P网络类型中,一个1类LSA就可以独立表达接口网络信息。

接口优先级

MA网络接口优先级不能为0,如果为0,会导致DR选举不成功,邻居就无法建立。

区域类型不一致

区域类型不一致也有可能导致邻居无法建立。区域类型的标识在Hello报文中的option 字段。

total stub 与 stub可以建立邻居关系,total nssa 与nssa可以建立邻居关系。

网络类型不一致

除了NBMA不能与其他任何网络类型建立邻居外(NBMA是单播),其他网络类型通过修改 Hello Time 和Dead Time可以建立邻居,不过路由计算会有问题。

MTU协商

只影响邻接关系,不影响邻居关系。(因为OSPF状态机到达2-way时,没有MTU协商)

默认不检查,如果开启了MTU检查,如果双方MTU不一致,则小的一方会停留在Exstar状态,另一方停在Exchange状态,此时邻居无法建立。

OSPF 网络类型

Broadcast:广播网络类型,由于Hello Time 和Dead Time 和 P2P网络相同,所以两者可以建立邻居,但是路由计算会出现问题。

P2P:不选举DR BDR,收敛速度快,一般会把广播网络类型改为 P2P加快网络收敛的速度。

NBMA:单播发送协议报文,需要手动建立邻居,帧中继线缆默认的网络类型,和其他任何网络类型都无法建立邻居。

P2MP:可以模拟组播效果,把NBMA 网络类型修改为 P2MP 就可以不用手动指定邻居。

路由器角色

骨干路由器:该类路由器至少有一个接口属于骨干区域。因此,所有的ABR和位于Area0的内部路由器都是骨干路由器。

ABR:区域边界路由器,该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。

ASBR:自治系统边界路由器,与其它AS交换路由信息的路由器称为ASBR。ASBR并不一定位于AS的边界,它有可能是区域内路由器,也有可能是ABR。只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR。

OSPF减少LSDB规模机制

划分区域;特殊区域;过滤;聚合

注:本文有些地方是借鉴官方文档和其他优秀博主的文章,仅供个人学习使用,如有问题,欢迎一起交流讨论学习,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值