OSPF协议报文
OSPF(Open Shortest Path First,开放最短路径优先)是一种内部网关协议(Interior Gateway Protocol,IGP),用于在同一个自治系统(Autonomous System,AS)内的路由器之间交换路由信息。
链路状态路由协议:比如OSPF、IS-IS、
采用链路状态算法,层次式的链路状态,传递LSA
距离矢量路由协议:比如RIP、EIGRP
1、路由器之间周期性的交换路由表
2、交换的是整张路由表的内容
3、水平分割技术
一、RIP和OSPF特性对比:
二、OSPF的主要特点包括:
链路状态协议:OSPF是一种链路状态协议,这意味着它维护一个关于网络拓扑的数据库,包括每个路由器与其邻居之间的连接状态。路由器之间交换链路状态信息,然后每个路由器使用这些信息来构建自己的网络拓扑图,并计算到达每个目的地的最短路径。
无类别域间路由(CIDR)支持:OSPF支持CIDR,这意味着它可以处理不同大小的IP地址块,从而提高了IP地址的利用率。
区域划分:OSPF允许将大型网络划分为多个区域(Area),每个区域运行一个OSPF实例。这有助于减少路由器之间的链路状态信息交换量,降低网络带宽的占用,并提高网络的稳定性。
多种路径计算:OSPF支持多种路径计算方法,包括最短路径优先(SPF)算法,以确保数据包能够沿着最优路径传输。
认证和安全性:OSPF提供了多种认证机制,如明文认证和MD5认证,以确保路由器之间交换的链路状态信息的安全性。
支持VLSM和子网划分:OSPF能够很好地支持可变长子网划分(VLSM)和子网划分,使得网络设计更加灵活。
三、Router-id:格式为点分十进制
官方文档:
1、手动配置OSPF的Router-id
2、环回接口IP地址最大的作为Router-id
3、物理接口IP地址最大的作为Router-id
实际情况:
1、手动配置OSPF的Router-id
2、使用路由器全局router-id作为OSPF的Router-id
3、全局router-id为设备第一个配置了IP并且UP的接口IP地址
dis router id 查看路由器全局router-id
DR与BDR的选举:
先选BDR,再选DR
四、OSPF报文详解
1.HELLO报文
Hello报文
用于发现、建立和维持邻居关系的
2.DD报文
DD报文
链路状态信息摘要报文
DD报文中的MTU
DD报文中的第一个字段就是发出该报文接口的MTU值,正常来说,OSPF邻居建立是需要要求两端接口的MTU值保持一致,否则无法建立,但是华为默认不检查MTU值,因此一般会显示为0(默认MTU为1500)(思科默认检查MTU)
可以手动开启MTU检测 接口下:ospf mtu-enable
当接口开启MTU检测后,DD报文中MTU的值将正常显示,如果两端接口只有一端开启MTU检测,不影响邻居建立,必须两端同时开启MTU检测后才会生效
如果slave路由器接口的MTU>master路由器的MTU,那么从路由器卡在exchange,主路由器卡在exstart状态
如果master路由器接口的MTU>slave路由器的MTU,双方都卡在exstart状态(从发送较小MTU的DD报文,主可以收到,但是主MTU较大,发送给从无法收到)
3.LSR报文
LSR报文
用于向邻居请求自身缺少的LSA
当路由器收到LSR报文时,会根据报文中的LSA三要素在自身LSDB中查找相关LSA,并将其封装到LSU中回复。
4.LSU报文
LSU报文
用于发送完整的LSA信息
5.LSAck报文
LSAck报文
用于确认收到的LSA,使用LSA头部信息做确认回复。
五、OSPF邻居状态机流程
1、两台路由器没有宣告OSPF之前,属于**DOWN**状态
2、宣告OSPF后,在收到第一个HELLO包后,将邻居的router-id放到自己的HELLO包内active neighbor字段发出,此时状态为**INIT**。
3、再次收到对方发来的hello包内active neighbor字段为自己的router-id,状态进入**2-way**。在init到**2-way**这个阶段,OSPF判断网络类型是否需要和邻居建立邻接关系,是否要发送DD报文。
4、双方分别发送DD报文,i=1,m=1,ms=1开始选举主从,两台路由器都认为自己是主,此时为**exstart**状态。
5、确定主从关系之后(router-id大的为主),从路由器发送DD摘要,i=0,m=0,ms=0其中m取决于后续是否还有摘要报文,此时从路由器是**exchange**状态,主路由器是**exstart**状态
6、主路由器收到DD摘要后,发送LSR。之后发送DD摘要给从路由器,i=0,m=0,ms=1。m取决于后续是否还有摘要报文,此时从路由器是**loading**状态,主路由器是**exchange**状态。
7、从路由器收到DD报文后,发送LSR。然后发送DD报文,i=0,m=0,ms=0。这个DD报文没有摘要信息,只为了告诉主路由器摘要交换完毕,且让主路由器从**exchange**进入**loading**状态。
8、双方路由器之间更新LSU之后,回复LSACK,进入**FULL**状态
扩展:两台设备无法建立邻居关系的原因
1、两台设备的区域类型不一致
2、两台设备发送HELLO包时间不一致
3、两台设备的认证类型不一致
4、两台设备的router-id冲突
5、两台设备是否能ping通
六、OSPF报文的确认机制
1、hello报文,10s一个,40s老化
2、DD报文,用seq做隐式确认主从(DD sequence:数值,双方设备随机发送seq数值,如果从设备认为自己比不过主设备,则会发送和主设备同样的DD seq数值)
例如:R1->R2 seq:244
R2->R1 seq:243
R1->R2 seq:243 R2为主,R1为从
3、LSR报文,使用LSU报文作为确认回复
4、LSU报文,使用LSAck报文作为确认回复
七、网络类型对OSPF建立邻居的影响
Broadcast:当链路层协议为以太网时,OSPF网络类型默认为广播型。Hello时间10s,dead时间40s。DR和BDR和DRother建立邻接,DRother之间建立邻居。组播地址:224.0.0.5 224.0.0.6。所有设备使用单播交互DD、LSR,所有设备固定使用224.0.0.5交换hello报文
P2P:建立邻接关系,当链路层协议为PPP/HDLC时,OSPF网络类型默认为点到点。Hello时间10s,dead时间40s。不选举DR和BDR,所有报文通过224.0.0.5更新
NBMA:当链路层协议为帧中继DR/ATM时,OSPF网络类型默认为NBMA。在OSPF进程中,还需要使用peer x.x.x.x指定对端邻居IP,NBMA有一个attempt状态。Hello时间30s,dead时间120s。需要选举DR和BDR。所有报文单播发送
P2MP:一般手动配置,多用于DSVPN技术,hellos时间30s,dead时间120s,不选举DR和BDR,直接建立邻接关系
广播和p2p可以建立邻接关系,但是无法传递路由信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)