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,就进入该状态(需要选举DRBDR的在这阶段选举)
4.exstart state: 在选举DRBDR之后,开始选主从(ROUTER-ID大的为主,作用为了同步DBD的序列号)
5.exchange state: 主从协商完成后,进行DBD的同步
6.loading state DBD同步完成后,进行LSA的同步
7.full state: LSA 的同步完成之后现在我们来分析一下每个报文的作用:
1.R1 的接口上启用了OSPF后,会向外组播发送OSPFHELLO报文。R2也开始发送组播,并且当R1R2都接到对方发送的hello包后进入init状态。随后对接受到的hello包进行回复,R1接受到R2的回复信息中发现自己的router-id则转为two-way状态,R2在接收到R1hello包中发现自己的router-id也转为twoway状态。

DR BDR的在two-way这个阶段中开始选举,接口优先级高的优先成为DRBDR,优先级相等时,ROUTER-ID大的为DRBDR,其它的路由器为DRother。在选举DRBDR(或不需要选举DRBDR)后,进入exstart state,开始选主从(ROUTER-ID大的为主,作用为了同步DBD的序列号)R1R2分别向外发DBD报文,都认为自己为主,其中的IMMS位分别置1,I表示为第一个包,M表示后面还有更多包,MS表示为主

DBD报文的格式:包括OSPF的首部信息Interface MTU:在不分片的情况下,此接口最大可发出的IP报文长度为1500。注意 如果 R1 R2 MTU 不匹配则一直停留在 exstart 状态。如果邻接关系建立后 mtu 不匹配则无影响,因为这时不用再进入 exstart 状态了。

DD Sequence Number DD 报文序列号,由Master方规定起始序列号,每发送一个DD报文序列号加1Slave方使用Master的序列号作为确认。主从双方利用序列号来保证DD报文传输的可靠性和完整性,通过比较ROUTER-IDR2ID大所以成为主,R1成为备,R1使用R2的序列号(这边距离为1190)发送LSA的头部信息给R2I0,M1,MS0)不为第一个包,后面还有包,为从)

BDB的主从协商完毕就进入了exchange状态了。

R2 收到R1发来的DBD中的LSA头部信息,同时向R1发送DBD报文,携带LSA的头部。(I0,M1,MS1)不为第一个包,后面还有包,为主,序列号+1 1191 同时R2先知道自己的数据库是否同步,所以发送LSR,请求没同步的LSA R1 收到R2发过来的BDB,要发送DBD的确认给DBD的主路由器也就R,同时R1没有DBD的包了,所以M0,表示为最后一个DBD包。(但如果主再发DBD包过来,从还是要发DBD进行确认,这叫隐式确认)此时,R1也知道自己的数据库哪些末同步,也向R2发送LSR请求末同步的LSA,也就是一些LSA的头部信息在发送LSR时就进入了loading状态。最后R1R2LSA完全同步了,进入FULL状态,R1R2建立邻接关系,每隔10s发送HELLO报文,运行SPF算法计算路由,把最最佳路由加入到全局路由表中。

 今天先写到这边,要睡觉了,明天继续补,后面写得不详细,明天做完实验在另作修改,纯属个人总结。。。