APP下载

OSPF邻接关系建立过程分析与研究

2015-04-29张洋王淑娟白艳宇

计算机时代 2015年12期

张洋 王淑娟 白艳宇

摘 要: 在大中型网络的部署中,OSPF协议常作为首选路由协议。在实际网络环境中,经常会遇到OSPF邻接关系无法建立,导致路由条目学习不到的情况。邻接关系的建立是OSPF路由協议最基本的内容,如果连邻接关系都建立不起来,就无从谈LSDB和路由表的建立和维护了。鉴于OSPF邻接关系建立的重要性,详细介绍了OSPF邻接关系建立的过程,旨在为无法建立邻接关系时提供技术支持。

关键词: OSPF; Hello包; 邻接关系; LSA; DBD报文

中图分类号:TP393 文献标志码:A 文章编号:1006-8228(2015)12-06-04

Analysis and research on the establishment of OSPF adjacency relationship

Zhang Yang, Wang Shujuan, Bai Yanyu

(Xuchang Prison, Xuchang, Henan 461000, China)

Abstract: In the deployment of large and medium sized networks, OSPF protocol can be used as the preferred routing protocol. In the actual network environment, if the OSPF adjacency relationship can't be established, the route item cannot be learnt from the other routers. The establishment of the adjacency relationship is the basic content of OSPF routing protocol. If the OSPF adjacency relationship can't be established, it is impossible to discuss the establishment and maintenance of LSDB and routing tables. In view of the importance of establishing the OSPF adjacency relationship, this paper introduces the process of establishing the OSPF adjacency relationship, which aims to provide technical support for the establishment of the adjacency relationship.

Key words: OSPF; Hello packet; adjacency relationship; LSA; DBD packet

0 引言

OSPF(Open Shortes Path First)开放式最短路径优先协议,是所有厂商都支持的链路状态路由选择协议,应用非常广泛,适应各种规模的网络。OSPF协议中链路(Link)是指路由器的接口特征,状态(State)是指路由器与其邻居路由器之间的关系。Link-State描述了整个OSPF网络的拓扑结构,对路由处理更加准确和快速,且不会产生环路。OSPF路由协议在对路由处理时,首先需要每个路由器都知道自己的邻居是谁,其次要知道自己的本区域内有哪些路由器,最后还需要通过SPF算法对链路状态数据库中拓扑结构进行计算,得到其到达目的网络的最佳路由。

在运行OSPF协议的路由器中都有三张表,分别是邻居表(Neighbor Table)、链路状态数据库表(Link-State DataBase,LSDB)、路由表(Routing Table)。邻居表中记录着所有已经和建立双向邻居关系的路由器信息;链路状态数据库表中记录着网络中所有其他路由器的信息,列出网络的拓扑结构;路由表中存放的是使用SPF算法算出到每个目的网络的最短路径。

1 OSPF的报文类型

为了交换链路状态信息以及路由信息,OSPF路由器之间要先建立邻接关系。在建立邻接关系时,会涉及以下五种报文类型。

1.1 HELLO报文(Hello Packet)

HELLO报文主要用于建立和维护OSPF邻接关系。路由器周期性的使用组播地址224.0.0.5发送Hello包给邻居路由器。

1.2 DBD报文(Database Description Packet)

DBD是链路状态数据库描述信息,有时也可简写为DD,描述LSDB中的LSA头部信息。

相邻路由器之间相互发送DBD报文,报告对方自己所拥有的路由信息内容,包括LSDB中每一条LSA摘要。摘要是指LSA的头部。这样做是为了减少路由器之间传递信息的量,因为LSA的头部信息只占一条LSA整个数据量一小部分,根据LSA头部信息,对方路由器就可以判断出是否已经有了这条LSA。

1.3 LSR报文(Link-State Request Packet)

LSR报文用于链路状态请求,向OSPF邻居请求链路状态信息。

两台路由器之间互相交换DBD报文后,知道对方路由器有哪些LSA是本地LSDB所缺少的或者对方更新的LSA,这时需要发送LSR报文向对方请求需要的LSA,报文内容主要是需要的LSA摘要信息。

1.4 LSU报文(Link-State Update Packet)

LSU报文主要是链路状态更新的内容,用于向对方路由器发送所需要的LSA,内容可以是一条或多条LSA。

1.5 LSAck报文(Link-State Acknowledgment Packet)

LSAck报文主要用于对LSU进行确认。

由于OSPF不是使用可靠的TCP协议,但OSPF包又要求可靠的传输,所以就有了LSAck包,它是用于来对接收到的LSU报文进行确认,内容是需要确认的LSA的头部信息。

2 OSPF邻接关系建立的过程

以路由器A(Router ID为192.168.1.1)和路由器B(Router ID为192.168.1.2)之间建立邻接关系的过程为例,如图1,共经历12个过程交互,来介绍OSPF邻接关系所经历的状态。首先需要说明OSPF邻接关系状态是有立足点的,是指立足于本路由器上看到对方的状态,并不是两台路由器之间处于什么状态。

2.1 Down状态

初始状态下,路由器AB的接口激活后处于Down状态,没有发现任何邻居,但都有意愿发起寻找邻居建立邻居关系,所以就会在以组播的形式发送Hello包。Hello包中,有一个Active Neighbor字段,用来存储已经发现的邻居,Down状态下该字段不存在。

2.2 Init(初始化)状态

图1中第1个过程是由路由器A通过组播地址224.0.0.5发送Hello包,Hello包中Active Neighbor字段为空。路由器B收到该Hello包就表明有OSPF邻居尝试和自己建立邻居关系,所以路由器B把路由器A置为Init状态,也就是在路由器B上看到路由器A的状态是初始化状态。之后路由器B将路由器A的Router ID存储在自己将要发送的Hello包的Active Neighbor字段中。

图2 Init状态下的Hello包

2.3 Two-Way状态

第2个过程,因为路由器B已经发现了路由器A,路由器B就将路由器A的Router ID存储在自己Hello包的Active Neighbor字段中,并将含有邻居信息的Hello包发送给路由器A。路由器A收到路由器B的Hello包,会发现对方的Hello包中Active Neighbor字段就是自己的Router ID,这个时候就意味着路由器AB之间已经建立起双向双边关系,路由器A将路由器B的邻居状态置为Two-Way状态。第3个过程,与此同时,路由器A也会将路由器B的Router ID放到自己的Active Neighbor字段中,发送Hello包。路由器B收到这个Hello包并看到自己的Router ID后,也会将路由器A的状态置为Two-Way状态。

图3为路由器B发送的Hello包,Active Neighbor字段为192.168.1.1。

Two-Way之后,如果是广播型多路访问网络(MA),会有一个选举DR和BDR的,DR和BDR一旦选举好,会在Hello包中相应字段填充,这个阶段结束后进入准启动/预启动(Ex-Start)状态。

2.4 Ex-Start状态

接下来,路由器AB會进入Ex-Start状态,在这个阶段会发送DBD报文协商主/从关系。DBD报文是对本路由器LSA头部信息的描述,DBD报文格式只有一种,但内容有两种情况,第一种情况DBD报文没有任何LSA头部信息,是空的,主要用于协商邻居之间的主从关系;第二种是装载的有LSA头部信息。

DBD报文字段中有三个位非常重要,分别是I、M、MS位。

I位:Init,置1,表明这是初始化协商报文,用于协商两台路由器的主从关系。当I=1时,DBD报文中不会包含LSA头部信息,体积超小。这里需要说明DR和BDR是只在MA网络中进行选举指定路由器的,而主从是在后续的LSA同步过程中谁占主动,并依据主动一方的序列号seq,统一LSDB当中的LSA序列号,也就是协商该用谁的序列号。

M位:More,置1,表明后续还有更多的DBD更新。置0,表明是最后一个DBD报文,本路由器的情况已经描述完了。

MS位:Master,置1,表明本路由器是主动方。置0,表明本路由器是从动方。最开始路由器双方都会认为自己是主动方,经过对比后,确定谁是主动方,对比原则是谁的Router ID大谁为主动方。

第4个过程,路由器A发向路由器B的DBD报文中I=1,M=1,MS=1,表明这是一条初始化协商报文,后续还有报文发送,路由器A会认为自己是主动方。第5个过程,路由器B收到路由器A发过来的DBD报文后,发现路由器A的Router ID小,B会认为自己是Master,所以MS=1。

图4所示为第4个过程中初始化协商的DBD报文,I=1。

2.5 Exchange状态

第6个过程,路由器A收到路由器B的DBD后,会发现路由器B的Router ID的确比自己大,会将自己的MS=0,主/从关系也协商完毕,I=0,此时进入Exchange状态。进入Exchange状态的标志是收到的DBD的I位置0,表示预启动状态结束,主/从关系协商完毕。路由器AB之间发送报文的序列号seq以路由器B的序列号为主,I=0,开始交互真正携带LSA头部的DBD。

第8-9个过程,经过一系列的交互,路由器AB双方都已经知道了对方的基本情况,也就是对方有多少个LSA头部摘要信息。在所有的DBD交互完时,最后一个报文中的M=0,当收到这种类型的DBD报文就表示Exchange状态结束。

2.6 Loading状态

第10-12个过程,开始装载更新本路由器需要的完整LSA。在本路由器上维护着一个列表,列表是需要向邻居请求具体的LSA头部信息,如果此时没有任何LSA要更新,就直接进入Full状态;如果有LSA更新,就发送关于LSA的请求,对方收到就回复LSU,LSU里包含完整的LSA信息。经过一系列的交互,双方的LSA信息同步,就进入Full状态,OSPF邻接关系建立达到全毗邻,开始进行路由收敛。

图6为路由器A发送的一个LSR报文。

2.7 Full Adjacency状态

Loading状态结束后,也就是本地OSPF接口上再没有待更新的LSA信息后,将邻居置为Full状态。

这里需要声明如果是NBMA网络(帧中继)中,在Down状态和Init状态之间有一个Attempt状态。该状态表示最近没有从邻居收到信息,需要间隔一定时间向邻居继续发送Hello包尝试联系。

3 结束语

在运行OSPF协议的网络中,路由器之间建立全毗邻的邻接关系是路由信息相互学习的前提条件,邻接关系是否正常建立影响着OSPF后续工作,其重要性不言而喻。因此,本文对OSPF的基本概念进行了描述,研究了对OSPF中五种报文类型,并以实际的两台路由器之间建立邻接关系的过程为例,通过抓包分析详细介绍了邻接关系建立过程中所经历的每种状态。

参考文献(References):

[1] 刘海峰.解析Cisco设备中OSPF路由协议邻居关系建立的

过程[J].产业与科技论,2011.10:55-56

[2] 黄向农,曾毅夫,谭永欣.关于OSPF路由优化技术的探讨[J].

实验技术与管理,2012.29(2):104-108

[3] 李淑红.Packet Tracer在OSPF路由协议教学中的应用研究[J].

实验室科学,2013.13(3):83-86

[4] 郭方平.OSPF路由协议安全性探讨[J].中国新通信,

2014.15:45

[5] 潘楠,王勇,陶晓玲.基于OSPF协议的网络拓扑发现算法[J].

计算机工程与设计,2011.5:1550-1567