OSPF采用SPF算法计算路由,从算法上保证不会产生路由环路。基于链路状态的。默认管理距离为110,使用IP数据报进行封闭,协议号89,组播地址为224.0.0.5(未选出了DR/BDR)和224.0.0.6(选出了DR/BDR)。
动态路由协议自带备份功能。路由器通过路由表转发数据。
OSPF协议并不传递路由条目,而是传递链路状态信息,并根据该信息来计算路由.
在一个网络中,路由器采用相同协议情况下:一台路由器从两个方向接收到去目的地,依靠带宽决定(cost开销值)
在一个网络中,路由器采用不同协议情况下:一台路由器从两个方向收到相同的目的地,比较管理距离(优先级)
来看一下OSPF的七个状态。
看上图:两个路由器已开启OSPF的接口,但是没有从邻居收到任何信息,这是Down状态,也是邻居的初始状态。
路由器之间通过交互问候(hello),建立和维护邻居关系。(检测对方还活着)
HELLO包的消息格式
1、网络掩码
是发生数据包的接口的掩码。接收和发生必要一致,否则丢弃。
2 Hello时间间隔
是指发送Hello数据包的以秒计算时间间隔。发送和接收必须一致否则邻居不能建立。
3路由器优先级
用作选举DR和BDR的。如果为0 ,表示不参与选举。
4 路由器无效时间间隔
以秒计算的始发路由器等待邻居发送Hello数据包的时长。
如果接收和发送不等丢弃数据包,邻居无法建立。
5 指定路由器
网络上指定路由器的接口IP。如果无设置0.0.0.0。
6 备份指定路由器
网络上指定备份路由器的接口IP。如果无设置0.0.0.0。
7 邻居
在路由器无效时间间隔内收到的有效的邻居的RID。
A发送了hello包,B也收到了A的hello包,但是B发现这个包里面没有自己的router-id,虽然收到了hello包,但是里面没有自己的名字。这就是init状态。
现在B也发送一个hello包给A,A收到了邻居的hello包,并且在包里面发现了自己的router-id,这就进入2-way状态,双向通信状态,形成邻居关系。
在这阶段会选举DR/BDR,DR好比是山寨中的大哥,那BDR就是二哥,大哥挂了就由二哥顶替。那怎么选举呢?看优先级,越大越优,优先级相同,就比较router-id越大越优。
选举DR的作用:多路访问中为了减少邻接关系
选举DR/BDR完成后,现在进入EXstart,在这状态每个路由器都会发送DBD报文,根据DBD报文中的rout id,也是越大越优,此时选举出master,确认主从关系。这个master是可以抢占的,如果后面加入进来的路由器(router-id)更优就会抢占成为管理员。
DBD作用
1、建立邻接关系
2、不带有LSA头部的DD,用于选举主从
3、带有头部的DD,用于交换链路状态摘要消息
master会安排DBD报文的发送顺序。大家看,在这两个路由器中,B路由器的rout id较大,所以b路由器先发送DBD报文,里面携带它自己的链路状态数据库,其次路由器A也发送DBD报文给B。从而交换链路状态。
此时路由器A根据路由器B报文,发现链路状态数据库中缺失某条信息,那A会发请求报文LSR,让B把相应的信息发给自己。B收到A发来的LSR请求后,把它要的信息通过LSU更新报文发给A,发送LSACK确认报文。说已经收到了。A接收到了会保存LSDB中,从而实现LSDB完全同步。