在OSPF中,把连接到同一个链路的路由器称相邻路由器(Neighboring Router)。在一个相对简单的网络结构中,例如每个路由器仅跟一个路由器相互连接时(在专线网络中,路由器之间采用PPP相连),相邻路由器之间可以交换路由信息。但是在一个比较复杂的网络中,例如在同一个链路中加入以太网或FDDI等路由器时,就不需要在所有相邻的路由器之间都进行控制信息的交换,而是确定一个指定路由器(Designated Router),并以它为中心交换路由信息即可。
RIP中包的类型只有一种,它利用路由控制信息,一边确认是否连接了网络,一边传送网络信息。但是这种方式,有一个严重的缺点,那就是,网络个数越多,每次所要交换的路由控制信息就越大,而且当网络已经处于比较稳定的、没有什么变化的状态时,还是要定期交换相同的路由控制信息,这在一定程序浪费了网络带宽。
而在OSPF中,根据作用不同可以分为5种类型的包:
通过发送问候(HELLO)包确认是否连接,每个路由器为了同步路由控制信息,利用数据库描述包相互发送路由摘要信息和版本信息
如果版本较老,则首先发出一个链路状态请求包(Link State Request)请求路由控制信息,然后由链路状态更新包接收路由状态信息
然后由链路状态更新包(Link State Update)接收路由状态信息,
最后再通过链路状态确认包(Link State ACK Packet)通知大家本地已经接收到路由控制信息。
有了这样的机制后,OSPF不仅可以大大减少网络流量,还可以达到迅速更新路由信息的目的。
OSPF工作原理
OSPF中进行连接确认的协议叫做HELLO协议
LAN中每10S发送一个HELLO包,没有HELLO包没有到达,则进行连接是否断开的判断,具体为:允许空等3次,直到第4次(40S后)仍无任何反馈就认为连接已经断开。之后在进行连接断开或恢复连接操作时,由于链路状态发生了变化,路由器会发送一个链路状态更新包(Link State Update)通知其他路由器网络状态的变化。
链路状态更新包所要传送的消息大致分为两类:一是网络LSA(Network Link State Advertisement),另一个是路由器LSA(Router Link State Advertisement)。
网络LSA是以网络为中心生成的信息,表示这个网络都与哪些路由器相连接;而路由器LSA是以路由器为中心生成的信息,表示这个路由器与哪些网络相连接。
如果这两种信息(除这两种信息外还有网络汇总LSA和自治系统外部信息)主要采用OSPF发送,每个路由器就都可以生成一个可以表示网络结构的链路状态数据库。可以根据这个数据库,采用Dijkstra算法(最短路径优先算法)生成相应的路由控制表。
相比距离向量,由上述过程生成的路由控制表更加清晰不容易混淆,还可以有效地降低无线循环问题的发生。不过,当网络规模逐渐变大时,最短路径优先算法的处理时间就会变得越长,对CPU和内存的消耗也就越大。