十一、OSPF建立邻接关系(总流程)
OSPF完成邻接关系的建立有四个步骤,建立邻居关系、协商主/从、交互LSDB信息,同步LSDB。
邻接建立的过程:
将两台路由器的接口加入路由器之后(即宣告到OSPF进程之后),这两个接口就会自动的去发送Hello包(Hello包用来建立邻居关系);邻居建立起来后,这两台路由器会通过DD包文来进行主从路由器的选举;选举完毕之后,两台路由器通过DD包文来传递路由器相互描述的各自的LSDB(摘要信息);两台路由器开始对比差异,如果R1路由器发现有自己没有的摘要信息,就会向R2路由器发送LSR(链路状态请求),请求将缺少的部分发给R1,R2就会通过LSU(链路状态更新)将LSA发送给R1,从而实现同步,然后双方都发送一个LSACK来确认完成同步,R2同理;然后就可以以自己为根完成路由计算。
为什么要进行主从选举?
因为LSDB的同步需要交换LSA的信息,为了保障交换的可靠性和有序性,需要进行主从选举。
LSDB的同步指的邻居之间LSDB中的LSA是相同,并新旧程度要一致,就是新的LSA要刷新掉旧的LSA,因为新的LSA反映的是网络当前真实的状态信息
LSA的摘要:解决LSA的标识以及新旧程度
注意:ls age:老化时间;seq:序列号;chksum:校验和
十二、OSPF邻接关系建立流程(分步一)
hello报文:源IP为接口IP,目的IP为224.0.0.5(OSPF协议专用组播地址,用于标识运行OSPF协议的路由器)
在点到点链路和广播型链路上,每隔10S发送一次,邻居失效时间为40S
在NBMA(非广播多路访问)/点到多点链路上,每隔30S发送一次,邻居失效时间120S
注意: ospf cost hello------修改cost值的命令(通过修改cost值来控制路径)
OSPF邻居任何情况建立邻居的条件:
1、router id 不能冲突
2、area id 要相同
3、auth type 要一致
4、auth date 要能通过认证
5、hello 间隔和 dead 间隔要一致
6、option 中的N bit 和E bit 取值要相同
hello报文:
OSPF(89)、Source Address---源IP、Destination Address---目的IP
Hello包------OSPF头部:
注意:Hello报=OSPF Header+OSPF Hello Packet
5种Hello报头部信息完全一样
Version:2------版本,OSPF V2
Message Type:Hello Packet(1)------类型,Hello报
Packet Length:44------报长度,头部+报身,44B(字节)
Source OSPF Router:1.1.1.1------路由器ID
Area ID:0.0.0.0-------区域:0
Auth Type:Null(0)------认证类型,NULL:即说明没有做路由协议报文的认证
Auth Data(none):0000000000000000-------认证数据为0(没做路由协议认证)
OSPF Hello Packet:
Network Mask:255.255.255.0------接口子网掩码
Hello发送间隔,10S(秒)
N=0(默认为0),E=1
路由器接口优先级(用来选择DR,BDR)
邻居失效时间:40秒
DR,指定路由器
BDR,备份指定路由器
邻接建立详细流程:
两台路由器在还没收到对方的Hello报之前,邻居状态是Down(即不认为有邻居存在的一种状态)的状态;R1开始向R2发送hello报,报中携带Router ID(由于R1处于down的状态,不知道有邻居,所以只会携带自己的Router ID),hello报被R2接收到,R2也运行了OSPF协议,收到hello报文后,就会从down的状态过渡到Init(初始)状态,R2就发现了R1这个邻居,然后通过条件检查,发现能够建立邻居就将R1添加到自己的邻居表中,然后R2向R1发送hello报,这个hello报中会携带R1和R2的Router ID,R1发现hello报后,就会从down的状态过渡到2-way(R1认为双向发现了邻居)状态;R1再次将R1和R2的Router ID发送给R2,R2发现后,也进入2-way状态。
注意:实际工作中R1进入2-way状态后,就会发送DD报文进行主从选举(谁先到2-way,谁先发送DD报文进行主从选举);
第一次R1和R2发空包,不携带Router ID信息;第二次携带R1\R2的Router ID
十二、OSPF邻接关系建立流程(分步二:主从选举)
(1)、Ex-start---预启动状态(进行主从选举)
DD报文---携带主从选举信息
第一次发送的DD报文:
OSPF Header(OSPF头部)---除Message Type:DB Description(2),类型为2;其余部分都一样
(I)Init=1---发的第一个DD报文;(M)More=1---我还要发DD报文;(M)Master=1---主路由器;DD Sequence:5111---DD报文的随机序列号
注意:第一次发送的DD报文内容为空,不会携带LSA的摘要信息;第一次两个路由器都发空包,都想自己做主路由器
(2)、Exchange状态下:从路由器先发DD报文
从路由器(R1)先发DD报文:
携带自己的摘要信息
主路由器(R2)再发DD报文:
携带自己的DD报文
十二、OSPF邻接关系建立流程(分步三)
(1)、Loading(加载状态)
LSR(LS请求)---LSR中:LSA的标识
LSU(LSA更新)---携带LSA信息
LS ACK(LS ACK确认)
OSPF邻接总流程:
注意:
DD:LSA摘要(头部)
LSR:LSA标识(type,ls id,adv rtr)
LSU:LSA(包含摘要和新旧关系)
LSACK:LSA摘要,不是对LSU做确认,而是收到的LSA做确认
OSPF邻居建立的可靠性体现?
(1)、hello报文 3次握手建立双向邻居关系
(2)、DD报文主从选举/隐式确认 保证LSDB的同步
(3)、LSR,LSU,LSACK 显式确认,保证LSA同步一致性
为什么要DD报文?
提升OSPF LSDB同步的效率,节省设备资源,优化网络性能。
DD报文仅在建立邻接过程中才会产生,邻接建立后,更新LSA仅通过LSU和LSACK完成。
维持在two-way的路由器叫邻居,LSDB一致的邻居叫邻接。