ospf
协议:
OSPF
最短路径优先协议,是
IEIE
组织建议使用的内部网关协议,数据链路状态协议,使用
Dijkstra
的最短路径算法,其协议号为
89
。
OSPF
分骨干区域和非骨干区域。
router-id
:
在
ospf
协议每台路由器都要有自己的标识即
router-id
,其选举方式可以手工指定,然后是
lookback
口的最高
IP
,最后是最高的活动接口
IP
(就是物理接口开启的接口
IP
)。
OSPF
五报文七状态
:
1
、
hello
(
t=1
)起作用是发现邻居,建立邻居关系和维护邻居关系,选举
DR
和
BDR
。根据网络类型的不同气更新时间间隔也有不同。
NBMA
和点到点是
30S
。而其他类型是
10S
。
dead interval
是
hello interval
的
4
倍。
hello
包主要包括:
router-id
、
area-id
、
hello/dead interval
、
neighbor
、
router priority
、
DR
和
BDR
的
ipaddress
、
stub area flag
、
authentication password
(只有横线中的相同才能建立邻居关系
2
、
DBD
(
t=2
):数据库描述信息,用于描述数据库链路状态摘要,其内容是发送
LSA
头部信息。
3
、
LSR
:链路状态请求报文
-
单播方式发送
4
、
lsu
:链路状态更新报文
-
单播方式发送
5
、
LSACK
:报文确认
-
单播方式发送。
七状态:
down
、
init
(
NBMA
另外还会在
down
后进入
attemp
,此时用
hello interval
代替
poll interval
)。
exstart
、
exchange
、
loading
、
full
。
poll interval
:在
dead
后没收到
hello
包则,每
60
秒向处于
down
的邻居发
hello
包,这是由于
NBMA
的非广播需要手工配置(在其余的网络里当在
dead
后没收到
hello
包则认为邻居失效)
七状态:
1.down state:
路由器还末收到邻居发来的HELLO包.(
NBMA
另外还会在
down
后进入
attemp
,
就是为NBMA网络中的一个正常过滤状态,即我发送了HELLO等待对方的回应,如果对方不回应则一直滞留在此状态。
此时用
hello interval
代替
poll interval
)。
poll interval
:在
dead
后没收到
hello
包则,每
60
秒向处于
down
的邻居发
hello
包,这是由于
NBMA
的非广播需要手工配置(在其余的网络里当在
dead
后没收到
hello
包则认为邻居失效)
2.init state:
路由器收到邻居发来的HELLO包,但在邻居阶段中看不到自己的ROUTER-ID
3.two-way state: 路由器在收到邻居发来的HEELO包中,能够看到自己的ROUTER-ID,就进入该状态(需要选举DR和BDR的在这阶段选举)
4.exstart state: 在选举DR和BDR之后,开始选主从(ROUTER-ID大的为主,作用为了同步DBD的序列号)
5.exchange state: 主从协商完成后,进行DBD的同步
6.loading state :DBD同步完成后,进行LSA的同步
7.full state: LSA 的同步完成之后现在我们来分析一下每个报文的作用:
1.R1 的接口上启用了OSPF后,会向外组播发送OSPF的HELLO报文。R2也开始发送组播,并且当R1和R2都接到对方发送的hello包后进入init状态。随后对接受到的hello包进行回复,R1接受到R2的回复信息中发现自己的router-id则转为two-way状态,R2在接收到R1的hello包中发现自己的router-id也转为twoway状态。
3.two-way state: 路由器在收到邻居发来的HEELO包中,能够看到自己的ROUTER-ID,就进入该状态(需要选举DR和BDR的在这阶段选举)
4.exstart state: 在选举DR和BDR之后,开始选主从(ROUTER-ID大的为主,作用为了同步DBD的序列号)
5.exchange state: 主从协商完成后,进行DBD的同步
6.loading state :DBD同步完成后,进行LSA的同步
7.full state: LSA 的同步完成之后现在我们来分析一下每个报文的作用:
1.R1 的接口上启用了OSPF后,会向外组播发送OSPF的HELLO报文。R2也开始发送组播,并且当R1和R2都接到对方发送的hello包后进入init状态。随后对接受到的hello包进行回复,R1接受到R2的回复信息中发现自己的router-id则转为two-way状态,R2在接收到R1的hello包中发现自己的router-id也转为twoway状态。
DR
和BDR的在two-way这个阶段中开始选举,接口优先级高的优先成为DR或BDR,优先级相等时,ROUTER-ID大的为DR或BDR,其它的路由器为DRother。在选举DR和BDR(或不需要选举DR和BDR)后,进入exstart state,开始选主从(ROUTER-ID大的为主,作用为了同步DBD的序列号)R1和R2分别向外发DBD报文,都认为自己为主,其中的I、M、MS位分别置1,I表示为第一个包,M表示后面还有更多包,MS表示为主
(DBD报文的格式:包括OSPF的首部信息Interface MTU:在不分片的情况下,此接口最大可发出的IP报文长度为1500。注意
如果
R1
和
R2
的
MTU
不匹配则一直停留在
exstart
状态。如果邻接关系建立后
mtu
不匹配则无影响,因为这时不用再进入
exstart
状态了。
DD Sequence Number
:
DD
报文序列号,由Master方规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。主从双方利用序列号来保证DD报文传输的可靠性和完整性,通过比较ROUTER-ID,R2的ID大所以成为主,R1成为备,R1使用R2的序列号(这边距离为1190)发送LSA的头部信息给R2(I=0,M=1,MS=0)不为第一个包,后面还有包,为从)
在BDB的主从协商完毕就进入了exchange状态了。
R2
收到R1发来的DBD中的LSA头部信息,同时向R1发送DBD报文,携带LSA的头部。(I=0,M=1,MS=1)不为第一个包,后面还有包,为主,序列号+1 为
1191
。
同时R2先知道自己的数据库是否同步,所以发送LSR,请求没同步的LSA
,
R1
收到R2发过来的BDB,要发送DBD的确认给DBD的主路由器也就R2,同时R1没有DBD的包了,所以M=0,表示为最后一个DBD包。(但如果主再发DBD包过来,从还是要发DBD进行确认,这叫隐式确认)此时,R1也知道自己的数据库哪些末同步,也向R2发送LSR请求末同步的LSA,也就是一些LSA的头部信息在发送LSR时就进入了loading状态。最后R1和R2的LSA完全同步了,进入FULL状态,R1和R2建立邻接关系,每隔10s发送HELLO报文,运行SPF算法计算路由,把最最佳路由加入到全局路由表中。
今天先写到这边,要睡觉了,明天继续补,后面写得不详细,明天做完实验在另作修改,纯属个人总结。。。
转载于:https://blog.51cto.com/wsjiejun/1162407