OSPF - 邻居的建立过程

OSPF交互过程主要使用这下报文

Type 报文名称 报文功能
1 Hello 发现和维护邻居关系
2 Database Description(DD) 交互数据链路状态数据库摘要,相当于一个目录
3 Link State Request(LSR) 请求特定的链路状态信息
4 Link State Update(LSU) 发送详细的链路状态信息,LSA就包含其中
5 Link State Ack(LSAck) 发送确认报文
我把他分为两个部分,第一部分利用hello报文进入ExStart状态,第二不分利用DD报文进入Loding状态

第一阶段:选举DR、BDR进入ExStart状态

 建立邻居则用到其中的hello报文

 当R1宣告网段后则会发出hello报文,R2宣告后也会发出hello报文,当路由器收到其他路由器发出的hello报文则会从down状态转变为init状态,如果在init状态下再收到neighbor字段是自己RouterID的hello报文则会转变为2-way状态,2-way也就是所谓的邻居关系

总结:

 Init:收到第一份hello报文立即进入Init状态

 2-way:收到neighbor字段是自己RouterID的hello,建立邻居关系

真实报文如下

下面距离情况均为MA网络(多路访问型网络)

前两个是互发neighbor为空的hello报文

(忘了配routerID了,自己选择接口地址当routerID了,10.1.1.1相当于上图的1.1.1.1,10.1.1.2相当于2.2.2.2,先凑合看下一吧,应该不影响理解)

后两个是收到对方hello报文后回复的hello报文

 hello报文仅仅相当于自我介绍仅传播routerID和参数,并不会传播路由信息和拓扑信息,也就是邻居关系不传播路由信息和拓扑信息

 建立连接关系后,就该选举DR和BDR了,但不会立即选举的是等待一个dead时间(40s),主要为了等待广播域内其他设备全收到hello报文或者是不是已经有了DR或BDR,DR选举遵循不抢占原则即当广播域内已经存在DR,即使自己更优也不会抢占DR的位置。

DR与BDR选举时首先比较优先级(默认1)、其次比较routerID

 路由器首先会默认自己是DROther,如果没有BDR会先选举BDR再从BDR中选举一个DR,选举完成进入Exstart

 本篇主要就是介绍hello报文的,下面几个字段是比较重要的

建立邻居会校验这些字段,routerID是否相同、在不在一个区域、验证能否通过

hello报文中的重要字段↓

N位在第7类LSA中是P位

Option字段在hello,DD,LSA中都会出现,所以比较重要

在建立邻居是也要判断是否是一个类型的区域

N位代表是不是NSSA区域

E位代表有没有引入外部路由的能力

通过这个两位就能判断属于什么类型的区域

 E=0 N=0既引如外部路由,也不是NSSA区域 = Stub区域

 E=1 N=0能引入外部路由,不是NSSA区域 = 普通区域(骨干或非骨干都可以)

 E=0 N=1不能引入外部路由,是NSSA区域 = NSSA区域

第二阶段:交互DD、同步LSDB进入FULL状态

选举完成DR、BDR后,接下来就要进行数据库摘要的交互

相当于互换一下各自的目录,看看自己缺啥就向对方请求

这个过程我们就要用到Database Description(DD)报文

DD报文能够携带LSA的摘要发给对方,并且DD报文还存在隐式的确认机制

这部分先展示一下具体报文吧,因为参数较多,方便后续过程的理解↓

!!!!!DD Sequence就是序列号忘记标了!!!!!

下面是数据库摘要交换的过程

①②首先会交互两个空的DD报文,刚开始他们都认为自己是主设备,向对方发送空的DD报文包含自己的序列号进行确认,主设备也是根据routerID选的,所以DD报文I,M,MS都置1

当选取出Master后进入Exchange状态

③R1发现自己没R2优,使用R2的序列号主动回复自己的数据库摘要,此时R1已经认识到自己不只是主设备所以报文 I=0,M=0,MS=0

④R2收到R1的摘要,用序列号+1,把自己的摘要也发过去,因为R2是主设备,后续不再有DD报文所以报文 I=0,M=0,MS=1

⑤R1向R2发送一个空的DD,因为R1的摘要已经发完了,但是R2给我发了一个序列号+1的DD即使我没有摘要给你了,也要发一个序列号+1的空的DD告诉R2我收到了你的摘要(也就是所谓的隐式确认机制)

等到双方M位都置0,表示都交互完了,则进入Loading状态

接下来就是通过LSR请求自己缺失的路由信息,对方用LSU回复具体LSA信息,收到后使用LSAck回复确认(交互过程后续再详细讲)

全都交互完后LSDB同步完成,进入Full状态(邻接关系)

相关推荐
折哥的程序人生 · 物流技术专研32 分钟前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
AOwhisky34 分钟前
Redis 学习笔记(第三期):持久化与主从复制
运维·数据库·redis·笔记·学习·云计算
专注VB编程开发20年1 小时前
c#Modbus上位机开发-一次读10个地址和100个地址速度一样
网络·网络协议·tcp/ip
Tbisnic2 小时前
AI大模型学习第十一天:技术选型、安全防护与金融实战
python·学习·ai·大模型·提示词工程
xmtxz3 小时前
计算机网络基础课程学习心得:从理论抽象到硬核实战的进阶之路
运维·学习
hz567893 小时前
国产化视频会议系统怎么做?鲲鹏+麒麟+国密的完整国产化路径
音视频·实时音视频·信息与通信
2601_961963384 小时前
技术解剖:哈希值、区块链与CA认证如何守护电子合同安全?
网络·人工智能·安全·区块链·智能合约·政务
2601_961963384 小时前
从“电子化”到“自动化”:2026年智能合约与电子合同融合的技术逻辑与法律适配
网络·人工智能·区块链·智能合约·政务
YM52e4 小时前
男孩子在外自我保护指南——用鸿蒙 ArkTS 构建交互式安全教育应用
学习·安全·华为·harmonyos·鸿蒙·鸿蒙系统
不吃土豆的马铃薯5 小时前
C++ 高性能网络缓冲区 Buffer 源码解析
linux·服务器·开发语言·网络·c++