OSPF协议原理详解
一.链路状态路由协议 (Link Status Protocol)基本概念
OSPF的概念
链路状态路由选择协议又被称为最短路径优先协议,它基SPF(shortest path first )算法。他比距离矢量协议复杂的多。路由器的链路状态的信息称为链路状态,包括:接口的IP地址和子网掩码,网络类型,(如以太网链路或串行点对点链路),该链路的开销,该链路上的所有的相邻路由器。
OSPF特点
链路状态路由协议是层次式的,网络中的路由器并不向邻居传递“路由项”,而是通告给邻居一些链路状态。链路状态协议只是通告给邻居的一些链路状态。运行该路由协议的路由器不是简单地从相邻的路由器学习路由,而是把路由器分成区域,收集区域的所有的路由器的链路状态信息,根据状态信息生产网络拓扑结构,每一个路由器再根据拓扑结构计算出路由。
OSPF工作过程
(1)了解直连网络
(2)向邻居发送hello包(邻居指启用了相同链路状态路由协议的其他任何路由器)
(3)建立链路状态数据包,
(4)将链路状态数据包泛洪给邻居 路由器将其链路状态信息泛洪到路由区域内的其他所有链路状态路由器,他一旦收到来自邻居的LSP,不经过中间计算,立即将这个LSP从除接收该LSP口以外的所有接口发出,此过程在整个路由区域内的所有路由器上形成LSP的泛洪效应。LSP在路由器初始启动期间,或路由协议启动过程期间,或在每次拓扑发生更改(包括链路接通和断开)时,或是邻接关系建立,破裂时发送,并不需要定期发送。
PS:距离矢量路由协议则不同,她必须首先运行贝尔曼-福特算法来处理路由更新,然后才将他们发送至其他路由器,而链路状态协议则是再泛洪完成后在计算SPF算法,因此到达收敛的速度比距离矢量路由协议速度要快。
(5)每台路由器使用数据库建立一个完整的拓扑图并计算通向每个目的网络的最佳路径。
OSPF的网络类型
点到点连接
将一对路由器连接起来的网络,使用的是PPP HDLC协议
使用组播224.0.0.5来发送各种数据包
没有DR/BDR的选举,直接形成full邻接关系,不用手动指邻居

广播
多路访问网络,如以太网,需要DR和BDR的选举,不用手动指邻居
通常以组播发送HELLO报文,LSU报文,和LSACK报文,以单播形式发送DD和LSR报文
DR和BDR给非指定路由器发送消息使用的是组播224.0.0.5
非指定路由器给DR和BDR发送消息使用的是组播224.0.0.6

非广播多路访问(NBMA, Non-Broadcast Multiple Access)
点到多点
OSPF报文
OSPF报头格式
OSPF直接封装在IP数据包中
OSPF数据包
Hello包
DBD包(Datebase Description)
LSR包(Link-State Request)
LSU(Link-State Update)
LSAck
OSPF邻居建立过程(重!)
首先对邻居关系,和邻接关系要区分开,两台路由器互相之间的状态是2-way则表明邻居关系建立,当邻居关系为FULL是表明邻接关系建立
关系变化过程
down->init->2-way->exstart->exchange->loading->full
down:表示还没有建立起邻接关系,没有检测到活动邻居
init:表示从对端收到的HELLO包中,没有自己的路由器ID信息
2-way:表示从对端收到的HELLO包中,已经有自己的路由器ID信息了,已建立邻居关系可以共享链路状态数据
exstart:表示正在确定主从关系,即谁先发送DBD
exchange:在主的带领下开始交换DBD
loading:请求更详细的信息
full:已建立完全邻接关系 完成更新过程 其数据库与邻居完全相同
过程详解
邻居建立过程(down->init->2-way)
希望建立完全OSPF邻居邻接关系的路由器之间交换OSPF HELLO包(组播224.0.0.5),双方的邻居此时都处于down状态,这是邻居会话的初始状态,当路由器从邻居收到了一个Hello包,但是没有在邻居Hello包中看到自己的路由器ID时,他将转化为INIT状态,当路由器从邻居收到Hello包中看到自己的路由器ID时,他将转为2-Way状态。表示邻居之间已经建立了双向通信
交换LSDB过程(exstart->exchange)
同步链路状态数据库过程(Loading->Full)
OSPF 邻居关系不能正常建立的原因和解决方法
- 接口上没有激活 ospf
- 物理层或者是数据链路层协议 down.
- 建立邻居的接口被 passive掉
- OSPF的 hello 组播地址被 ACL Block
- 在 broadcast链路上的子网掩码不匹配
- Hello/dead 间隔不匹配
- 认证方式或者是认证密码不匹配
使用 debug ip ospf adj 来查看,可以自己使用不同的情况来验证 - 两台路由器处于不同的 AREA
- Stub/transit/NSSA 区域类型不匹配
DR和BDR的选举
DR,BDR存在意义
DR BDR存在于多路访问网络中,作用是减少区域内的同步次数,降低路由器的内存消耗,减少了路由流量更新,确保同一区域内的路由器拥有相同的LSDB
选举过程
LSA(重!!)
LSA基本概念
最新LSA的判定
·更高的序列号:每30(1800S)分钟扩散一次
·校验和:每隔五分钟重新校验 除Age字段之外 进行校验, 越大越新
·老化时间:默认60分钟 时间计数,每经过一台路由器时间+1
LSA类型
类型1:路由器LSA Router Link States
链路状态ID(LSID):源路由器ID
通告范围:只在特定区域内泛洪
通告内容:
1.路由器在区域内的接口和接口所连接的邻居(包含链路的开销)路由器链路状态。直连链路信息
2.网络连接类型
点到点的连接,描述的是邻居路由器ID
中转网络的连接,描述的是DR接口的地址
末节网络的连接,描述的是IP网络的子网
虚链路,描述的是邻居路由器ID
3.链路开销
4.是否为ABR
类型2LSA:网络LSA Net Link States
类型3LSA:汇总LSA Summary Net Link States(O IA)
与3类LSA有关的计算
类型4LSA:ASBR汇总LSA
与4类LSA有关的计算
类型5LSA:自治系统LSA
类型7LSA:NSSA外部LSA
其他有关LSA的特性及操作
OSPF区域类型和结构(重!)
区域类型
(1)骨干区域:所有区域必须连接骨干区域
(2)标准区域:接收所有内部和外部的路由信息
(3)末节区域:不接受自治系统外部的路由信息(不接受4类和5类LSA),通过一条默认的全0三类LSA前往自治系统外部
(4)完全末节区域:只接收区域内部路由信息 ,通过默认路由和别的区域相连(不接受3,4,5类LSA,通过默认路由与外部网络通信)
(5)NSSA:接收区域路由和有限的外部路由信息 限制自治系统外信息,NSSA区域中可以有ASBR,存在1/2/3/7类LSA(3类还有一条全0的特殊3类)
(6)完全NSSA:只接收区域内的路由信息和有限的外部路由信息,存在1/2/7类LSA,一条全0的特殊3类。
配置 NSSA Area后要在区域内手工配置一条默认路由(以便访问OSPF中其他区域的网络)
OSPF末节区域的默认路由
OSPF路径选择
OSPF路由类型
选路规则
区域内和区域间路由的选取(同一区域内多台ABR时)
为了避免区域边界单点故障的情况,多数网络中会至少会使用两台ABR,以防止ABR出现故障而造成的网络瘫痪。ABR可以同时从区域内路由器和另一台ABR学到某个特定子网的信息。ABR可以学到一条区域内的路由(来自所连接区域),和一条区域间路由(来自另一台ABR,不是直接到达网络所在区域而是先到ABR1再通过ABR1到另一个区域,通过了两个区域所以算作区域间路由)。即使区域间路由的开销值要比区域内路由的开销值小,也会优选选取区域内的路由
OSPF虚链路
定义
指一条通过一个非骨干区域连接到骨干区域的链路
目的
特点及规则
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224816.html原文链接:https://javaforall.net
