ospf协议总结
OSPF的三张表
邻居表 :记录ospf路由器之间的邻居状态。
思科:show ip ospf neighbor
1 |
|
LSDB表: 链路状态数据库表
存在着OSPF的LSA详细信息,通过命令display ospf lsdb查看时为首要信息,需要查看详细的LSA信息需要通过display ospf lsdb router或network…等进行查看。同一个OSPF网络维护着一张LSDB表,所有同一网络的OSPF路由器,其LSDB表都是相同的。
思科:show ip ospf database
1 |
|
路由表
对于OSPF来说,存在于路由表中的OSPF路由,都是通过SPF算法计算出来的最优路由。
思科:show ip route ospf
1 |
|
LSA、LSDB、SPF与路由表的关联
相互交换自己的LSA从而组成LSDB。【LSDB的形成】
通过SPF算法对LSDB中的路径信息进行一个计算,得出最优的OSPF路由。【路由的产生】
最优的OSPF路由放置在路由表中。如果存在其它路由协议的最优路由与OSPF的最优路由相同,将进行比较路由优先级,优先级小的信任度更高,将成为最优路由放置在路由表中。
OSPF邻居与邻接关系建立的8种必要条件
先从外部出发(协议上)
- Version版本(OSPFv2、OSPFv3)
- 区域要一致(两端链路配置的区域不一致将无法建立邻居)
- Router-id不能冲突
再到内部(链路上)
- 认证类型auth type/Data要相同
- Netmask 掩码要求一致(两端配置的接口地址掩码要一致)
- Hello时间要一致
- Dead时间要一致
- option中(E、N)区域类型要一致(OSPF的是否为特殊区域)
- 【非必要】对于华为设备来说,并不会在意链路的MTU值是否一致。
5种报文
Hello包:建立并维护邻居关系
DD报文:描述LSDB数据库的简要信息
LSR报文:请求LSA
LSU报文:发送完整的LSA信息
LSAck报文:对LSU中LSA的确认
五个报文都会携带OSPF头部
Hello包:建立并维护邻居关系
N = 0 不进行7类LSA的同步 N = 1 需要对7类LSA进行同步
E = 0 不进行5类LSA的同步 E = 1 需要对5类LSA进行同步
不存在 N =1 ,E = 1的情况(同一区域不能同时存在5类和7类)
DD报文:描述LSDB数据库的简要信息
LSR报文:请求LSA
LSU报文:发送完整的LSA信息
LSA头部信息与链路状态信息
更新、撤销路由
LSAck报文:对LSU中LSA的确认
LSA格式
OSPF——LSA讲解_SomeDemo的博客-CSDN博客
邻居关系的7种状态
1 Down状态——在Down状态下,OSPF进程还没有与任何邻居交换信息。OSPF在等待进入Init状态。
2 Init状态——OSPF路由器以固定的时间间隔(缺省10s)发送类型1(Hello)的分组,以便与邻居路由器建立特殊的关系。
3 Two-Way(双向)状态——每台OSPF路由器都使用分组试图与同一个IP网络中的所有邻居路由器建立双向状态或双向通信。Hello分组中含有发送者已知的OSPF邻居列表。当路由器看到它自己出现在一个邻居路由器的Hello分组中时,它就进入了双向状态。
4 ExStart(准启动)状态——当路由器与它的邻居进入到ExStart状态后,他们之间的会话就表征为一种毗邻关系,但这时路由器还没有变成全毗邻状态。ExStart状态是使用类型2的数据库描述(DBD,DataBase Description)分组建立的,两个路由器用Hello分组协商在它们之间的关系谁是“主”,谁是“从”。(具有最高OSPF路由器ID的路由器将胜出并变成“主”)
5 Exchange(交换)状态——在交换状态下,邻居路由器使用类型2的DBD分组来互相发送它们的链路状态信息,也就是说路由器相互描述它们的链路状态数据库。路由器将它们所学到的信息与其现存的链路状态数据库进行比较,并且单独确认每个DBD分组,如果任何一台路由器接收到不在其数据库中的链路信息,该路由器就向其邻居请求有关该链路的完整更新信息。完整的路由信息在“Loading(加载)”状态下被交换。
6 Loading(加载)状态——在相互描述过各自的链路状态数据库之后,路由器可以用类型3的链路状态请求(LSR)分组来请求更完整的信息。当路由器接收到一个LSR的时候,它会用一个类型4的链路状态更新(LSU)分组进行回应。这些类型4的LSU分组含有确切的LSA,而LSA是链路状态型路由选择协议的核心,类型4的LSU分组由类型5的分组所确认。
7 Full Adjacency(全毗邻)状态——加载状态结束之后,路由器就进入全毗邻状态。每台路由器都保存着一张毗邻路由器列表,它就是称为毗邻数据库。
OSPF—邻居状态机
一,hello报文的邻居发现建立过程
I=1 —–代表当前的DD报文是选举主从的,在exstart状态下才会发送I=1 的报文。
M=1——代表自己还有后续的DD报文 ,告诉对方我得DD报文还没有发送完毕。
MS=1—–代表自己是MASTER, ms=0 代表自己是slave。
DD报文中的两端的MTU值必须一致,在华为的设备中MTU=0,标识忽略MTU的检查。
1,RT1发送hello报文,DR 没有,邻居没有。第一个探测hello,没有任何的外部信息,只有携带了自己的routerid。
2,RT2在收到AR1的hello报文之后,记录RT1的routerid,并放自己的hello包中。并发送hello报文给RT1,携带自己的routerid。状态升级为INIT。
3,RT1在收到RT2的hello报文后,状态调整为2way。因为此时RT2的hello报文中有自己的routerid。并发送带有RT2的routerid的hello报文给对方。
4,RT2在收到RT1的hello报文后,状态调整为2way。因为此时收到的RT1的hello报文中有自己的routerid。到此双方达到稳定的2way状态。
二,邻居状态机
1, 开始的状态down状态,也就是第一个hello报文都还没有发送的时候。
2,在收到对方的hello报文后,将状态提升到init状态。此时收到的hello报文中,只有对方的routerid。因为存在双方同时发送第一次的hello报文情况,
所以双方都有可能同时存在都为init的情况。
3,在收到对方的hello报文时候,如果报文中含有自己的routerid,那么状态提升到2-way状态。
4,双方到达2-way状态后,进入exstart状态,开始发送DD报文,选择主从。之后进入到Exchange状态,发送DD报文的LSA简要信息摘要。
5,如果没有需要要请求的LSA那么直接进入FLL状态。如果有需要更新的报文,那么进入loading状态,开始更新信息,更新完毕之后转入到Full状态。