雏鹰部落

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7677|回复: 11

[讨论/求助] 请问CCNA中单区域OSPF的工作原理

[复制链接]
发表于 2008-10-26 09:45:03 | 显示全部楼层 |阅读模式
RT:请问OSPF的工作原来,是如何按步骤建立路由表的??
发表于 2008-10-26 12:06:24 | 显示全部楼层
OSPF协议工作过程:
  
  1、宣告OSPF的路由器从所有启动OSPF协议的接口上发出HELLO报文,两台ROUTER共享一条公共数据链路,并且能够相互成功协商各自HELLO报文中所指定的参数。那么它们就成为邻居(Neighbor)

  2、邻接关系(Adjacency)建立是交换HELLO报文信息的路由器类型和交换HELLO报文信息的网络类型决定的

  3、每一台ROUTER都会在所有形成邻接关系的邻居之间发链路通状态通告(Link State Advertisement,LSA),LSA 主要是通告描述了路由器所有的链路信息(OR 接口)和链路状态信息。由于链状态信息的多样性。OSPF协议定义了许多LSA类型

  4、每一个收到从邻居ROUTER发出的LSA通告的ROUTER,都会把这些LSA通告记录在它的链路状态数据库当中,并且发送一份LSA的拷贝给该ROUTER的其它所有邻居

  5、通过LSA扩散到整个区域,所有的ROURER都会形成同样的链路状态数据库

  6、当所有的ROUTER的数据库都完全相同时,每一台路由器都将以它本身为根,使用SPF算法去计算一个无环路的拓朴图,来描述它所知道的到达每一个目的地的最短路径(最小的路径代价),这个拓朴图就是SPF算法树

  7、每一台路由器都将从SPF算法树中构建出自己的路由选择表
  
  说明:当所有的链路状态信息扩散到一个区域内的所有路由器上---也就是说,链路状态数据库同步了,并且成功创建路由选择表时,OSPF协议就变成了一个“安静”的协议。邻居之前的交换的HELLO报文称为KEEPALIVE(保持)报文。并且第隔30MIN重传一次LSA。
发表于 2008-10-26 12:11:09 | 显示全部楼层
OSPF基本工作原理
随着Internet技术在全球范围内的飞速发展,IP网络作为一种最有前景的网络技术,受到了人们的普遍关注。而作为IP网络生存、运作、组织的核心——IP路由技术提供了解决IP网络动态可变性、实时性、QoS等关键技术的一种可能。在众多的路由技术中,OSPF协议已成为目前Internet广域网和Intranet企业网采用最多、应用最广泛的路由技术之一。本文在分析OSPF动态路由协议基本工作原理的基础上,提出了Dijkstra算法和OSPF路由表计算的实现方法。
 
  目前应用较多的路由协议有RIP和OSPF,它们同属于内部网关协议,但RIP基于距离矢量算法,而OSPF基于链路状态的最短路径优先算法。它们在网络中利用的传输技术也不同。
 
  RIP是利用UDP的520号端口进行传输,实现中利用套接口编程,而OSPF则直接在IP上进行传输,它的协议号为89.在RIP当中,所有的路由都由跳数来描述,到达目的地的路由最大不超过16跳,且只保留唯一的一条路由,这就限制了RIP的服务半径,即其只适用于小型的简单网络。同时,运行RIP的路由器需要定期地(一般30s)将自己的路由表广播到网络当中,达到对网络拓扑的聚合,这样不但聚合的速度慢而且极容易引起广播风暴、累加到无穷、路由环致命等问题。为此,OSPF应运而生。OSPF是基于链路状态的路由协议,它克服了RIP的许多缺陷:
 
  第一,OSPF不再采用跳数的概念,而是根据接口的吞吐率、拥塞状况、往返时间、可靠性等实际链路的负载能力定出路由的代价,同时选择最短、最优路由并允许保持到达同一目标地址的多条路由,从而平衡网络负荷;
 
  第二,OSPF支持不同服务类型的不同代价,从而实现不同QoS的路由服务;
 
  第三,OSPF路由器不再交换路由表,而是同步各路由器对网络状态的认识,即链路状态数据库,然后通过Dijkstra最短路径算法计算出网络中各目的地址的最优路由。这样OSPF路由器间不需要定期地交换大量数据,而只是保持着一种连接,一旦有链路状态发生变化时,才通过组播方式对这一变化做出反应,这样不但减轻了不参与系统的负荷而且达到了对网络拓扑的快速聚会。而这些正是OSPF强大生命力和应用潜力的根本所在。
 
  一、OSPF工作原理分析
 
  OSPF是一种分层次的路由协议,其层次中最大的实体是AS(自治系统),即遵循共同路由策略管理下的一部分网络实体。在每个AS中,将网络划分为不同的区域。每个区域都有自己特定的标识号。对于主干(backbone)区域,负责在区域之间分发链路状态信息。这种分层次的网络结构是根据OSPF的实际提出来的。当网络中自治系统非常大时,网络拓扑数据库的内容就更多,所以如果不分层次的话,一方面容易造成数据库溢出,另一方面当网络中某一链路状态发生变化时,会引起整个网络中每个节点都重新计算一遍自己的路由表,既浪费资源与时间,又会影响路由协议的性能(如聚合速度、稳定性、灵活性等)。因此,需要把自治系统划分为多个域,每个域内部维持本域一张唯一的拓扑结构图,且各域根据自己的拓扑图各自计算路由,域边界路由器把各个域的内部路由总结后在域间扩散。这样,当网络中的某条链路状态发生变化时,此链路所在的域中的每个路由器重新计算本域路由表,而其它域中路由器只需修改其路由表中的相应条目而无须重新计算整个路由表,节省了计算路由表的时间。
 
  OSPF由两个互相关联的主要部分组成:“呼叫”协议和“可靠泛洪”机制。呼叫协议检测邻居并维护邻接关系,可靠泛洪算法可以确保统一域中的所有的OSPF路由器始终具有一致的链路状态数据库,而该数据库构成了对域的网络拓扑和链路状态的映射。链路状态数据库中每个条目称为LSA(链路状态通告),共有5种不同类型的LSA,路由器间交换信息时就是交换这些LSA.每个路由器都维护一个用于跟踪网络链路状态的数据库,然后各路由器的路由选择就是基于链路状态,通过Dijkastra算法建立起来最短路径树,用该树跟踪系统中的每个目标的最短路径。最后再通过计算域间路由、自治系统外部路由确定完整的路由表。与此同时,OSPF动态监视网络状态,一旦发生变化则迅速扩散达到对网络拓扑的快速聚合,从而确定出新的网络路由表。
 
  OSPF的设计实现要涉及到指定路由器、备份指定路由器的选举、协议包的接收、发送、泛洪机制、路由表计算等一系列问题。本文仅就Dijkstra算法与路由表的计算进行讨论。
 
  二、Dijkstra算法
 
  Dijkstra算法是路由表计算的依据,通过Dijkstra算法可以得到有关网络节点的最短路径树,然后由最短路径优先树得到路由表。
 
  1.Dijkstra算法的描述如下:
 
  (1)初始化集合E,使之只包含源节点S,并初始化集合R,使之包含所有其它节点。初始化路径列O,使其包含一段从S起始的路径。这些路径的长度值等于相应链路的量度值,并以递增顺序排列列表O.
 
  (2)若列表O为空,或者O中第1个路径长度为无穷大,则将R中所有剩余节点标注为不可达,并终止算法。
 
  (3)首先寻找列表O中的最短路径P,从O中删除P.设V为P的最终节点。若V已在集合E中,继续执行步骤2.否则,P为通往V的最短路径。将V从R移至E.
 
  (4)建立一个与P相连并从V开始的所有链路构成的侯选路径集合。这些路径的长度是P的长度加上与P相连的长度。将这些新的链路插入有序表O中,并放置在其长度所对应的等级上。继续执行步骤2.
 
  2.Dijkstra算法举例:
 
  下面我们以路由器A为例,来说明最短路径树的建立过程:
 
  (1)路由器A找到了路由器B、C,将它们列入候选列表{B:1;C:2}.
 
  (2)从候选列表中找出最小代价项B,将B加入最短路径树并从候选列表中删除。接着从B开始寻找,找到了D,将其放入候选列表{C:2;D:2}.
 
  (3)从列表中找出C,再由C又找到了D.但此时D的代价为4,所以不再加入候选列表。最后将D加入到最短路径树。此时候选列表为空,完成了最短路径树的计算。
 
  三、OSPF路由表的计算与实现
 
  有关路由表的计算是OSPF的核心内容,它是动态生成路由器内核路由表的基础。在路由表条目中,应包括有目标地址、目标地址类型、链路的代价、链路的存活时间、链路的类型以及下一跳等内容。关于整个计算的过程,主要由以下五个步骤来完成:
 
  (1)保存当前路由表,当前存在的路由表为无效的,必须从头开始重新建立路由表;
 
  (2)域内路由的计算,通过Dijkstra算法建立最短路径树,从而计算域内路由;
 
  (3)域间路由的计算,通过检查Summary-LSA来计算域间路由,若该路由器连到多个域,则只检查主干域的Summary-LSA;
 
  (4)查看Summary-LSA:在连到一个或多个传输域的域边界路由器中,通过检查该域内的Summary-LSA来检查是否有比第(2)(3)步更好的路径;
 
  (5)AS外部路由的计算,通过查看AS-External-LSA来计算目的地在AS外的路由。
 
  通过以上步骤,OSPF生成了路由表。但这里的路由表还不同于路由器中实现路由转发功能时用到的内核路由表,它只是OSPF本身的内部路由表。因此,完成上述工作后,往往还要通过路由增强功能与内核路由表交互,从而实现多种路由协议的学习。
 
  OPSF作为一种重要的内部网关协协议的普遍应用,极大地增强了网络的可扩展性和稳定性,同时也反映出了动态路由协议的强大功能。但是,在有关OSPF协议的研究、实现中尚存在一些问题,如数据库的溢出、度量的刻画、以及MTU协商等等。同时,在IPv6中,OSPFv3基于链路的处理机制、IP地址的变化、泛洪范围的增加、包格式、LSA的变化以及邻居的识别等技术都将是我们共同探讨的课题。
 楼主| 发表于 2008-10-26 14:54:46 | 显示全部楼层
我想问1下,是每台ROUTER向它的邻居发LSA,然后,每台ROUTER都形成相同的LSDB还是先推举一个DR和BDR,然后每台ROUTER向DR发LSA形成LSDB,DR再向所有ROUTER发送LSA来建立相同的LSDB啊??
发表于 2008-10-26 16:50:16 | 显示全部楼层
原帖由 chezizhe 于 2008-10-26 14:54 发表
我想问一下,是每台ROUTER向它的邻居发LSA,然后,每台ROUTER都形成相同的LSDB还是先推举一个DR和BDR,然后每台ROUTER向DR发LSA形成LSDB,DR再向所有ROUTER发送LSA来建立相同的LSDB啊??


路由器先通过Hello包来建立邻接关系,
然后才开始交换LSA,
最后实现LSDB的同步。

你问的这个问题,要根据不同的网络类型来看。

如果是PTP和PTMP类型,不需要选举DR,路由器间建立邻接关系后,直接交换LSA包,并确认已收到邻接路由器的LSA后,邻居路由器间就完成了LSDB的同步。

但如果是BMA和NBMA类型,先通过Hello包选举出DR/BDR,其他路由器只和DR/BDR建立邻接关系,且只将LSA通告给它们。DR收到所有邻居的更新后,再转发给其他非DR路由器,这样每台Router就包含了完整的链路信息,实现LSDB同步。
 楼主| 发表于 2008-10-26 17:13:19 | 显示全部楼层
哦哦,原来这样,明白了,多谢多谢!!太感激了!!
发表于 2008-10-26 22:37:49 | 显示全部楼层
写得很详细哦。呵呵。不错哦。
发表于 2008-10-26 23:18:57 | 显示全部楼层

回复 6# 的帖子

买一本TCP/IP路由技术详解。你说的问题上面都有哦
发表于 2008-10-27 09:23:17 | 显示全部楼层
回答的好详细哦!
发表于 2009-6-18 14:56:41 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|熊猫同学技术论坛|小黑屋| 网络工程师论坛 ( 沪ICP备09076391 )

GMT+8, 2024-11-22 19:31 , Processed in 0.076328 second(s), 18 queries , Gzip On.

快速回复 返回顶部 返回列表