OSPF协议之详细图解
http://www.2cto.com/net/201210/159826.html
OSPF是一种基于SPF算法的链路状态路由协议。
www.2cto.com 下面老马就将本协议的详细工作过程做一总结,希望对大家有所帮助……

上图是在一个OSPF区域里面添入一台新的路由器的时候,OSPF协议的工作过程,如果你能非常详细的叙述出这张图的话,基本上OSPF协议的工作过程你就掌握了。下面老马的主要工作就是分析这张图。
首先大家要清楚,一台运行了OSPF协议的路由器,最终都会存储三张表:邻居表、拓扑表、路由表。老马下面以这三张表的产生过程为线索,来分析在这个过程中,路由器发生了那些变化,从而说明OSPF协议的工作过程。
(一)邻居表的建立
一台新加入OSPF区域的路由器首先要跟邻居路由器建立邻接关系,过程如下:
www.2cto.com
一台新加入OSPF区域的路由器首先要跟邻居路由器建立邻接关系,过程如下:
www.2cto.com

图1

图2

图3
通过上面3步,新加入的路由器和其邻居路由器已经建立了邻接关系。
(二)拓扑表的建立
www.2cto.com 在建立拓扑表的时候,新加入的路由器要经历预启动状态、交换状态、加载状态、完全邻接状态。下面老马就将此过程,以图的形式展示给大家:
www.2cto.com 在建立拓扑表的时候,新加入的路由器要经历预启动状态、交换状态、加载状态、完全邻接状态。下面老马就将此过程,以图的形式展示给大家:

图1

图2

图3

经过以上四步,此OSPF区域的所有路由器的数据拓扑图都达到了同步。
(三) 然后每个路由器按照产生的全区域数据拓扑图,在运行SPF算法,产生到达目标网络的路由条目。
经过以上三大步,OSPF协议的运行过程基本结束。
经过以上三大步,OSPF协议的运行过程基本结束。
注意:在上面的过程当中有几个很重要的问题需要注意
1》此协议的管理距离是110、OSPF路由进程ID的范围必须在1-65535之间,而且只具有本地含义,不同路由器的路由进程ID可以不同、区域ID在0-4294967295,当区域值取0时本区域称为主干区域。
www.2cto.com
2》确定router ID遵循如下顺序:
用router ID 命令指定的路由器ID的优先级最高
如果没有指定,那么选IP地址最大的环回接口的IP地址为route ID
如果没有换回接口,就选择UP端口中IP值最大的为router ID
但还是建议使用命令指定,这样可控性比较好。
1》此协议的管理距离是110、OSPF路由进程ID的范围必须在1-65535之间,而且只具有本地含义,不同路由器的路由进程ID可以不同、区域ID在0-4294967295,当区域值取0时本区域称为主干区域。
www.2cto.com
2》确定router ID遵循如下顺序:
用router ID 命令指定的路由器ID的优先级最高
如果没有指定,那么选IP地址最大的环回接口的IP地址为route ID
如果没有换回接口,就选择UP端口中IP值最大的为router ID
但还是建议使用命令指定,这样可控性比较好。
3》DR选举的原则
首要因素是时间,最先启动的路由器被选举成为DR
如果同时启动,或者重新选举,则看接口优先级(0-255),优先级最高的被选举成DR,在默认情况下,多路访问网络的接口优先级为1,点到点网络的接口优先级为0,修改接口优先级的命令是“ip ospf priority”,如果接口的优先级被设置为0,那么该接口不参与DR选举。
如果前两者相同,最后看路由器ID,路由器ID最高的被选举成DR。
DR选举时非抢占的,除非人为地重新选举。重新选举DR的方法有两种,一是路由器重新启动;二是执行“clear ip ospf process"命令
首要因素是时间,最先启动的路由器被选举成为DR
如果同时启动,或者重新选举,则看接口优先级(0-255),优先级最高的被选举成DR,在默认情况下,多路访问网络的接口优先级为1,点到点网络的接口优先级为0,修改接口优先级的命令是“ip ospf priority”,如果接口的优先级被设置为0,那么该接口不参与DR选举。
如果前两者相同,最后看路由器ID,路由器ID最高的被选举成DR。
DR选举时非抢占的,除非人为地重新选举。重新选举DR的方法有两种,一是路由器重新启动;二是执行“clear ip ospf process"命令
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通