OSPF通讯协议.docx
《OSPF通讯协议.docx》由会员分享,可在线阅读,更多相关《OSPF通讯协议.docx(10页珍藏版)》请在冰豆网上搜索。
OSPF通讯协议
OSPF协议
目录
1.概述3
2.SPF算法3
3.OSPF协议原理5
3.1自治系统的分区5
3.2区域间路由6
3.3Stub区和自治系统外路由6
3.4DR和BDR7
4.OSPF报文7
4.1OSPF协议报文7
4.2OSPF包承载的内容9
5.OSPF协议的运行10
5.1Hello协议的运行10
5.2DR和BDR的产生10
5.3链路状态数据库的同步11
5.4路由表的产生和查找11
1.概述
OSPF协议是由Internet网络工程部(IETF)开发的一种内部网关协议(IGP),即网关和路由器都在一个自治系统内部。
OSPF是一个链路状态协议或最短路径优先(SPF)协议。
虽然该协议依赖于IP环境以外的一些技术,但该协议专用于IP,而且还包括子网编址的功能。
该协议根据IP数据报中的目的IP地址来进行路由选择,一旦决定了如何为一个IP数据报选择路径,就将数据报发往所选择的路径中,不需要额外的包头,即不存在额外的封装。
该方法与许多网络不同,因为他们使用某种类型的内部网络报头对UDP进行封装以控制子网中的路由选择协议。
另外OSPF可以在很短的时间里使路由选择表收敛。
OSPF还能够防止出现回路,这种能力对于网状网络或使用多个网桥连接的不同局域网是非常重要的。
在运行OSPF的每一个路由器中都维护一个描述自治系统拓扑结构的统一的数据库,该数据库由每一个路由器的局部状态信息(该路由器可用的接口信息、邻居信息)、路由器相连的网络状态信息(该网络所连接的路由器)、外部状态信息(该自治系统的外部路由信息)等组成。
每一个路由器在自治系统范围内扩散相应的状态信息。
所有的路由器并行运行同样的算法,根据该路由器的拓扑数据库构造出以它自己为根节点的最短路径树,该最短路径树的叶子节点是自治系统内部的其它路由器。
当到达同一目的路由器存在多条相同代价的路由时,OSPF能够实现在多条路径上分配流量。
RFC2178中删除了OSPF的TOS功能,但是为了保证和以前版本的兼容性,在各个链路状态宣告中还保留了TOS项目。
2.SPF算法
与V-D算法相比较的一组算法叫作“链接-状态”(link-state)算法,又叫最短路径优先或SPF(ShortestPathFirst)算法。
按照SPF算法的要求,网关寻径表依赖于一张表示整个Internet网中网关与网络拓扑结构的图。
在这张图中,节点表示网关,边表示连接网关的网络(link),我们称之为L-S图。
在信息一致的情况下,所有网关的L-S图应该是完全相同的。
各网关的寻径表是根据相同的L-S图计算出来的。
L-S算法包括三个步骤:
(1)各个网关主动测试与所有相邻网关之间的状态。
为此,网关周期性地向相邻网关发出Hello报文,询问相邻网关是否能够访问。
假如相邻网关做出反应,说明链接为“开”(UP),否则为“关”(DOWN),链接-状态的取名即出于此。
(2)各网关周期性地广播其L-S信息。
这里的“广播”是真正意义的广播,不象V-D算法那样只向相邻网关发送V-D报文,而是向所有参加SPF算法的网关发送L-S报文。
(3)网关收到L-S报文后,利用它刷新网络拓扑图,将相应链接改为“开”或“关”状态。
假如L-S发生变化,网关立即利用最短路径算法,根据L-S图重新计算本地路径。
在实际应用中有好几种最短路径选择算法,大多数是以A算法(algorithmA)为基础。
该算法已作为互连网络SPF协议的模型,并且多年来被用于优化网络设计和网络的拓扑结构。
各节点用自己拥有的统一的描述自治系统拓扑结构的数据库,以自己为根,建立一个路径选择的寻径表。
在图1中,节点A是源节点,节点J是目的节点。
其具体的步骤如下:
(1)在图1中,网络中的每条路径有一个权值,该权值是根据某一标准(如考虑距离、时延、队列长度等)得出的;
(2)为每个节点标上一条已知路径从源端到该节点需要的最小代价。
最初不知道任何路径,所以每个节点的标号为无穷大;
(3)为每个节点检测它周围有哪些相邻的节点,源节点是第一个被考虑的节点,并且变为工作节点;
(4)为工作节点的每个相邻的节点分配一个最小代价标号。
如果发现一条从该节点到源节点的更短的路径,则修改标号。
在OSPF中,当链路状态报文广播到所有其他节点时,会发生这种情况(即因发现更短的路径而修改标号);
(5)在给相邻节点分配了标号以后,检测网络中的其他节点,如果某个已分配了标号的节点拥有较小的标号值,则它的标号变为永久标号,该节点变为工作节点;
(6)如果某节点的标号与到它的某个相邻节点路径上的权值之和小于该相邻节点的标号,在改变该相邻节点的标号,因为发现了一条更短的路径;
(7)选择另一个工作节点,重复上述过程直到穷尽所有的可能。
最后的每个节点的标号就给出了源节点和目的节点之间的一条端到端的代价最低的路径。
图1A算法的应用
经过了上面的计算可以形成图2所示的路由选择拓扑图(即最短距离树,又称最优树):
图2路由器A的路由选择拓扑图
3.OSPF协议原理
3.1自治系统的分区
OSPF允许在一个自治系统里划分区域的做法,相邻的网络和它们相连的路由器组成一个区域(Area)。
每一个区域有该区域自己拓扑数据库,该数据库对于外部的区域是不可见的,每个区域内部路由器的链路状态信息数据库实际上只包含着该区域内的链路状态信息,他们也不能详细地知道外部的链接情况,在同一个区域内的路由器拥有同样的拓扑数据库。
和多个区域相连的路由器拥有多个区域的链路状态信息库。
划分区域的方法减少了链路状态信息数据库的大小、并极大地减少了路由器间交换状态信息的数量。
如图3所示。
图3把自治系统分成多个OSPF区域
在多于一个区域的自治系统中,OSPF规定必须有一个骨干区(backbone)-area0,骨干区是OSPF的中枢区域,它与其他区域通过区域边界路由器(ABR)相连。
区域边界路由器通过骨干区进行区域路由信息的交换。
为了达到一个区域的各个路由器保持相同的链路状态信息库,这就要求骨干区是相连的,但是并不要求它们是物理连接的。
在实际的环境中,如果它们在物理上是断开的,这时可以通过建立虚链路(VirtualLink)的方法保证骨干区域的连续性。
虚链将属于骨干区并且到一个非骨干区都有接口的两个ABR连接起来,虚链本身属于骨干区,OSPF将通过虚链连接的两个路由器看作是通过未编号的点对点链路(unnumberedpoint-to-point)连接。
3.2区域间路由
当两个非骨干区域间路由IP包的时,必须通过骨干区。
IP包经过的路径分为三个部分:
源区域内路径(从源端到ABR)、骨干路径(源和目的区域间的骨干区路径)、目的端区域内路径(目的区域的ABR到目的路由器的路径)。
从另一个观点来看,一个自治系统就象一个以骨干区作为Hub,各个非骨干区域连到Hub上的星型结构图。
各个区域边界路由器在骨干区上进行路由信息的交换,发布本区域的路由信息,同时收到其他ABR发布的信息,传到本区域进行链路状态的更新以形成最新的路由表。
3.3Stub区和自治系统外路由
在一个OSPF自治系统中有这样一种特殊的区域――存根区域(Stub区域),在这个区域中只有一个外部出口,该区域不允许外部的非OSPF的路由信息进入。
到自治系统外的包只能依靠缺省路由。
存根区域的边界路由器必须在路由概要里向区域宣告这个缺省路由,但是不能超过这个存根区域。
缺省路由的使用可以减少链路状态信息库的大小。
对于该自治系统外部路由信息,如BGP产生的路由信息,可以通过该自治系统的区域边界路由器(ASBR)透明地扩散到整个自治系统的各个区域中,使得该自治系统内部的每一台路由器都能够获得外部的路由信息。
但是该信息不能扩散到存根区域。
这样自治系统内的路由器可以通过ASBR路由包到自治系统外的目标。
3.4DR和BDR
在自治系统内的每个广播和非广播多点访问(NBMA)网络里,都有一个指定路由器(DR-DesignatedRouter)和一个备份指定路由器(BDR-BackupDesignatedRouter),它们是通过Hello协议选举产生的。
DR的主要功能是:
(1)产生代表本网络的网络路由宣告,这个宣告列出了连到该网络有哪些路由器,其中包括DR自己;
(2)DR同本网络的所有其他的路由器建立一种星型的邻接关系,这种邻接关系是用来交换各个路由器的链路状态信息,从而同步链路状态信息库。
DR在路由器的链路状态信息库的同步上起到核心的作用。
另一个比较重要的路由器是BDR,BDR也和该网络中的其它路由器建立邻接关系。
因此,BDR的设立是为了保证当DR发生故障时尽快接替DR的工作,而不至于出现由于需重新选举DR和重新构筑拓扑数据库而产生大范围的数据库震荡。
当DR存在的情况下,BDR不生成网络链路广播消息。
在DR、BDR的选举后,该网络内其它路由器向DR、BDR发送链路状态信息,并经DR转发到和DR建立邻接关系的其它路由器。
当链路状态信息交换完毕时,DR和其它路由器的邻接关系进入了稳定态,区域范围内统一的拓扑(链路状态)数据库也就建立了,每个路由器以该数据库为基础,采用SPF算法计算出各个路由器的路由表,这样就可以进行路由转发了。
4.OSPF报文
4.1OSPF协议报文
OSPF使用五种类型的路由协议包,在各个路由器间进行交换信息,如表1所示。
每种协议包都包含24字节的OSPF协议包的首部,如图4所示。
Hello协议用于寻找和维护路由器所连网络上的邻居关系。
通过周期性地发出Hello包,来确定和维护邻居路由器接口是否仍在起作用。
Hello包被发送到网络上的每个活动的路由器接口。
在广播和非广播的多点访问的网络上,DR和BDR的选举也是通过Hello包来完成的。
在不同的物理网络上,Hello包的目的地址是不同的;在点到点和广播网络上,其目的地址是AllSPFRouter(224.0.0.5);在虚链路上是单播,也就是从虚链路的源端直接发送到链路的另一端;而在点到多点的网络上,分离的Hello包分别发送到相连的每一个邻居;在非广播的多点访问网络上,Hello包的发送要看各个路由器的配置信息。
表1OSPF路由协议包类型
包类型
目的
Hello协议包
发现和维护邻居
数据库描述
汇总数据库内容
链路状态请求
数据库下载
链路状态更新
数据库上载
链路状态确认
扩散确认
图4OSPF协议包的首部
数据库描述包是类型往为2的OSPF包,在形成邻接过程中的路由器之间交换数据库描述包,且它们描述链路状态数据库。
根据接口数和网络数,可能不只一个数据库描述包来传输整个链路状态数据库。
在交换的过程中所涉及的路由器建立主从关系。
主路由器发送包,而从路由器通过使用数据库描述(DatabaseDescription-DD)序列号认可接收到的包。
接口MTU域指示通过该接口可发送的最大IP包长度。
当通过虚链路发送包时,这个域设置为0。
选项域包含3位,用于显示路由器的能力。
I位是Init位,对数据库序列中的第一个包,设置为1。
M位设置为1,表示在序列中还有更多的数据库描述包。
MS位是主从位,在数据库描述包交换期间,1表示路由器是主路由器,而0表示路由器是从路由器。
包的其余部分是一个或多个LSA,如图5所示。
图5数据库描述包格式
链路状态请求包是类型为3的OSPF包,它们的格式如图6所示。
当两个路由器完成交换数据库描述包时,路由器可检测链路状态数据库是否过时。
当这种情况发生时,路由器可请求新一些的数据库描述包。
图6路由状态请求包格式
链路状态更新包是类型为4的OSPF包,它们用于实现LSA的传播。
链路状态更新包格式显示在图7中。
每个链路状态更新包包含一个或多个LSA,而每个包通过使用