|
(1):RA发送一Hello报文,在开始,RA没有任何邻居,所以这个报文的邻居字段是空的。
(2):RB接受到RA的HELLO报文,RB会为A创建一个邻居数据结构,并将A的状态设为init状态(初始状态)。
(3):同理,RB也会进行同样的运动,发送HELLO报文,neighbor字段也是空的,A接受到这个HELLo报文,会进行同样的处理。
(4):这时,路由器会对对方的HELLO报文做出HELLO报文的响应,在这个报文的其中,会在邻居的字段中这置对方的路由器ID(我们以B给A的响应为例)就会设置有A的路由器ID。进入2-way状态。在这时和会根据RouterID选举DR或BDR。
(5):当路由器A接收到含有自己的路由器ID的HELLO报文,A就会将为B创建一个邻居数据库,并把B的状态设置为Exstart状态,路由器A会一个空的数据库描述报文(没有包含LSA的的摘要),在这个报文中,会将数据库描述报文的序列号设置为x ,同时设置初始位用于标示这个报文是路由器A进行本次Exchange的最初的DBD报文。
(6):路由器B收到A的DBD报文,就会将A的状态转换位Exstart,同时RB响应RA,并设置这个DBD的序列号位y。
(7):RA收到RB的DBD报文,就会将RB的状态转换为Exchange,路由器A产生一个DBD报文,使用RB的序列号y,同时该报文将会传送RA的LSA头部。
(8):路由器B收到A的报文DBD,将A的状态转换为Exchange,它也会DBD报文(包含RB自己的LSA头部),并却使序列号变为y+1.
(9):RA收到RB的报文后,RA会发送一个相同序列号的确认报文。延续该过程,RB发送以一个单一的DBD报文,等待RA的确认(序列号相同)。然后RB再发送一个DBD报文,直到RB发出包含最后一个LSA摘要的DBD报文。
(10):RA收到上述报文后,并确认是最后的LSA,就会认为ExChange已经完成,RA的链路状态请求列表中还存在LSA条目,因此它会装换为loading状态。
(11):路由器RB收到最后以个DBD时,B把A的状态转为FULL状态,因为它没有LSA条目了
(12):RA发送链路状态请求报文,RB通过链路状态更新报文发送RA的LSA的通告,延续该过程,直到RA的请求列表为空,达到FULL状态,整个过程结束!
10:指定路由器(DR):
一个网段上的其他路由器都和指定路由器(DR)构成邻接关系,而不是它们互相之间构成邻接关系
备份指定路由器(Backup Designated Router;BDR)
通过Hello报文选择DR和BDR来代表OSPF网段
其他的路由器(DRothers)只和DR及BDR路由器之间形成邻接关系
DR和BDR的选择:通过组播发送Hello报文(DRothers地址是224.0.0.5,DR和BDR的组播地址是224.0.0.6)
具有最高OSPF优先级的路由器会被选为DR
如果OSPF优先级相同,则具有最高Router ID的路由器会被选为DR
只有接口类型为广播接口和NBMA口类型会选择DR和BDR
|
包类型 |
描述 |
|
Hello(三种情况有包) |
用于邻居路由器之间建立和维护邻接关系 |
|
数据库描述包DBD |
描述每台OSPF路由器的链路状态数据库
的内容 |
|
链路状态请求包LSR |
请求链路状态数据库的部分内容 |
|
链路状态更新包LSU |
传送链路状态数据通告LSA给邻居路由器 |
|
链路状态确认包LSAck |
| |