码迷,mamicode.com
首页 > 其他好文 > 详细

OSPF

时间:2015-10-08 00:30:24      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

 Ospf

OSPF(开放最短路径优先协议)是一种无类内部网关协议(IGP);是一种链路状态路由选择协议;

入门:

可以把整个网络(一个自治系统AS)看成一个王国,这个王国可以分成几个 区(area),现在我们来看看区域内的某一个人(你所在的机器root)是怎样得到一张 世界地图(routing table)的。
  首先,你得跟你周围的人(同一网段如129.102)建立基本联系。你大叫一声 “我在这!”(发HELLO报文),于是,周围的人知道你的存在,他们也会大叫,这样 你知道周围大概有哪些人,你与他们之间建立了邻居(neighbor)关系,当然,他们 之间也有邻居关系。
  在你们这一群人中,最有威望(Priority优先级)的人会被推荐为首领( Designated Router)首领与你之间是上下级关系(adjacency邻接),它会与你建立 单线联系,而不许你与其它邻居有过多交往,他会说:“那样做的话,街上太挤了 ”。
  你只好通过首领来知道更多的消息了,首先,你们互通消息,他告诉你他知 道的所有地图的地名,你也会告诉他你现知道的地名,当然上也许只有你一个点。 (Database Des cription数据库描述报文)
  你发现地名表中有你缺少的或比你新的东西,你会问他要一份更详细的资料 ,他发现你的地名表中有他需要的东西,他也会向你索求新资料。(Link State Request连接状态请求报文)
  当然,你们毫不犹豫地将一份详细资料发送给对方。(Link State Update连 接状态升级报文)
  收到地图后,互相致谢表示收到了。(Link State Ack连接状态响应报文)
  现在,你已经尽你所能得到一份地图(Link State DataBase连接状态数据库 ),你去查找地图把到所有地方的路挑一条最近(shortest path最短路)的,记 为一张表格(routing table路由表),当然以后查这份表格就知道到目的地的一 条最近的路了。地图也要收好,万一表格上的某条路不通了可以通过图去找一条新 的路。
  其实跟你有联系的,只是周围一群人,外面的消息要通过首领来知道。因为 你的地图是跟首领的一致,我们假设你是首领,你要去画一份世界地图。
  你命令所有手下向你通报消息,你可以知道你这一群人的任何一点点小动静 (event事件)。你手下还会有同时属于两群人的家伙(同一区内两网段),他会 告诉你另一群人的地图,当然也会把你们这一群人的地图泄露,(不过,无所谓啦 )。这样,整个区的地图你知道了(对于不知道的那也没办法,我们尽力了)。
  通过不停地交换地图,现在,整个区的人都有同样的地图了,住在区边境上 的人义不容辞地把这个区的地图(精确到每一群人)发送到别的区,把别的区信息 发送进来。国王会把这些边境的人命名为骨干(backbone area)。通过骨干人士 的不懈努力,现在,整个国家的地图你都了解得一清二楚了。
  有些人“里通外国”(AS Boundary Router自治系统边界路由器) ,他们知 道一些“出国”(AS External route自治系统外部路由)的路,当然他们会把这些 秘密公之与众(import 引入),通过信息的传递,现在,你已经有一张完整的“ 世界地图”了。
  OSPF是这样标记最短的路的:对于某个目的地,首先,考虑是否有同一区内 部到目的地的路(intra area区域内),如果有,则在其中取一条离你最近的(花 费最小),写进你的表格中,这个目的地可能是到本群体某个人也可能是到其他群 体的,对于经过其他区域的路由,你会不予考虑,跟自己人(同区域)打交道总比 与外人(其他区域)打交道好;如果没有本区的路,你只好通过别的区域了(区域 间),你只要在地图上找最近的就是了;如果你发现目的地在国外,你也只能先把 它标记到你的表格上,期待什么时候王国扩张到那,你就可以把它标记到国内地图 上了。


  OSPF是一种典型的链路状态路由协议。采用OSPF的路由器彼此交换并保存整个网络的链路信息,从而掌握全网的拓扑结构,独立计算路由。因为RIP路由协议不能服务于大型网络,所以,IETF的IGP工作组特别开发出链路状态协议——OSPF。目前广为使用的是OSPF第二版,最新标准为RFC2328。
  OSPF作为一种内部网关协议(Interior Gateway Protocol,IGP),用于在同一个自治域(AS)中的路由器之间发布路由信息。区别于距离矢量协议(RIP),OSPF具有支持大型网络、路由收敛快、占用网络资源少等优点,在目前应用的路由协议中占有相当重要的地位。
    
  链路状态:
  OSPF路由器收集其所在网络区域上各路由器的连接状态信息,即链路状态信息(Link-State),生成链路状态数据库(Link-State Database)。路由器掌握了该区域上所有路由器的链路状态信息,也就等于了解了整个网络的拓扑状况。OSPF路由器利用“最短路径优先算法(Shortest Path First, SPF)”,独立地计算出到达任意目的地的路由。
  
  区域
  OSPF协议引入“分层路由”的概念,将网络分割成一个“主干”连接的一组相互独立的部分,这些相互独立的部分被称为“区域” (Area),“主干”的部分称为“主干区域”。每个区域就如同一个独立的网络,该区域的OSPF路由器只保存该区域的链路状态。每个路由器的链路状态数据库都可以保持合理的大小,路由计算的时间、报文数量都不会过大。
  
  OSPF网络类型
  根据路由器所连接的物理网络不同,OSPF将网络划分为四种类型:广播多路访问型(Broadcast MultiAccess)、非广播多路访问型(None Broadcast MultiAccess,NBMA)、点到点型(Point-to-Point)、点到多点型(Point-to-MultiPoint)。
  广播多路访问型网络如:Ethernet、Token Ring、FDDI。NBMA型网络如:Frame Relay、X.25、SMDS。Point-to-Point型网络如:PPP、HDLC。具体结构如后图所示。 

 
  指定路由器(DR)和备份指定路由器(BDR
  在多路访问网络上可能存在多个路由器,为了避免路由器之间建立完全相邻关系而引起的大量开销,OSPF要求在区域中选举一个DR。每个路由器都与之建立完全相邻关系。DR负责收集所有的链路状态信息,并发布给其他路由器。选举DR的同时也选举出一个BDR,在DR失效的时候,BDR担负起DR的职责。
  点对点型网络不需要DR,因为只存在两个节点,彼此间完全相邻。 协议组成 OSPF协议由Hello协议、交换协议、扩散协议组成。本文仅介绍Hello协议,其他两个协议可参考RFC2328中的具体描述。
  当路由器开启一个端口的OSPF路由时,将会从这个端口发出一个Hello报文,以后它也将以一定的间隔周期性地发送Hello报文。OSPF路由器用Hello报文来初始化新的相邻关系以及确认相邻的路由器邻居之间的通信状态。
  对广播型网络和非广播型多路访问网络,路由器使用Hello协议选举出一个DR。在广播型网络里,Hello报文使用多播地址224.0.0.5周期性广播,并通过这个过程自动发现路由器邻居。在NBMA网络中,DR负责向其他路由器逐一发送Hello报文。
  
  1) 操作过程
  第一步,建立路由器的邻接关系  
  所谓“邻接关系”(Adjacency)是指OSPF路由器以交换路由信息为目的,在所选择的相邻路由器之间建立的一种关系。 路由器首先发送拥有自身ID信息(Loopback端口或最大的 IP地址)的Hello报文。与之相邻的路由器如果收到这个Hello报文,就将这个报文内的ID信息加入到自己的Hello报文内。  
  如果路由器的某端口收到从其他路由器发送的含有自身ID信息的Hello报文,则它根据该端口所在网络类型确定是否可以建立邻接关系。  
  在点对点网络中,路由器将直接和对端路由器建立起邻接关系,并且该路由器将直接进入到第三步操作:发现其他路由器。若为MultiAccess 网络, 该路由器将进入选举步骤。
  
  第二步,选举DR/BDR  
  不同类型的网络选举DR和BDR的方式不同。  
  MultiAccess网络支持多个路由器,在这种状况下, OSPF需要建立起作为链路状态和LSA更新的中心节点。选举利用Hello报文内的ID和优先权(Priority)字段值来确定。优先权字段值大小从0到255,优先权值最高的路由器成为DR。如果优先权值大小一样,则ID值最高的路由器选举为DR, 优先权值次高的路由器选举为BDR。优先权值和ID值都可以直接设置。
  
  第三步,发现路由器
  
  在这个步骤中,路由器与路由器之间首先利用Hello报文的ID信息确认主从关系,然后主从路由器相互交换部分链路状态信息。每个路由器对信息进行分析比较,如果收到的信息有新的内容,路由器将要求对方发送完整的链路状态信息。这个状态完成后,路由器之间建立完全相邻(Full Adjacency)关系,同时邻接路由器拥有自己独立的、完整的链路状态数据库。  
  在MultiAccess网络内,DR与BDR互换信息,并同时与本子网内其他路由器交换链路状态信息。  
  在Point-to-Point 或 Point-to-MultiPoint网络中,相邻路由器之间互换链路状态信息。
  
  第四步,选择适当的路由器
  
  当一个路由器拥有完整独立的链路状态数据库后,它将采用SPF算法计算并创建路由表。OSPF路由器依据链路状态数据库的内容,独立地用SPF算法计算出到每一个目的网络的路径,并将路径存入路由表中。  
  OSPF 利用量度(Cost)计算目的路径,Cost最小者即为最短路径。在配置OSPF路由器时可根据实际情况,如链路带宽、时延或经济上的费用设置链路Cost大小。Cost越小,则该链路被选为路由的可能性越大。
  
  第五步,维护路由信息
  
  当链路状态发生变化时,OSPF通过Flooding 过程通告网络上其他路由器。OSPF路由器接收到包含有新信息的链路状态更新报文,将更新自己的链路状态数据库,然后用SPF算法重新计算路由表。在重新计算过程中,路由器继续使用旧路由表,直到SPF完成新的路由表计算。新的链路状态信息将发送给其他路由器。值得注意的是,即使链路状态没有发生改变,OSPF路由信息也会自动更新,默认时间为30分钟。

OSPF路由器之间使用链路状态通告(LSA)来交换各自的链路状态信息,并把获得的信息存储在链路状态数据库中。各OSPF路由器独立使用SPF算法计算到各个目的地址的路由。
  OSPF协议支持分层路由方式,这使得它的扩展能力远远超过RIP协议。当OSPF网络扩展到100、500甚至上千个路由器时,路由器的链路状态数据库将记录成千上万条链路信息。为了使路由器的运行更快速、更经济、占用的资源更少,网络工程师们通常按功能、结构和需要把OSPF网络分割成若干个区域,并将这些区域和主干区域根据功能和需要相互连接从而达到分层的目的。
  
  区域  
  OSPF把一个大型网络分割成多个小型网络的能力被称为分层路由,这些被分割出来的小型网络就称为“区域”(Area)。由于区域内部路由器仅与同区域的路由器交换LSA信息,这样LSA报文数量及链路状态信息库表项都会极大减少,SPF计算速度因此得到提高。多区域的OSPF必须存在一个主干区域,主干区域负责收集非主干区域发出的汇总路由信息,并将这些信息返还给到各区域。 OSPF区域不能随意划分,应该合理地选择区域边界,使不同区域之间的通信量最小。但在实际应用中区域的划分往往并不是根据通信模式而是根据地理或政治因素来完成的。
  
  OSPF中的四种路由器  
  在OSPF多区域网络中,路由器可以按不同的需要同时成为以下四种路由器中的几种(如图1.5.1所示):

图1.5.1:

 技术分享

l  内部路由器:所有端口在同一区域的路由器,维护一个链路状态数据库。

l  主干路由器:具有连接主干区域端口的路由器。

l  区域边界路由器(ABR): 。ABR是指连接一个或者多个区域到骨干区域的路由器,并且这些路由器会作为域间通信的路由网关。为每一个所连接的区域建立链路状态数据库,负责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负责将这些信息发送到各个区域。

l   自治域系统边界路由器(ASBR): 至少拥有一个连接外部自治域网络(如非OSPF的网络)端口的路由器,负责将非OSPF网络信息传入OSPF网络。也就是说ASBR路由器是用来把其他路由选择协议学习到的路由,通过路由选择重分配的方式注入到OSPF域的路由器。
  OSPF链路状态公告类型
  
  OSPF路由器之间交换链路状态公告(LSA)信息。OSPF的LSA中包含连接的接口、使用的Metric及其他变量信息。OSPF路由器收集链接状态信息并使用SPF算法来计算到各节点的最短路径。LSA也有几种不同功能的报文,在这里简单地介绍一下:
  
  LSA TYPE 1:由每台路由器为所属的区域产生的LSA,描述本区域路由器链路到该区域的状态和代价。一个边界路由器可能产生多个LSA TYPE 1。
  
  LSA TYPE 2:由DR产生,含有连接某个区域路由器的所有链路状态和代价信息。只有DR可以监测该信息。
  
  LSA TYPE 3:由ABR产生,含有ABR与本地内部路由器连接信息,可以描述本区域到主干区域的链路信息。它通常汇总缺省路由而不是传送汇总的OSPF信息给其他网络。
  
  LSA TYPE 4:由ABR产生,由主干区域发送到其他ABR, 含有ASBR的链路信息,与LSA TYPE 3的区别在于TYPE 4描述到OSPF网络的外部路由,而TYPE 3则描述区域内路由。
  
  LSA TYPE 5:由ASBR产生,含有关于自治域外的链路信息。除了存根区域和完全存根区域,LSA TYPE 5在整个网络中发送。
  
  LSA TYPE 6:多播OSPF(MOSF),MOSF可以让路由器利用链路状态数据库的信息构造用于多播报文的多播发布树。
  
  LSA TYPE 7:由ASBR产生的关于NSSA的信息。LSA TYPE 7可以转换为LSA TYPE 5。
  
  OSPF区域类型
  
  前述的四种路由器可以构成五种类型的区域,这五种区域的主要区别在于它们和外部路由器间的关系:
  
  标准区域: 一个标准区域可以接收链路更新信息和路由总结。 主干区域(传递区域): 主干区域是连接各个区域的中心实体。主干区域始终是“区域0”,所有其他的区域都要连接到这个区域上交换路由信息。主干区域拥有标准区域的所有性质。
  
  存根区域:存根区域是不接受自治系统以外的路由信息的区域。如果需要自治系统以外的路由,它使用默认路由0.0.0.0。
  
  完全存根区域:它不接受外部自治系统的路由以及自治系统内其他区域的路由总结。需要发送到区域外的报文则使用默认路由:0.0.0.0。完全存根区域是Cisco自己定义的。
  
  不完全存根区域(NSAA): 它类似于存根区域,但是允许接收以LSA Type 7发送的外部路由信息,并且要把LSA Type 7转换成LSA Type 5。
  
  区分不同OSPF区域类型的关键在于它们对外部路由的处理方式。外部路由由ASBR传入自治系统内,ASBR可以通过RIP或者其他的路由协议学习到这些路由。  
  报文在OSPF多区域网络中发送的过程  
  首先,区域内部的路由器最初使用LSA TYPE 1或LSA TYPE 2对本区域内的路径信息进行交换并计算出相应的路由表项。当路由器的链路信息在区域内部路由达到统一后,ABR才能发送LSA摘要报文(LSA TYPE 3或LSA TYPE 4)给其他区域。其他区域路由器可以根据这些摘要信息计算相应到达本区域以外的路由表项。最后,除了存根区域,所有路由器根据ASBR所发送的LSA TYPE 5计算出到达自治域外的路由表项。  
  为减少LSA报文,LSA摘要信息可以通过合理地分配IP地址和配置路由摘要提高效率。 在OSPF多区域网络中,主干区域必须保持全连通状态,即每个其他区域必须直接与主干区域Area0有连接才能交换区域间的路由信息。但在实际应用中,因为各种原因很难避免有些区域无法直接与Area0相连,为了解决这个问题,OSPF协议中定义了虚链路的概念使一个连接主干的区域连接第三方区域。 

 
  配置命令  
  全局设置
  指定使用OSPF协议命令:router ospf process-id1
  指定与该路由器相连的网络命令:network address wildcard-mask area area-id2
  指定与该路由器相邻的节点地址命令:neighbor ip-address  
  注:1、OSPF路由进程process-id必须指定范围在1-65535,多个OSPF进程可以在同一个路由器上配置,但最好不这样做。多个OSPF进程需要多个OSPF数据库的副本,必须运行多个最短路径算法的副本。process-id只在路由器内部起作用,不同路由器的process-id可以不同。
  2、wildcard-mask 是子网掩码的反码, 网络区域ID area-id在0-4294967295内的十进制数,也可以是带有IP地址格式的x.x.x.x。当网络区域ID为0或0.0.0.0时为主干域。不同网络区域的路由器通过主干域学习路由信息。  

 


  基础配置举例


  技术分享
  R2:
  interface Loopback0

 ip address 10.0.0.1 255.255.255.0

!

interface Ethernet0/0

 ip address 192.168.1.1 255.255.255.0

 half-duplex

!

interface Ethernet0/1

 ip address 192.168.2.1 255.255.255.0

     half-duplex 

router ospf 1

 log-adjacency-changes

 network 192.168.1.0 0.0.0.255 area 0

     network 192.168.2.0 0.0.0.255 area 1 

R3:
  interface Loopback0

 ip address 10.0.0.2 255.255.255.0

!

interface Ethernet0/0

 ip address 192.168.1.2 255.255.255.0

 half-duplex

!

interface Ethernet0/1

 ip address 192.168.3.1 255.255.255.0

 half-duplex

!

interface Ethernet0/2

 no ip address

 shutdown

 half-duplex

!

interface Ethernet0/3

 no ip address

 shutdown

 half-duplex

!

router ospf 1

 log-adjacency-changes

 network 192.168.1.0 0.0.0.255 area 0

 network 192.168.3.0 0.0.0.255 area 2

R4:
  interface Loopback0

 ip address 10.0.0.3 255.255.255.0

!

interface Ethernet0/0

 ip address 192.168.2.2 255.255.255.0

 half-duplex

!

interface Ethernet0/1

 ip address 192.168.4.1 255.255.255.0

 half-duplex

!

interface Ethernet0/2

 ip address 192.168.4.2 255.255.255.0

 shutdown

 half-duplex

!

interface Ethernet0/3

 no ip address

 shutdown

 half-duplex

!

router ospf 1

 log-adjacency-changes

 network 192.168.2.0 0.0.0.255 area 1

 network 192.168.4.0 0.0.0.255 area 1

R5:

interface Loopback0

 ip address 10.0.0.4 255.255.255.0

!

interface Ethernet0/0

 ip address 192.168.3.2 255.255.255.0

 half-duplex

!

interface Ethernet0/1

 ip address 192.168.5.1 255.255.255.0

 half-duplex

!

interface Ethernet0/2

 ip address 192.168.6.1 255.255.255.0

 half-duplex

!

interface Ethernet0/3

 no ip address

 shutdown

 half-duplex

!

router ospf 1

 log-adjacency-changes

 network 192.168.3.0 0.0.0.255 area 2

 network 192.168.5.0 0.0.0.255 area 2

 network 192.168.6.0 0.0.0.255 area 2

!

R9:

interface Ethernet0/0

 ip address 192.168.6.2 255.255.255.0

 half-duplex

!

interface Ethernet0/1

 no ip address

 shutdown

 half-duplex

!

interface Ethernet0/2

 no ip address

 shutdown

 half-duplex

!

interface Ethernet0/3

 no ip address

 shutdown

 half-duplex

!

router ospf 1

 log-adjacency-changes

 network 192.168.6.0 0.0.0.255 area 2

!

如上,每一个路由器发自己相连的链路信息通告出去

收敛以后的路由表:

技术分享 

测试通路情况:

 技术分享
  相关调试命令:
  debug ip ospf events
  debug ip ospf packet
  show ip ospf
  show ip ospf database
  show ip ospf interface
  show ip ospf neighbor
  show ip route
  
  3. 使用身份验证
  为了安全的原因,我们可以在相同OSPF区域的路由器上启用身份验证的功能,只有经过身份验证的同一区域的路由器才能互相通告路由信息。
  在默认情况下OSPF不使用区域验证。通过两种方法可启用身份验证功能,纯文本身份验证和消息摘要(md5)身份验证。纯文本身份验证传送的身份验证口令为纯文本,它会被网络探测器确定,所以不安全,不建议使用。而消息摘要(md5)身份验证在传输身份验证口令前,要对口令进行加密,所以一般建议使用此种方法进行身份验证。
  使用身份验证时,区域内所有的路由器接口必须使用相同的身份验证方法。为起用身份验证,必须在路由器接口配置模式下,为区域的每个路由器接口配置口令。
  
  
  指定身份验证命令:area area-id authentication [message-digest]
  使用纯文本身份验证命令:ip ospf authentication-key password
  使用消息摘要(md5)身份验证命令: ip ospf message-digest-key keyid md5 key
  
  以下列举两种验证设置的示例,示例的网络分布及地址分配环境与以上基本配置举例相同,只是在Router1和Router2的区域0上使用了身份验证的功能。

如图1.5.2:只在R2上开启area 0身份认证和R2/R3上对应开启area 0身份认证后的路由表

技术分享
  
  例1.使用纯文本身份验证
  
  R2:
  interface Ethernet0/0

 ip address 192.168.1.1 255.255.255.0

 ip ospf authentication-key cisco

 half-duplex

!

interface Ethernet0/1

 ip address 192.168.2.1 255.255.255.0

 half-duplex

!

interface Ethernet0/2

 no ip address

 shutdown

 half-duplex

!

interface Ethernet0/3

 no ip address

 shutdown

 half-duplex

!

router ospf 1

 log-adjacency-changes

 area 0 authentication

 network 192.168.1.0 0.0.0.255 area 0

 network 192.168.2.0 0.0.0.255 area 1

R3:
  interface Loopback0

 ip address 10.0.0.2 255.255.255.0

!

interface Ethernet0/0

 ip address 192.168.1.2 255.255.255.0

 ip ospf authentication-key cisco

 half-duplex

!

interface Ethernet0/1

 ip address 192.168.3.1 255.255.255.0

 half-duplex

!

interface Ethernet0/2

 no ip address

 shutdown

 half-duplex

!

interface Ethernet0/3

 no ip address

 shutdown

 half-duplex

!

router ospf 1

 log-adjacency-changes

 area 0 authentication

 network 192.168.1.0 0.0.0.255 area 0

 network 192.168.3.0 0.0.0.255 area 2

  
  例2.消息摘要(md5)身份验证:
  
 R2:
  interface Ethernet0/0

 ip address 192.168.1.1 255.255.255.0

 ip ospf message-digest-key 1 md5 cisco

 half-duplex

!

interface Ethernet0/1

 ip address 192.168.2.1 255.255.255.0

 half-duplex

!

interface Ethernet0/2

 no ip address

 shutdown

 half-duplex

!

interface Ethernet0/3

 no ip address

 shutdown

 half-duplex

!

router ospf 1

 log-adjacency-changes

 area 0 authentication message-digest

 network 192.168.1.0 0.0.0.255 area 0

 network 192.168.2.0 0.0.0.255 area 1

R3:
  interface Loopback0

 ip address 10.0.0.2 255.255.255.0

!

interface Ethernet0/0

 ip address 192.168.1.2 255.255.255.0

ip ospf message-digest-key 1 md5 cisco

 half-duplex

!

interface Ethernet0/1

 ip address 192.168.3.1 255.255.255.0

 half-duplex

!

interface Ethernet0/2

 no ip address

 shutdown

 half-duplex

!

interface Ethernet0/3

 no ip address

 shutdown

 half-duplex

!

router ospf 1

 log-adjacency-changes

 area 0 authentication message-digest

 network 192.168.1.0 0.0.0.255 area 0

 network 192.168.3.0 0.0.0.255 area 2

  
仅在R3上开启消息摘要认证和R2/R3都开启后的通路情况

 技术分享

技术分享

技术分享

 


  相关调试命令:
  debug ip ospf adj
  debug ip ospf events

OSPF

标签:

原文地址:http://www.cnblogs.com/commanderzhu/p/4859798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!