CCNP(三)-路由协议-OSPF

 

简介

开放式最短路径优先(英语:Open Shortest Path First,缩写为 OSPF):OSPF协议同时使用单播(Unicast)和组播(Multicast)来发送Hello包和链路状态更新(Link State Updates),使用的组播地址为224.0.0.5和224.0.0.6。与RIP和BGP不同的是,OSPF协议封装不使用TCP或者UDP协议而是直接承载在IP协议之上,IP协议号为89。

在OSPF出现前,RIP是网络上使用最广泛的IGP协议。但随着网络的快速成长和扩展,RIP的某些限制可能会导致其在大型网络中不再适用,OSPF则能够解决RIP所面临的诸多问题。

RIP

  • 基于距离矢量算法,以跳数作为度量方式,忽略带宽的影响。
  • RIP的跳数限制为15个,限制了RIP的网络规模。
  • 按照路由通告进行路由更新和选择,路由器不了解整个网络拓扑,容易产生路由环路。
  • 收敛速度慢,路由更新会经历一段抑制和垃圾收集期,容易导致路由器之间的路由不一致。
  • 不能处理可变长子网掩码(VLSM)。

OSPF

  • 基于链路状态,以链路开销作为度量方式,并把带宽作为参考值,度量方式更科学。
  • 没有跳数限制,适用的网络规模更大。
  • 每台路由器都能够掌握全网拓扑,通过最短路径优先算法SPF(Shortest Path First)计算路由,不会产生路由环路。
  • 收敛速度快,因为路由更新是及时的,并且能够快速传递到整个网络。
  • 能够处理VLSM,灵活进行IP地址分配。

此外,OSPF还有以下优点:

  • OSPF可以采用组播形式收发报文,这样可以减少对未运行OSPF的路由器的影响。
  • OSPF支持无类型域间选路(CIDR)。
  • OSPF支持对等价路由进行负载分担。
  • OSPF支持报文验证。

    OSPF运行机制

OSPF的运行机制包括以下5个步骤

  • 交互Hello报文
  • 泛洪LSA
  • 组建LSDB
  • SPF算法计算
  • 维护和更新路由表

交互Hello报文

通过交互Hello报文形成邻居关系,如图3所示,路由器运行OSPF协议后,会从所有启动OSPF协议的接口上发送Hello报文。如果两台路由器共享一条公共数据链路,并且能够成功协商各自Hello报文中所指定的某些参数,就能形成邻居关系。

image

泛洪LSA

通过泛洪LSA通告链路状态信息,形成邻居关系的路由器之间进一步交互LSA形成邻接关系,如图4所示。每台路由器根据自己周围的网络拓扑结构生成LSA,LSA描述了路由器所有的链路、接口、邻居及链路状态等信息,路由器通过交互这些链路信息来了解整个网络的拓扑信息。由于链路的多样性,OSPF协议定义了多种LSA(链路状态通告)类型,LSA描述了所有的链路,接口和邻居等链路状态信息,OSPF路由协议对所有路由信息的描述,都是封装在链路状态通告LSA中发送出去的。详见OSPF LSA类型。

image

image

组建LSDB

通过组建LSDB形成带权有向图,通过LSA的泛洪,路由器会把收到的LSA汇总记录存放在LSDB数据库中。最终,所有路由器都会形成同样的LSDB,如图5所示。LSA是对路由器周围网络拓扑结构的描述,而LSDB则是对整个自治系统的网络拓扑结构的描述,LSDB是LSA的汇总。

image

SPF算法计算

通过SPF算法计算并形成路由,如图6所示,当LSDB同步完成之后,每一台路由器都将以其自身为根,使用SPF算法来计算一个无环路的拓扑图来描述它所知道的到达每一个目的地的最短路径(最小的路径代价)。这个拓扑图就是最短路径树,有了这棵树,路由器就能知道到达自治系统中各个节点的最优路径。

image

维护和更新路由表

根据SPF算法得出最短路径树后,每台路由器将计算得出的最短路径加载到OSPF路由表形成指导数据转发的路由表项,并且实时更新,如图7所示。同时,邻居之间交互Hello报文进行保活,维持邻居关系或邻接关系,并且周期性地重传LSA。

image

OSPF区域间路由

随着网络规模不断扩大,结构也日趋复杂,路由器完成路由计算所消耗的内存、CPU资源也越来越多,网络发生故障的可能性也随之增加,如果区域内某处发生故障,整个区域内的路由器都要重新计算路由,这将大大增加路由器的负担,降低网络运行的稳定性。

image

优点:OSPF采用划分区域的方式,将一个大网络划分为多个相互连接的小网络。每个区域内的设备只需同步所在区域内的链路状态数据库,一定程度上降低内存及CPU的消耗。

  • 1.缩小数据库规模(区域间只传递路由信息)
  • 2.方便路由控制(汇总、过滤)
  • 3.扩展性强

image

区域划分的基本概念

区域类型:OSPF区域分为:骨干区域(area 0),非骨干区域(非area 0),必须存在骨干区域,可以没有非骨干区域,骨干区域必须拥有所有区域的明细路由,非骨干区域必须围绕着骨干区域建立,以接口进行划分区域,一个接口只能属于一个区域,一台设备可以属于多个区域,非骨干区域之间互访需要经过骨干区域。

image

OSPF路由器的角色

OSPF路由器的类型决定了什么样的数据流能够进入和离开区域。下面是4种路由器类型如下图。

  • 内部路由器:所有接口都位于同一个区域中的路由器,同一个区域中所有内部路由器的LSDB都相同。
  • 骨干路由器:位于骨干区域0边缘的路由器,至少有一个接口与区域0相连。骨干路由器在维护OSPF路由信息时采用的步骤和算法与内部路由器相同。
  • 区域边界路由器(ABR):连接多个区域的路由器,为其连接的每个区域维护一个LSDB,并路由器前往/来自其他区域的数据流。ABR将区域0连接到非骨干区域,因此是区域的出口,这意味着前往其他区域的路由信息必须经过当前区域的ABR。ABR将这些路由选择信息通告给骨干,骨干路由器再将其转发给其他的ABR。只能在ABR对其连接的区域的地址进行汇总(对其连接的区域的LSDB种的路由选择信息进行汇总)。ABR分离LSA泛洪区,还可能提供默认路由。一个区域肯能有一台或多台ABR。 理想的设计是只让每个ABR连接两个区域:骨干区域和另一个区域。正如前面指出的,建议ABR最多不要连接3个以上的区域。
  • 自治系统边界路由器(ASBR):至少有一个接口与其他域(如另一个OSPF自治区域系统或使用其他网络协议的域)相连。OSPF自治系统由所有OSPF区域及其中的路由器组成。ASBR可将外部路由重分发到OSPF域中,反之亦然。

OSPF工作过程及原理

OSPF(Open Shortest Path First)是一种用于内部网关协议(IGP),常用于企业和互联网服务提供商中。它的工作过程和原理如下:

  1. 邻居发现:OSPF路由器通过发送和接收Hello报文来相互发现并建立邻居关系。

  2. 路由器ID分配:每个OSPF路由器都有一个唯一的路由器ID,可以通过以下方式之一来确定:手动配置、最高循环IP地址、或者最高回环接口IP地址。

  3. 构建链路状态数据库(LSDB):邻居关系建立后,路由器会交换链路状态更新(Link State Update)报文,用于构建链路状态数据库,其中保存了整个网络的拓扑信息。

  4. SPF计算:一旦链路状态数据库构建完成,每个路由器都会执行SPF(Shortest Path First)算法来计算到达网络中所有目的地的最短路径。

  5. 路由更新:SPF计算完成后,每个路由器将更新它的路由表,包含最新的最短路径信息。

  6. 路由信息交换:OSPF通过发送链路状态广告(LSA)报文来交换路由信息,确保网络中的所有路由器都具备相同的链路状态数据库和路由表。

  7. 链路状态更新和周期性检查:OSPF路由器之间周期性地交换Hello报文来保持邻居关系,并根据网络的变化发送链路状态更新,以保持链路状态数据库的一致性。

总结来说,OSPF通过建立邻居关系、构建链路状态数据库、执行SPF计算和交换路由信息来找到网络中最短路径,并确保路由表的正确性和一致性。这使得OSPF成为一个高效可靠的内部网关协议,适用于复杂的企业网络和大规模互联网部署。

Neighbor和Adjacency

Open Shortest Path First (OSPF) 是一种内部网关协议(IGP),它使用链路状态路由协议 (LSRP) 算法确定网络中的最短路径。OSPF 使用邻居关系和邻接关系来构建网络拓扑图,以在路由器之间交换路由信息。OSPF(开放式最短路径优先协议)的邻居是指在同一个区域内的相互连接的路由器。邻居之间需要建立OSPF邻接关系才能进行路由信息交换。OSPF邻接关系指的是两个邻居之间建立了OSPF协议的连接,可以互相交换路由信息。

当两个OSPF邻居之间建立邻接关系后,它们就会交换自己的路由信息,并根据自己的SPF计算进行更新。这样,在整个区域内的每个路由器都可以了解到整个网络的路由信息,从而实现最优路径的选择和数据转发。

邻居(Neighbor)是指与一个路由器通过直接相连的网络连接起来的另一个路由器。当两个路由器在同一广播域内时,它们就会成为邻居,并开始交换路由信息。路由器通过发送 Hello 消息来发现它们的邻居,并确定它们的状态。

邻接(Adjacency)是指两个邻居之间建立的关系,这种关系建立了连接并开始交换数据。OSPF 邻接建立需要满足以下条件:在同一区域(OSPF Area)中;使用相同的 OSPF 网络类型;使用相同的 OSPF 路由器 ID;使用相同的区域 ID;使用相同的 Hello 和 Dead Interval 值。

一旦邻居建立,路由器之间就可以交换路由信息,并通过最短路径算法计算出网络中的最短路径。邻接关系通常比邻居关系更稳定,因为它们需要满足更多的条件才能建立。

OSPF中的SPF算法

OSPF中的SPF算法(Shortest Path First)是用于计算最短路径的核心算法。它基于网络的拓扑结构和链路状态信息,通过逐步计算路由器到每个目的地的最短路径,最终形成最短路径树。下面是SPF算法的几个主要步骤:

  • 收集链路状态信息:每个路由器收集与它直接相邻的路由器的链路状态信息,包括链路的开销(即距离、带宽等)和状态(连接状态、可达性等)。

  • 构建拓扑图:每个路由器将收集到的链路状态信息转换为拓扑图,其中每个节点表示一个路由器,每条边表示两个相邻路由器之间的连接。

  • 计算最短路径:路由器使用Dijkstra或SPF算法计算到达每个目的地的最短路径。计算过程中,路由器记录每个目的地的下一跳路由器,以便以后转发数据包时使用。

  • 形成最短路径树:每个路由器将计算出的最短路径转换为最短路径树,其中根节点表示自身,子节点表示直接相邻的路由器,每个叶子节点表示一个目的地。

  • 更新路由表:路由器根据最短路径树更新自己的路由表,以便以后转发数据包时使用。

通过SPF算法,OSPF可以快速计算出整个网络中的最短路径,并自动调整路由,保证数据的可靠传输和高效路由选择。

LSA操作过程

链路状态数据结构(LSA)是广域网中路由协议使用的重要数据结构。在OSPF和IS-IS路由协议中,LSA被用来描述一个特定路由器所知道的本地网络拓扑结构信息。以下是LSA操作的一些常见步骤:

  • 探测本地网络拓扑:每台路由器定期探测本地网络拓扑,并保存自己的LSA数据库。

  • 将LSA广播到邻居:每当一个路由器探测到拓扑结构的变化,它会将LSA广播给与之相邻的路由器。相邻的路由器会保存这些LSA,并将它们转发给其他路由器。

  • 计算最佳路径:每台路由器使用所知道的LSA来计算到达目标地址的最佳路径。为了减少网络拥塞,路由器可能会使用不同的算法来计算路径。

  • 更新LSA数据库:如果某个LSA数据库中的信息过时或者网络拓扑发生变化,路由器会将更新的LSA广播给邻居,并更新自己的LSA数据库。

  • 路由故障后的恢复:如果某个路由器失效,它周围的路由器会检测到这个故障,并将与该路由器相关的LSA从数据库中删除。随后,它们会重新计算到达目标地址的最佳路径。

通过LSA操作,路由器可以动态地更新本地网络拓扑结构信息,并计算到达目标地址的最佳路径。这有助于提高网络的可靠性和性能。

OSPF(Open Shortest Path First)有以下几种类型的数据报文

image

OSPF报文主要包括以下内容:

  1. Hello报文:组播收发,用于邻居、邻接关系的发现、建立、周期保活、发布RouterID、Router Priority等参数信息。hello报文组播发送,hello time为10s或者30s,dead time是hello time 的4倍。

  2. Database Description(DD)报文:用于通过比较邻居路由器的LSA数据库,确定两个路由器之间的同步状态。

  3. Link State Request (LSR)报文:用于请求邻居路由器发送某些LSA的详细信息。

  4. Link State Update (LSU)报文:用于向邻居路由器发送LSA详细信息。

  5. Link State Acknowledgment (LSAck)报文:用于确认LSU报文的接收。

这些报文允许OSPF路由器中的每个节点共享网络拓扑信息,并计算出网络中最短的路径。

数据包的包头字段

OSPF(Open Shortest Path First)包头字段包括以下内容:

  1. 版本(Version):指示正在使用的OSPF版本。
  2. 类型(Type):指定OSPF数据包的类型,如Hello、Link State Update(LSU)、Link State Request(LSR)、Link State Acknowledgment(LSA)等。
  3. 数据包长度(Packet Length):表示OSPF数据包的总长度(以字节为单位)。
  4. 路由器ID(Router ID):源路由器的唯一标识符。
  5. 区域ID(Area ID):标识数据包所属的OSPF区域。
  6. 校验和(Checksum):用于在传输过程中确保数据完整性的校验和。
  7. AuType(Authentication Type):用于身份验证的认证类型字段(可选)。
  8. 身份验证(Authentication):身份验证数据(可选)。
  9. OSPF数据包主体(OSPF Packet Body):包含OSPF特定信息,如Hello间隔、失效间隔、LSA信息等。

这些字段允许路由器进行通信,并构建网络的拓扑图,从而有效地计算路由数据包的最短路径。

OSPF中Router ID的选举方式:

  1. 如果配置了loopback接口,优先选择loopback接口的IP地址作为Router ID。

  2. 如果没有配置loopback接口,则选择所有接口中最高的IP地址作为Router ID。

  3. 如果存在多个最高IP地址,则选择其中一个作为Router ID。

  4. 如果以上方式都无法确定Router ID,则可以手动配置Router ID。

需要注意的是,Router ID在OSPF运行过程中是不会改变的,除非手动配置。因此,在设计网络拓扑时需要考虑Router ID的选择。