简述ospf的路由计算过程。
在OSPF网络,路由的计算不是简单的把源地址与目的地址进行关联这么简单,需要考虑到许多因素,以确定一条***路径。整个OSPF路由计算过程可分为:邻接关系建立→DR/BDR选举→发送LSA→创建路由表→维护路由表这五大基本步骤。具体描述如下:
(1)建立邻接关系。
所谓"邻接关系"(Adjacency)是指OSPF路由器以交换路由信息为目的,在所选择的相邻路由器之间建立的一种关系。在OSPF中,邻居(Neighbor)和邻接(Adjacency)是两个不同的概念。OSPF路由器启动后,便会通过OSPF接口定期(默认为10秒)向外发送Hello报文。收到Hello报文的OSPF路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。但形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD(Database Description,数据库描述)报文,交换LSA并达到LSDB的同步之后,才形成真正意义上的邻接关系。如果在设定的期限(默认为40秒)内没有收到某OSPF路由器发来的Hello报文,则认为该OSPF路由器无效。
具体步骤是:路由器首先发送拥有自身ID信息(Loopback端口或***的IP地址)的Hello报文。与之相邻的路由器如果收到这个Hello报文,就将这个报文内的ID信息加入到自己的Hello报文内。然后在后面发送的Hello报文中就包括了原来所接收到的邻居路由器的ID信息。如果路由器的某端口收到从其他路由器发送的含有自身ID信息的Hello报文,则它根据该端口所在网络类型确定是否可以与对端路由器建立邻接关系。
在点对点网络中,路由器将直接和对端路由器建立起邻接关系,并且该路由器将直接进入到下面的第(3)操作,发送LSA以发现其他路由器;若为多路访问网络, 则该路由器将进入下面第(2)步的DR/BDR选举。
(2)选举DR/BDR。
在广播或者多路访问OSPF网络中,各相邻路由器都建立了相邻关系后,就要选举一个担当区域内的LSU通告代理角色的DR(指定路由器)和BDR(备份指定路由器),因为在OSPF网络中,为了减少LSU通告的流量,各路由器之间不直接发送链路状态信息,而是通过选举DR/BDR进行统一分发的。其他路由器要发送LSU,则先把LSU发给DR/BDR,再由DR或者BDR(只有在DR失效时才使用它)在组播给所有非DR,或者BDR的路由器。
DR和BDR是由同一网段中所有的路由器根据路由器优先级、Router ID通过Hello报文选举出来的,只有优先级大于0的路由器才具有选举资格。具体的选举过程如下:
①在与一个或多个邻居之间的双向通信建立起来之后,本地路由器对每个邻居发送来的Hello包中的优先级、DR和BDR域进行检查。此时所有路由器都宣称自己为DR(将它们自己的接口地址置于Hello包的DR域中);而且所有路由器都宣称自己为BDR(将它们自己的接口地址置于Hello包的BDR域中)。
②如果一或多个备选路由器将它(们)自身的接口地址置于DR域中,拥有***优先级的邻居将被宣告为DR。如果路由器优先级一样,拥有***Router ID的邻居将被选举出来。
③然后再将自身的接口地址置于BDR域中的路由器中选择拥有***优先级的路由器作为BDR。如果这些宣称自己为BDR路由器的优先级相等,则拥有***Router ID的邻居将被选举作为BDR。
④如果没有任何路由器被宣告为BDR,拥有***优先级的非DR邻居路由器将被宣告为BDR;如果多个优先级相同的这样的路由器,则拥有***Router ID的邻居将被选举作为BDR。
(3)发送LSA。
作为一种典型的链路状态的路由协议,OSPF还得遵循链路状态路由协议的统一算法。当路由器初始化或当网络结构发生变化(例如增减路由器、链路状态发生变化等)时,路由器会产生链路状态广播数据包LSA,该数据包里包含路由器上所有相连链路,也即为所有端口的状态信息。所有路由器会通过泛洪方式来交换链路状态数据。
在这个步骤中,路由器与路由器之间首先利用Hello报文的ID信息确认主从关系,然后主从路由器相互交换部分链路状态信息。每个路由器对信息进行分析比较,如果收到的信息有新的内容,路由器将要求对方发送完整的链路状态信息。这个状态完成后,路由器之间建立完全邻接关系,同时各邻接路由器拥有自己独立的、完整的链路状态数据库。
在多路访问网络内,DR与BDR互换信息,并同时与本子网内其他路由器交换链路状态信息。在Point-to-Point(点对点)或Point-to-MultiPoint(点对多点)网络中,相邻路由器之间会直接交换链路状态信息。
(4)创建路由表。
当网络重新稳定下来,也可以说OSPF路由协议收敛下来时,所有的路由器会根据其各自的链路状态信息数据库,采用SPF(最短路径优先)算法计算并创建路由表。OSPF路由器依据链路状态数据库的内容,独立地用SPF算法计算出到每一个目的网络的路径,并将路径存入路由表中。该路由表中包含路由器到每一个可到达目的地的开销以及到达该目的地所要转发的下一个路由器(next-hop)。
OSPF利用开销来计算路由路径性能的,开销最小者即为最短路径。在配置OSPF路由器时可根据实际情况,如链路带宽、时延等设置链路的开销大小;开销越小,则该链路被选为路由的可能性越大。这里的开销是根据链路类型来计算的,不同的链路类型对应的开销值不一样。
(5)维护路由信息。
当链路状态发生变化时,OSPF通过泛洪过程广播网络上的其他路由器。OSPF路由器接收到包含有新信息的链路状态更新报文,将更新自己的链路状态数据库,然后用SPF算法重新计算路由表。在重新计算过程中,路由器继续使用旧路由表,直到SPF完成新的路由表计算。新的链路状态信息将发送给其他路由器。值得注意的是,即使链路状态没有发生改变,OSPF路由信息也会自动更新,默认时间为30分钟。