对于广播多路访问网络,路由器在启动OSPF进程,到整个OSPF域形成相同的拓扑数据库,这中间一般来说,每台路由器会经历八个状态:
1、失效状态(down):新路由器处于失效状态。路由器尝试发送Hello分组,向网段中的其他路由器介绍自己,并试图发现其他的OSPF路由器。该Hello分组使用多播地址224.0.0.5(所有SPF路由器),其DR,BDR字段都设置为0。0。0。0
注:发现邻居的过程
2、初始化状态(init):新路由器发送出hello分组等待应答状态。通常等待时间为hello时间的4倍。在这段时间内,新路由器从其他路由器那里收到Hello分组,并获悉谁是DR,BDR。如果收到的hello分组没有指出谁是DR,BDR,则开始选举。
注:选举DR BDR的过程
3、双向状态(two–way):在其他路由器A收到来自路由器B的hello分组后,将hello分组中的路由器ID加入到拓扑数据库中,并用多播地址224.0.0.5发送一个HELLO分组,其中包含自己的ID和一个由所有邻居组成的列表。当B收到该HELLO分组后,如果发现自己的ID在这个来自A的HELLO分组里的邻居列表中,那么B将认为和A已经形成了双向的通信状态。
4、预启动状态(exstart):互为邻居的两台路由器A,B。它们根据直连的接口IP选出较大IP那台路由器做为主(master)路由器,这就是预启动状态。两个邻居是根据接口的IP大小来确定主/从关系:谁主谁次并不重要,它们主要是决定由谁来发起通信。
5、交换状态(exchange):两台路由器都发送数据库描述分组(DDP),并切换到交换状态。路由器从邻居路由器那里收到DDP后,将其同自己的拓扑表进行比较。DDP里面只包含拓扑数据库的摘要信息。
注:形成拓扑
6、加载状态(loading):当一台路由器收到了来自邻居的DDP分组,经过比较后发现自己的拓扑数据库信息和DDP中包含的摘要信息存在差异,,这时该接收路由器需要更详细的信息,它将使用LSR分组请求有关特定链路的详细信息。
7、完全邻接(full):当A路由器收到来自B的LSR时,它将返回一种LSU分组(就是指收到LSR分组后发送的一种LSA分组)。然后B收到该LSU后,将返回一种LSACK(链路状态确认)分组。同时B和A的拓扑数据库达到了同步,此时,邻居关系就变成了邻接状态。(loading to full)
(Attempt 只有在NBMA网络里才有,手工进行Neighbor的指定。)
这中间主要出现了四种分组:
1、HELLO分组:用于发现邻居和选举DR,BDR。路由器不断的发送HELLO分组,以确保它始终出现在收到了这些分组的路由器的拓扑数据库中。
2、数据库描述分组(DD):用于向邻居发送摘要信息以同步拓扑数据库。
3、LSR:用于请求更详细的信息,路由器收到包含新信息的数据库描述分组后发送的一种分组
4、链路状态确认(LSACK):确认已经收到了LSU
A——————————hello——————————>B
A<——————————hello——————————B
A——————————DDP——————————>B
A<——————————DDP——————————B
A——————————LSR——————————>B
A<——————————LSU——————————B
A——————————LSACK——————————>B
OSPF协议简单的操作过程:
1、发现邻居并发送hello数据包,匹配hello包中的参数,建立neighbor关系。DR/BDR在这里选举完成
2、根据网络类型建立邻接关系,可以想象为一条虚链路,建立邻接以后才能发送LSA
3、每一台路由器都会在形成邻接关系的路由器发送LAS链路状态通告,LSA描述了路由器的链路、接口、邻居。
4、每一台路由器收到LSA后把LSA放到LSDB中,并且向邻居发送一份LSA的拷贝。
5、LSA洪泛,形成相同的链路状态数据库。
6、SPF算法计算最短路径。
7、把最短路径放到路由表中。每10秒发送hello,每30分钟重传LSA
OSPF packet type
1 hello
2 DBD
3 LSR
4 LSU
5 LSACK
在发送任何LSA通告之前,OSPF路由器都必须首先发现他们的邻居并且建立起邻接关系。
2、所有环回loopback接口上最高的IP地址。 3、所有物理接口上做高的IP地址。 loopback接口做为RID的好处,一般建议手工设置RID,并且使用环回接口,因为环回接口永远处于UP状态,防止路由翻动。
发现邻居路由器 hello数据包包含以下信息: 路由器ID OSPF邻居的工作过程: 如果所有的参数都匹配,那么这个hello数据包被认为是有效的,如果始发路由器的RID已经在接收该hello数据包路由器的邻居表中 出现,那么路由器的无效时间间隔计时器将被重置。如果没有,就加入到邻居表中。 当A路由器发送自己的RID给B路由器,B路由器也发送自己的RID给A路由器时,双方握手相互认识,并且从接收hello数据报中看到自己的 RID,那么这两台路由器就是双向通信two-way建立成功,如果这两台路由器在网络中不是DR/BDR,那么他们的状态只能到此为止。
失效(down)—shutdown 尝试(attempt)—只适合在NBMA网络中 初始(init) 开始发现邻居,并互相发送自己的RID给对方,建立邻居数据结构 双向通信(two-way) 表明本地路由器已经在来自邻居hello包中看到自己,双向通信建立成功,DR/BDR选举 信息交换初始(Exstart) 建立主/从关系,谁先发链路状态描述信息 信息交换(EXchange) 互相发送DBD,链路状态描述 信息加载(loading) 如果从路由链路状态请求列表里还有LSA条目,进入此状态 全邻接(full) 建立起完全邻接以后,可以洪泛LSA通告
1、数据库描述数据包 DBD 3、数据库更新数据包 LSU 数据库描述的理解:DBD只是携带一个路由器LSA简要的描述,并不是完整的LSA,如果LSA是一本书,那么DBD就是书的目录而已。
邻接关系简单的建立过程: 当2台路由器由TWO-WAY转到EXStart状态时,开始进行主/从关系协商,RID最高为主,主路由MS位置1,从路由回复一个MS位 为0的数据包,并进入EXchange状态,双方互相发送DBD链路状态描述,如果从路由的链路状态请求列表中还有LSA条目时 进入loading状态,直 到请求列表为空,双方才进入full状态。
来通告自己的链路状态。 2、DR接收并确认LSU更新后,用组播地址224.0.0.5将该LSU包洪泛到区域里所有的OSPF路由器上。 3、区域中的其他路由器收到这个LSU包,发送一个LSACK确认给DR,然后更新自己的链路状态数据库,以自己为源,所有点为目标,用SPF计算
|