OSPF协议概述.docx
《OSPF协议概述.docx》由会员分享,可在线阅读,更多相关《OSPF协议概述.docx(73页珍藏版)》请在冰豆网上搜索。
OSPF协议概述
OSPF内容概要
1.概述
OSPF是一个内部网关协议,用于在单一自治系统内决策路由。
它是基于链路状态的路由协议,链路状态是指路由器接口或链路的参数。
这些参数是接口的物理条件:
包括接口是Up还是Down、接口的IP地址、分配给接口的子网掩码、接口所连的网络,以及使用路由器的网络连接的相关费用。
OSPF与其他路由器交换交换信息,但所交换的不是路由,而是链路状态。
OSPF路由器不是告知其他路由器可以到达哪些网络及距离是多少,而是告知它的网络链路状态,这些接口所连的网络及使用这些接口的费用。
各个路由器都有其自身的链路状态,称为本地链路状态,这些本地链路状态在OSPF路由域内传播,直到所有的OSPF路由器都有完整而等同的链路状态数据库为止。
一旦每个路由器都接收到所有的链路状态,每个路由器可以构造一棵树,以它自己为根,而分支表示到AS中所有网络的最短的或费用最低的路由。
OSPF对于规模巨大的网络,通常将网络划分成多个OSPF区域,并只要求路由器与同一区域的路由器交换链路状态,而在区域边界路由器上交换区域内的汇总链路状态,这样可以减少传播的信息量,且使最短路径计算强度减少。
在区域划分时,必须要有一个骨干区域(即区域0),其它非0或非骨干区域与骨干区域必须要有物理或者逻辑连接。
当有物理连接时,必须有一个路由器,它的一个接口在骨干区,而另一个接口在非骨干区。
当非骨干区不可能与物理连接到骨干区时,必须定义一个逻辑的或虚拟链路,虚拟链路由两个端点和一个传输区来定义,其中一个端点是路由器接口,是骨干区域的一部分,另一端点也是一个路由器接口,但在与骨干区没有物理连接的非骨干区域中。
传输区是一个区域,介于骨干区域与非骨干区域之间。
2.术语
在OSPF中,经常要使用以下术语:
RouterID(路由器ID):
用于标识每个路由器的32位数。
通常,将最高的IP地址分配给路由器ID。
如果在路由器上使用了回送接口,则路由器ID是回送接口的最高IP地址,不管物理接口的IP地址。
Interface(接口):
路由器和具有唯一IP地址和子网掩码的网络之间的连接。
NeighborRouter(相邻路由器):
带有到公共网络的接口的路由器。
BroadcastNetWork(广播网络):
支持广播的网络。
Ethernet是一个广播网络。
NonBroadcastNetWork(广播网络):
支持多于两个连接路由器,但没有广播能力的网络,如帧中继和X.25等网络。
在非广播网络中,有非广播多点访问网络NBMA(在同一个网络上,但不能通过广播访问到)和点到多点网络。
DesignatedRouteer(指定路由器DR):
在广播和NBMA网络中,指定路由器用于向公共网络传播链路状态信息。
BackupDesignatedRouteer(后援指定路由器DR):
在DR故障时,接替DR的路由器。
AreaBorderRouter(区域边界路由器ABR):
连接多个OSPF区域的路由器。
AutonomousSystemBorderRouter(自治系统边界路由器ASBR):
一个OSPF路由器,但它连接到另一个AS,或者在同一个AS的网络区域中,但运行不同于OSPF的IGP。
Adjacency(紧邻):
紧邻可以在点对点连接的两个路由器之间形成,也可在广播或NBMA网络的DR和非指定路由器之间形成,还可以在BDR和非指定路由器之间形成。
OSPF路由状态信息只能通过紧邻被传送和接收。
Flooding(洪泛):
在OSPF区域内,扩散某一链路状态,以分布和同步路由器之间的链路状态数据库。
Link-StateAdvertisement(链路状态宣告LSA):
描述路由器的本地链路状态,通过该通告向整个OSPF区域扩散。
ExternalRouting(外部路由):
从另一个AS或另一个路由协议得知的路由可以作为外部路由放到OSPF中。
有两种类型的外部路由,类型1的外部路由具有的费用包含OSPF的费用,加上从ASBR到网络的费用。
类型2的外部路由具有的费用仅是ASBR到网络的费用,而内部的OSPF费用可以忽略不计。
IntraareaRouting(区域内路由):
在相同OSPF区域的网络之间的路由,这些路由仅依据从区域内所接收的信息。
InterareaRouting(区域间路由):
在两个不同的OSPF区域之间的路由。
区域间的路径由三部分组成:
从区域到源区域的ABR的区域内路径,从源ABR到目标ABR的骨干路径,最后是从目标ABR到目标区域的路径。
RouteSummarization(路由汇总):
要通告的路由可能有一个区域内的路由、来自另一个AS的路由,以及从另一个路由协议得知的路由,所有这些路由可以由OSPF汇总成一个路由宣告。
汇总仅可以在ABR或ASBR上发生。
StubArea(存根区):
只有一个出口路径的区域。
3.协议包格式
OSPF包共有5种包类型,任意一种包都需要加上OSPF的报文头,最后封装在IP中传送,一个OSPF包的最大长度为1500字节。
其结构如下:
OSPF协议一共使用5种类型的路由协议包:
包类型
作用
1:
呼叫
发现和维护邻居
2:
数据库描述
紧邻间同步数据库内容
3:
链路状态请求
要求从邻居获取LSA
4:
链路状态更新
向邻居通告LSA
5:
链路状态确认
对所通告的LSA给出确认消息
无论何种类型的OSPF包都有以下一个公共的报文头:
版本号
包类型
包长度
路由器ID
区域ID
校验和
认证类型
身份验证
身份验证
版本号:
目前版本号为2。
不同版本号不能会话。
包类型:
包类型的标志,为5种包类型中的某种。
包长度:
以字节计算,包括OSPF包加上首部头的长度。
路由器ID:
产生OSPF传输包的路由器的标识,一般就是路由器的最高IP地址。
区域ID:
分配给路由器传输接口的区域的32位指示器。
如果包经过虚拟链路来发送,那么区域ID为骨干区域ID(ID=0),因为虚拟链路是骨干区域的一部分。
校验和:
整个OSPF报文包括OSPF头的校验和,使用补运算进行计算。
认证类型(AuType):
身份验证的方法,其后64位域包含使用的证明类型所要求的数据。
AuType=0表示无认证,AuType=1表示简单的口令认证,AuType=2表示MD5安全认证。
3.1Hello包格式
Hello呼叫报文用于发现路由器所连网络上的邻居。
通过周期性地发出呼叫包,呼叫协议可用于确定邻居路由器接口是否仍然处于活动状态。
在广播网络和NBMA网络,呼叫协议可以用于选取指定路由器。
呼叫包被发送到Multicast多播地址AllSPFRouters(224.0.0.5)。
在播发期间,有些协议包也将发送到该地址。
指定或后援指定路由器发送并接收到Multicast多播地址是AllDRRouters(224.0.0.6)。
Hello报文是包类型为1的OSPF包,封装在OSPF报文头后面,其格式如下:
版本号=2
包类型=1
包长度
路由器ID
区域ID
校验和
认证类型
身份验证
身份验证
网络掩码
HelloInterval
选项
路由器优先级
RouterDeadInterval
指定路由器
后援指定路由器
邻居路由器
……
邻居路由器
网络掩码:
发送呼叫报文的接口的子网掩码。
如果这一掩码和呼叫报文接收接口的子网掩码不匹配,则该呼叫报文不能被接收。
这样可以确保共享同一网络的路由器才能成为邻居关系。
HelloInterval:
在接口上发送呼叫报文的时间间隔,以秒为单位。
如果两路由器不具有相同的呼叫周期,则不能成为邻居关系。
选项:
包含5个分配位,在RFC2178中对E位已经做了说明,它确定如何传播外部链路状态宣告。
在存根区,Hello报文要将该位设置为0,不能接收设置为1的Hello报文。
使邻居具有兼容性。
因兼容性问题,路由器可以放弃邻居关系。
路由器优先级:
该选项影响指定路由器DR的选取。
值0表示该路由器不能被选为DR。
如果是其它值,则具有最高优先级的路由器将成为DR。
缺省值为1,如果所有路由器都使用该缺省值年,则具有最高IP地址的路由器将被选为DR。
RouterDeadInterval:
该参数(以秒为单位)用于确定邻居是否还处于活动状态。
如果在由RouterDeadInterval指定的秒数内没有从已建立的邻居处收到呼叫报文,那么,邻居被宣布为故障状态。
如果Hello报文中的RouterDeadInterval与接收端口所设置的RouterDeadInterval值不相同,则丢弃该报文,确保两邻居路由器具有相同的参数。
指定路由器(后援指定路由器):
广播网络或NBMA网络上DR(BDR)接口的IP地址。
在DR(BDR)的选举过程中,这个值可能是关于DR(BDR)的起源路由器的设想,而不是最终的DR(BDR)。
如果因为DR(BDR)没有选举出来或者因为是对等网络,不存在DR(BDR)该值应该取值为0.0.0.0。
邻居路由器:
路由器在这个网络上所拥有的邻居路由器的列表,用路由器ID表示。
如果在由RouterDeadInterval指定的时间内未能从某个邻居接收到Hello呼叫包,那么,这个邻居应该从此列表中除去。
3.2数据库描述包
数据库描述包(DatabaseDescriptionpacket,DD)是2型OSPF包。
在形成紧邻过程中的路由器之间交换数据库描述包,且由它来描述链路状态数据库,达到邻居路由器间链路状态数据库的完全同步。
根据接口数和网络数,可能需要不止一个数据库描述包,来传输整个链路状态数据库。
在交换过程中,所涉及到的路由器要建立主从关系。
主路由器发送本路由器的数据库描述包,而从路由器通过使用主路由器发送来的数据库描述序列号认可所接收到的数据库描述包,并将本路由器的LSA头部列表发送给主路由器,从而在主从路由器间判断链路状态数据库是否完全匹配,若有不匹配的LSA头部,则应发送链路状态请求报文,并以更新报文格式给予响应,获得最新LSA的全部信息。
数据库描述包要封装在类型为2的OSPF报文头后面,其具体格式如下:
版本号=2
包类型=2
包长度
路由器ID
区域ID
校验和
认证类型
身份验证
身份验证
接口MTU
选项
00000
I
M
MS
数据库描述序列号
LSA首部
……
LSA首部
接口MTU:
指示通过该接口可发送的最大IP包长度。
当通过虚拟链路发送时,这个域设置为0。
选项:
显示路由器的能力,使路由器不向没有能力的邻居发送LSAs。
I位:
是Init位,要发送数据库序列中的第一个包,应设置为1。
随后的包要设置为0。
M位:
若设置为1,则表示序列中还有更多的数据库描述包将要发送出去。
若置为0,则表示数据库描述包已发送完毕。
MS位:
主从位,在数据库描述包交换期间,1表示路由器是主路由器,而0表示路由器是从路由器。
数据库描述序列号:
用于数据库的同步处理,确保所有的数据库描述包全部被接收到。
主路由器在发送第一个数据描述包时,应将数据库描述序列号设置为一个独特的初始值,随后序列号逐渐递增。
LSA首部:
这是一个LSA首部列表,由本路由器的链路状态数据库的LSAs的头部组成这个LSA首部列表。
这些头部有足够的信息来描述LSA和LSA的实例。
3.3链路状态请求包
链路状态请求包是3型OSPF包。
当两个路由器交换数据描述包的过程完成后,路由器可检测链路状态数据库部分是否有不一致或过时的LSA。
此时,路由器可向邻居请求新一些的数据库描述包,以达到LSAs的完全同步。
其格式为:
版本号=2
包类型=3
包长度
路由器ID
区域ID
校验和
认证类型
身份验证
身份验证
LS类型
链路状态ID
宣告路由器
……
LS类型
链路状态ID
宣告路由器
LS类型:
链路状态类型,有路由器LSA、网络LSA、汇总LSA、汇总LSA(ASBR)、AS-externalLSA等5种类型的LSA,分别取值1~5。
链路状态ID:
取值取决于LS类型,具体的取值见LSA首部定义。
宣告路由器:
产生LSA的路由器ID。
3.4链路状态更新包
链路状态更新包是4型的OSPF包,用于实现LSA的洪泛,也用于对链路状态请求包的响应。
每个链路状态更新包包含一个或多个LSA,而所发送的每个更新包要通过链路状态认可包来确认认可,未收到确认包,应对所发送的LSA定时重发,以确保洪泛过程的可靠性。
具体格式如下:
版本号=2
包类型=4
包长度
路由器ID
区域ID
校验和
认证类型
身份验证
身份验证
LSA的个数
LSAs
LSA的个数:
定义整个更新包中包含多少个LSA,直到OSPF包总长度达到1500字节。
LSAs:
由一系列LSA 组成一个列表。
3.5链路状态确认包
链路状态确认包是5型OSPF包,该包可以确保LSA洪泛的可靠性。
路由器从紧邻接收到LSA后,必须要用链路状态确认包给予明确的确认应答。
LSA的确认是通过链路状态确认包中的LSA首部实现的。
一个确认包可以同时对多个LSA进行确认。
这些包发送到以下三个地址之一:
多点传送地址AllDRouters、多点传送地址AllDSPFRouters、单点传送地址。
具体格式如下:
版本号=2
包类型=5
包长度
路由器ID
区域ID
校验和
认证类型
身份验证
身份验证
LSAs的首部
LSAs的首部:
由一系列LSA的首部组成一个列表。
4.链路状态LSA格式
路由器可生成的链路状态信息有以下5种类型:
类型1:
路由器LSA,确定路由器的互连方式。
由每个路由器产生,用来描述路由器的链路或接口的状态及费用。
该LSA只能在本区域内洪泛;
类型2:
网络LSA,确定网络的互连方式。
由DR产生,用于描述DR所连的多点访问网络和所连的路由器(包括DR自己),也在本区域内洪泛;
类型3:
ABR汇总LSA,用于传输已经被集成为单一网络信息的网络。
由ABR路由器产生,将某区域上的汇总目的地址通告给另一个区域。
事实上,ABR通过这些LSAs将自己所能到达的目的地(要汇总)通告给所连区域的各个区域内路由器InternalRouters;ABR也要将所连区域的目的地通告给骨干区域。
当ABR产生汇总LSA时,同时要通告从ABR自己到目的地的费用,当ABR到目的地有多条路由时,应取费用最低的路由。
同样,当ABR收到从另一ABR发来的同一条汇总LSA时,也要取费用低的LSA,将其通告给非骨干区;当路由器从ABR收到一条汇总LSA时,用简单的距离——矢量法而不用SPF来计算本路由器到目的地的费用和路由:
总费用包括本路由器到ABR的费用和LSA中所指明的费用。
在ABR上,将某区域的有关目标网络通告给骨干区时,要对目标网络进行路由聚合,将一系列子网聚合成一个超网后,通告给骨干网络。
聚合时,其超网的费用为子网中的最大费用。
类型4:
ASBR汇总LSA,用于传输已经被集成为单一网络信息的网络。
也由ABR产生,与类型为3的汇总LSA相似,但本LSA是ABR将ASBR路由器主机为目的地的一个链路信息,描述本ABR到达ASBR的费用;
类型5:
外部路由信息AS-external-LSA,由其它协议传入的外部路由信息。
由ASBR产生,将外部系统的路由信息在本系统的所有OSPF域内洪泛;
每个LSA包都有一个由20个字节组成的首部,该首部用于封装LSA包。
一般许多LSA在一个OSPF报文中被路由器交换,而LSA首部的功能唯一地标识每个LSA包。
同时LSA首部还用于数据描述OSPF报文和链路状态确认OSPF报文中。
其格式如下:
链路状态时间
选项
链路状态类型
链路状态ID
宣告路由器ID
链路状态序列号
和校验
长度
在该首部中,选项、链路状态类型、链路状态ID、宣告路由器ID等字段描述LSA包的特征,而链路状态时间、链路状态序列号确定该LSA是否是最新的。
链路状态时间:
生成LSA的路由器将LS时域初始化为0,在洪泛过程中,每经过一个路由器,要按InfTransDelay的量增加,这个量表示传输LSA到下一个跳跃所需要的时间。
当该时间达到所设定的MaxAge参数时,要撤消该LSA。
选项:
指示路由器的能力。
目前使用的唯一一位是E位(外部指示),对存根区域,它是0,对所有其它所有区域,它是1。
链路状态类型:
描述LSA包的类型,取值为1~5。
链路状态ID:
取决于LSA包类型,具体取值如下:
LS类型
链路状态ID值
1
生成LSA的路由器ID
2
这个网络的DR的IP接口地址
3
ABR要通告的某区域内某一目标网络的IP地址
4
ABR要通告的某一ASBR的路由器ID
5
ASBR要通告的某一外部自治系统某一目标网络的IP地址
宣告路由器ID:
产生LSA的路由器ID。
链路状态序列号:
用于识别LSA包是否是一个最新包。
路由器每生成一个新的LSA时,将该序列号加1。
和校验:
检测LSA包的正确性。
长度:
LSA包括其首部的长度。
LSA头中的链路类型、链路状态ID和宣告路由器ID是一个LSA的唯一标志。
一个LSA将有多个实例,不同的实例通过LS的序列号、LS的校验和及LS的Age字段来描述。
因此,必须要决定其实例是否是最近的,这要通过检查LS的序列号、LS的校验和及LS的Age字段内容。
4.1路由器链路状态宣告
链路状态类型为1的LSA包是一种路由器链路状态宣告包,其链路状态ID就是路由器的OSPFID。
路由器为每个有活动OSPF接口的区域生成一个路由器LSA。
包含在路由器LSA中的信息是路由器接口在该区域的状态和费用,该LSA仅在本区域内传播。
进入一个区域的所有路由器接口必须在一个路由器LSA中说明。
在路由器LSA中,将通告路由器的各条链路或接口的状态和费用。
链路状态ID就是产生该LSA的路由器ID。
路由器LSA的具体格式如下:
链路状态时间
选项
链路状态类型=1
链路状态ID
宣告路由器ID
链路状态序列号
和校验
长度
00000VEB
0
链路个数
链路ID
链路数据
链路类型
#TOS
费用度量
TOS
0
TOS度量值
…….
链路ID
链路数据
链路类型
#TOS
费用度量
TOS
0
TOS度量值
VEB:
用于确定路由器可能有的链路的类型。
V位显示路由器是虚拟链路的端点。
如果路由器是ASBR,那么将设置E位;如果路由器是ABR,那么将设置B位。
链路个数:
可以同时携带若干个链路信息。
每个链路包括链路ID、链路数据、链路类型、#TOS、费用度量、TOS、TOS度量值等信息,用于描述路由器某接口的链路信息。
链路类型:
有4种链路类型。
链路类型将决定其它字段的取值。
类型1:
对等连接到另一个路由器
类型2:
到多点访问网络的传输网的连接
类型3:
到存根网的连接,某主机地址也可认为是一个特殊的存根网络,网络号即为主机地址,掩码为225.225.225.225。
类型4:
虚拟连接
链路ID:
链路ID描述路由器接口或链路所连接的对象。
链路ID一般等于邻居路由器LSA头中的链路状态ID。
取值及含义要取决于具体的链路类型。
对链路类型1,为邻居路由器的ID。
对链路类型2,为DR接口的IP地址。
对链路类型3,为IP网络/子网号。
对链路类型4,为邻居路由器的ID。
链路数据:
链路数据也将取决于具体的链路类型。
如果路由器与存根网络相连,那么取值为这个网络的IP地址掩码。
对其他类型的链路,则是路由器分配给该链路接口的IP地址。
链路数据在生成IP路由表产生下一跳时要用。
#TOS:
链路服务类型号。
在2328中,该TOS已不再使用。
费用度量:
链路的费用度量。
TOS和TOS度量:
IP的服务类型与服务度量值。
4.2网络链路状态宣告
链路状态类型为2的LSA包是网络链路状态宣告,该LSA由DR产生和创建。
一个网络LSA将通告该路由器上某一多点访问网络和所连接的路由器信息,该LSA也只能在本区域内扩散。
链路状态ID标识DR到这个区域或网络的接口IP地址,费用度量不再需要,因为路由器直接连接到网络上,费用必为0。
具体格式如下:
链路状态时间
选项
链路状态类型=2
链路状态ID
宣告路由器ID
链路状态序列号
和校验
长度
网络掩码
连接的路由器ID
连接的路由器ID
……
连接的路由器ID
网络掩码:
标识该多点访问网络的网络掩码。
连接的路由器:
标识连接到该网络并且与DR成紧邻关系的路由器ID,包括DR本身路由器ID。
所连紧邻路由器的数目可由LSA头中的长度决定。
4.3网络和ASBR汇总链路状态通告
链路状态类型为3或4的LSA是网络和ASBR汇总链路状态宣告,两者都由区域边界路由器ABR生成,实现区域间目标链路的描述,它只能在同一个区域内洪泛。
3型汇总LSA有IP地址目标,链路状态ID就是目标IP网络号,以描述ABR到该目标网络的费用,供其它区域的路由器计算到该汇总网络的费用(总费用应为:
本路由器----ABR----汇总的网络地址)。
4型汇总LSA以一个自治系统边界路由器ASBR为其目标,而链路状态ID就是该ASBR的OSPF路由器ID,以描述ABR到ASBR之间的费用,它主要用于计算最佳的外部路由(某外部路由,对任一路由器来说,其总费用为本路由器----ABR----ASBR----外部路由费用的和)。
链路状态ID是这两种类型LSA包之间的唯一区别。
3型LSA还用于说明进入存根区域的默认路由,此时链路状态ID和网络掩码应设置为0.0.0.0,表示整个存根区可以通过该ABR到达外部任意路由。
对于3型LSA,网络掩码就是目标网络的IP地址掩码,而对4型LSA,应该设置为0。
费用度量值和路由器LSA相同,是ABR到该目标的费用。
TOS和TOS度量是IP的服务类型和度量值。
LSA的具体格式如下:
链路状态时间
选项
链路状态类型=3或4
链路状态ID
宣告路由器ID
链路状态序列号
和校验
长度
网络掩码
0
费用度量值
TOS
TOS度量值
4.4外部链路状态AS-externalLSA通告
5型LSA是AS-externalLSA,由ASBR产生,它被用于说明自治系统以外的网络或路由,在整个自治系统(非存根区除外)内不加改变地洪泛,与路由器的链路状态数据库相独立地保存。
链路状态ID域为目标网络的IP网络号,网络掩码为目的网络的掩码。
在As-externalLSA中可以通告一条缺省路由,这时,链路状态ID为0.0.0.0,网络掩码也为0.0.0.0。
E位用于指示外部路由是1型(E=0)还是2型(E=1),1型外部路由的度量值与内部OSPF路由域的度量具有相同的度量单位,2型外部路由的度量值大于内部OSPF路由域的度量。
转发地址是指到达该外部目标网络的下一跳地址,一般是ASBR路由器,此时转发地址为0.0.0.0,表示将报文转发给产生该LSA的ASBR,但如果运行BGP协议得到外部路由的ASBR与另一自治系统的ASBR间的网络是一个多点访问网络,则转发地址应设置为该网络地址,这样可省略ASBR这个中间一跳。
在该LSA中,由产生该LSA的ASBR路由器负责对该外部路由做上标志tag,以便在AS