路由器启动OSPF后就会周期性地在接口上发送Hello报文,目的是告诉其他路由器自己的存在,同时也探查是否有其他路由器存在,Hello报文中携带了定时器数值、优先级等信息,借此可以选举出DR与BDR。通过交互Hello报文,双方路由器都得知对方存在后,下一步将交换数据库描述报文(DataBase Description,DBD)。DBD中包含了链路状态的摘要信息,占完整数据量的一小部分,这样可以减少路由器之间交互的数据量。双方收到后就知道对方有哪些信息是自己缺少的,就可以针对性地发出链路状态请求报文(Link State Request,LSR)。对方收到后将会分析LSR中的请求,并且把相应的完整信息通过链路状态更新报文(Link State Update,LSU)发送过来,请求端收到LSU后发送链路状态确认(Link State Acknowledgment,LSAck)报文进行确认。通过这样的报文交互,每台路由器最后都能将全网的链路状态记录在自己的链路状态数据库(Link State Database,LSDB)中。然后路由器再以自己的LSDB为基础运行最短路径算法SPF计算出一棵以自己作为树根的最短路径树。网络中每台路由器的LSDB相同,但计算出的最短路径树不同。通过这棵树能确定路由转发的最短路径与接口,将转发接口、度量值等信息记录下来最终形成了路由表。数据最终通过路由表进行转发。
在图10-1中添加一台路由器D,并且在交换机上配置SPAN功能,捕获从路由器D与交换机连接的接口F0/14流经的数据包,拓扑如图10-3所示。
图10-3 OSPF区域中添加路由器捕获报文
交换机上配置monitor session指令如下。
路由器D上配置IP地址与OSPF,最后激活端口F0/0,指令如下。
(www.xing528.com)
在下一步激活F0/0接口前,确保PC上已经开启数据包捕获软件(如Wireshark),并且选择了正确的接口开始捕获数据包。下一步激活接口之后,PC上将捕获一次完整的OSPF交互报文。
接口F0/0激活后弹出了一些提示信息,前两句说明接口F0/0的状态切换为up,表示该接口可用。接下来三句提示该路由器已经接收到了三个邻居分别发送来的Hello报文,并且从down状态切换为Init状态。最后两句表示路由器D与DR(3.3.3.3)和BDR(2.2.2.2)建立了完全邻接关系(Full),这个状态表示路由器D与DR和BDR已经交换过DBD、LSR、LSU、LSAck报文了,已经完成了数据库的同步工作,它们的LSDB已经一致了。路由器D与路由器A交换过Hello报文,但并没有单播交换过DBD与LSR报文,路由器A最终的LSDB也会与其他路由器一样达到同步,原因是DR和BDR发送LSU的目的地址是“224.0.0.5”,所有运行OSPF的路由器都可以收到。
PC上捕获到的完整数据包交互报文如图10-4所示,共有Hello、DBD、LSR、LSU和LSAck 5种报文,这些OSPF报文都直接由IP协议封装,没有经过TCP/UDP,IP首部中对应OSPF的协议号为89。
图10-4 OSPF的5种报文
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。