ospf背景
 
Internet 工程工作小组 (IETF) 的 OSPF 工作组于 1987 年着手开发 OSPF。当时,Internet 基本是由美国政府资助的学术研究网络。
1989 年,OSPFv1 规范在 RFC 1131 中发布,具有两个版本:一个在路由器上运行,另一个在 UNIX 工作站上运行。后一个版本后来成为一个广泛应用的 UNIX 进程,也就是 GATED。OSPFv1 是一种实验性的路由协议,未获得实施。
1991 年,OSPFv2 由 John Moy 在 RFC 1247 中引入。OSPFv2 在 OSPFv1 基础上提供了重大的技术改进。与此同时,ISO 也正在开发自己的链路状态路由协议 — 中间系统到中间系统 (IS-IS) 协议。IETF 理所当然地选择 OSPF 作为其推荐的 IGP(内部网关协议)。
1998 年,OSPFv2 规范在 RFC 2328 中得以更新,也就是 OSPF 的现行 RFC 版本。
注:1999 年,用于 IPv6 的 OSPFv3 在 RFC 2740 中发布,RFC 2740 由 John Moy、Rob Coltun 和 Dennis Ferguson 共同编写。

链路:
   对于链路状态路由协议来说,链路是路由器上的一个接口。与距离矢量协议和静态路由一样,链路状态路由协议也需要下列条件才能了解链路:正确配置接口的 IP 地址和子网掩码并将链路设置为 up 状态。还有一点相同的是:必须将接口包括在一条 network 语句中,该接口才能参与链路状态路由过程。

链路状态
有关各条链路的状态的信息称为链路状态.这些信息包括:
·接口的 IP 地址和子网掩码
·网络类型,例如以太网(广播)链路或串行点对点链路。
·该链路的开销。
·该链路上的所有相邻路由器。

注:我们将会看到 Cisco 所实施的 OSPF 将链路开销(OSPF 路由度量)指定为外发接口的带宽。

链路状态路由协议的优点:

与距离矢量路由协议相比,链路状态路由协议有几个优点。

·创建拓扑图

链路状态路由协议会创建网络结构的拓扑图(即 SPF 树),而距离矢量路由协议没有此功能。使用距离矢量路由协议的路由器仅有一个网络列表,其中列出了通往各个网络的开销(距离)和下一跳路由器(方向)。因为链路状态路由协议会交换链路状态信息,所以 SPF 算法可以构建网络的 SPF 树。有了 SPF 树,每台路由器使可独立确定通向每个网络的最短路径。

·快速收敛

收到一个链路状态数据包 (LSP) 后,链路状态路由协议便立即将该 LSP 从除接收该 LSP 的接口以外的所有接口泛洪出去。使用距离矢量路由协议的路由器需要处理每个路由更新,并且在更新完路由表后才能将更新从路由器接口泛洪出去,即使对触发更新也是如此。因此链路状态路由协议可更快达到收敛状态。不过 EIGRP 是一个明显的例外。

·由事件驱动的更新

在初始 LSP 泛洪之后,链路状态路由协议仅在拓扑发生改变时才发出 LSP。该 LSP 仅包含与受影响的链路相关的信息。与某些距离矢量路由协议不同的是,链路状态路由协议不会定期发送更新。

注:OSPF 路由器会 每隔 30 分钟泛洪其自身的链路状态。这称为强制更新。

·层次式设计

链路状态路由协议(如 OSPF 和 IS-IS )使用了区域的原理。. 多个区域形成了层次状的网络结构,这有利于路由聚合(总结),还便于将路由问题隔离在一个区域内。

 
ospf消息封装
 
 
OSPF 消息的数据部分封装在数据包内。此数据字段可能包含五种 OSPF 数据包类型之一。下一主题将简要介绍每种数据包类型。
ospf简介_第1张图片
无论每个 OSPF 数据包的类型如何,都具有 OSPF 数据包报头。随后,OSPF 数据包报头和数据包类型特定的数据被封装到 IP 数据包中。在该 IP 数据包报头中,协议字段被设为 89 以代表 OSPF,目的地址则被设为以下两个组播地址之一:224.0.0.5 或 224.0.0.6。如果 OSPF 数据包被封装在以太网帧内,则目的 MAC 地址也是一个组播地址:01-00-5E-00-00-05 或 01-00-5E-00-00-06。
 
 
ospf数据包类型
ospf简介_第2张图片
图示为 OSPF LSP 的五种类型。每种数据包在 OSPF 路由过程中发挥各自的作用:
1. Hello — Hello 数据包用于与其它 OSPF 路由器建立和维持相邻关系。
2. DBD — DBD(数据库说明) 数据包包含发送方路由器的链路状态数据库的简略列表,接收方路由器使用本数据包与其本地链路状态数据库对比。
3. LSR — 随后,接收方路由器可以通过发送链路状态请求 (LSR) 数据包来请求 DBD 中任何条目的有关详细信息。
4. LSU — 链路状态更新 (LSU) 数据包用于回复 LSR 和通告新信息。LSU 包含七种类型的链路状态通告 (LSA)。
5. LSAck - 路由器收到 LSU 后,会发送一个链路状态确认 (LSAck) 数据包来确认接收到了 LSU。
 
hello协议
 
ospf简介_第3张图片
 
图示为 OSPF 数据包报头和 Hello 数据包。述带有蓝色阴影的字段。现在,我们着重关注 Hello 数据包的用法。
第一种类型的 OSPF 数据包 1 是 OSPF Hello 数据包。 Hello 数据包用于
.发现 OSPF 邻居并建立相邻关系。
.通告两台路由器建立相邻关系所必需统一的参数。
.在以太网和帧中继网络等多路访问网络中选举指定路由器 (DR) 和备用指定路由器 (BDR)。

图中所示的重要字段包括:
类型:OSPF 数据包类型:Hello (1)、DD (2)、LS 请求 (3)、LS 更新 (4) 或 LS 确认 (5)
.路由器 ID:始发路由器的 ID
.区域 ID:数据包的始发区域
.网络掩码:与发送方接口关联的子网掩码
.Hello 间隔:发送方路由器连续两次发送 hello 数据包之间的秒数
.路由器优先级:用于 DR/BDR 选举
.指定路由器 (DR):DR 的路由器 ID(如果有的话)
.备用指定路由器 (BDR):BDR 的路由器 ID(如果有的话)
.邻居列表:列出相邻路由器的 OSPF 路由器 ID
 
 
 
建立相邻关系
 
ospf简介_第4张图片
在 OSPF 路由器可将其链路状态泛洪给其它路由器之前,必须确定在其每个链路上是否存在其它 OSPF 邻居。在图中,OSPF 路由器正在通过所有启用了 OSPF 的接口发送 Hello 数据包,以确定那些链路上是否存在邻居。OSPF Hello 中的信息包括发送方路由器的 OSPF 路由器 ID。如果通过一个接口收到 OSPF Hello 数据包,即可确认该链路上存在另一台 OSPF 路由器。随后,OSPF 即与该邻居建立相邻关系。例如,在图中,R1 将与 R2 和 R3 建立相邻关系。
 
OSPF Hello 间隔和 Dead 间隔
两台路由器在建立 OSPF 相邻关系之前,必须统一三个值Hello 间隔、Dead 间隔和网络类型。OSPF Hello 间隔表示 OSPF 路由器发送其 Hello 数据包的频度。默认情况下,在多路访问网段和点对点网段中每 10 秒钟发送一次 OSPF Hello 数据包,而在非广播多路访问 (NBMA) 网段(帧中继、X.25 或 ATM)中则每 30 秒钟发送一次 OSPF Hello 数据包。
在多数情况下,OSPF Hello 数据包都会通过组播发送给ALLSPFRouters 的专用地址 224.0.0.5 。由于使用了组播地址,设备的接口如果未启用为接收 OSPF 数据包,则会忽略这些数据包。这样可节省非 OSPF 设备的 CPU 处理时间。
Dead 间隔是路由器在宣告邻居进入 down(不可用)状态之前等待该设备发送 Hello 数据包的时长,单位为秒。 Cisco 所用的默认断路间隔为 Hello 间隔的四倍。对于多路访问网段和点对点网段,此时长为 40 秒;而对于 NBMA 网络,则为 120 秒。
如果 Dead 间隔已到期,而路由器仍未收到邻居发来的 Hello 数据包,则会从其链路状态数据库中删除该邻居。路由器会将该邻居连接断开的信息通过所有启用了 OSPF 的接口以泛洪的方式发送出去。
 
选举 DR 和 BDR
为减小多路访问网络中的 OSPF 流量,OSPF 会选举一个指定路由器 (DR) 和一个备用指定路由器 (BDR)。当多路访问网络中发生变化时, DR 负责使用该变化信息更新其它所有 OSPF 路由器(称为 DROther)。BDR 会监控 DR 的状态,并在当前 DR 发生故障时接替其角色。图中,R1、R2 和 R3 通过点对点链路相互连接。因此,不会执行 DR/BDR 选举。届时,拓扑将变为一个多路访问网络。

 
ospf链路状态更新
 
ospf简介_第5张图片
 
链路状态更新 (LSU) 数据包用于 OSPF 路由更新。一个 LSU 数据包可能包含十种类型的链路状态通告 (LSA),如图所示。术语“链路状态更新 (LSU)”和“链路状态通告 (LSA)”之间的差异有时较难分清。有时,它们可以互换使用。一个 LSU 包含一个或多个 LSA,这两个术语中的任何一个都可用于表示由 OSPF 路由器传播的链路状态信息。
 
OSPF SPF算法
 
ospf简介_第6张图片
 
每台 OSPF 路由器都会维持一个链路状态数据库,其中包含来自其它所有路由器的 LSA。一旦路由器收到所有 LSA 并建立其本地链路状态数据库,OSPF 就会使用 Dijkstra 的最短路径优先 (SPF) 算法创建一个 SPF 树。随后,将根据 SPF 树,使用通向每个网络的最佳路径填充 IP 路由表。
 
管理距离
 
ospf简介_第7张图片
 
身份验证
 
对传输的路由信息进行身份验证是好的做法。RIPv2、EIGRP、OSPF、IS-IS 和 BGP 均可配置为对其路由信息进行加密和身份验证。此做法可确保路由器仅接受配置有相同的口令和身份验证信息的其它路由器所发来的路由信息。
注:身份验证不会加密路由器的路由表。
 
ospf简介_第8张图片