Link-state Protocol
SPF
最短路径优先算法,比如dijsktra算法
链路状态
链路是路由器上的一个接口。
链路状态路由协议也需要下列条件才能了解链路:正确配置接口的 IP 地址和子网掩码并将链路设置为 up 状态。
过程
- 每台路由器了解其自身的链路(即与其直连的网络)。这通过检测哪些接口处于工作状态来完成。
- 每台路由器负责“问候”直连网络中的相邻路由器。与 EIGRP 路由器相似,链路状态路由器通过直连网络中的其它链路状态路由器互换 Hello 数据包来达到此目的。
- 每台路由器创建一个链路状态数据包 (LSP),其中包含与该路由器直连的每条链路的状态。这通过记录每个邻居的所有相关信息(包括邻居 ID、链路类型和带宽)来完成。
- 每台路由器将 LSP 泛洪到所有邻居,然后邻居将收到的所有 LSP 存储到数据库中。接着,各个邻居将 LSP 泛洪给自己的邻居,直到区域中的所有路由器均收到那些 LSP 为止。每台路由器会在本地数据库中存储邻居发来的 LSP 的副本。
LSP类似如下
LSP 并不需要定期发送,而仅在下列情况下才需要发送:
- 在路由器初始启动期间,或在该路由器上的路由协议进程启动期间
- 每次拓扑发生更改时,包括链路接通或断开,或是相邻关系建立或破裂
- 每台路由器使用数据库构建一个完整的拓扑图并计算通向每个目的网络的最佳路径。就像拥有了地图一样,路由器现在拥有关于拓扑中所有目的地以及通向各个目的地的路由的详图。SPF 算法用于构建该拓扑图并确定通向每个网络的最佳路径
- 构建SPF树
- 由SPF树生成路由表
LS vs DV
与距离矢量路由协议相比,链路状态路由协议有几个优点。
- 创建拓扑图
链路状态路由协议会创建网络结构的拓扑图(即 SPF 树),而距离矢量路由协议没有此功能。使用距离矢量路由协议的路由器仅有一个网络列表,其中列出了通往各个网络的开销(距离)和下一跳路由器(方向)。因为链路状态路由协议会交换链路状态信息,所以 SPF 算法可以构建网络的 SPF 树。有了 SPF 树,每台路由器使可独立确定通向每个网络的最短路径。 - 快速收敛
收到一个链路状态数据包 (LSP) 后,链路状态路由协议便立即将该 LSP 从除接收该 LSP 的接口以外的所有接口泛洪出去。使用距离矢量路由协议的路由器需要处理每个路由更新,并且在更新完路由表后才能将更新从路由器接口泛洪出去,即使对触发更新也是如此。因此链路状态路由协议可更快达到收敛状态。不过 EIGRP 是一个明显的例外。 - 由事件驱动的更新
在初始 LSP 泛洪之后,链路状态路由协议仅在拓扑发生改变时才发出 LSP。该 LSP 仅包含与受影响的链路相关的信息。与某些距离矢量路由协议不同的是,链路状态路由协议不会定期发送更新。
注:OSPF 路由器会 每隔 30 分钟泛洪其自身的链路状态。这称为强制更新,将在后面的章节中讨论。而且,并非所有距离矢量路由协议都定期发送更新。RIP 和 IGRP 会定期发送更新,但 EIGRP 不会。 - 层次式设计
链路状态路由协议(如 OSPF 和 IS-IS )使用了区域的原理。. 多个区域形成了层次状的网络结构,这有利于路由聚合(总结),还便于将路由问题隔离在一个区域内。多区域 OSPF 和 IS-IS 将在 CCNP 课程中进一步讨论。
同时也有一些缺点:
- 内存要求
需要占用更多内存 - CPU占用要求
可能还需要占用更多的 CPU 运算量。与 Bellman-Ford 等距离矢量算法相比,SPF 算法需要更多的 CPU 时间,因为链路状态路由协议会创建完整的拓扑图。 - 带宽要求
链路状态数据包泛洪会对网络的可用带宽产生负面影响。这只应该出现在路由器初始启动过程中,但在不稳定的网络中也可能导致问题。
OSPF报文类型
- Hello 问候分组
- 发现 OSPF 邻居并建立相邻关系。
- 通告两台路由器建立相邻关系所必需统一的参数。
- 在以太网和帧中继网络等多路访问网络中选举指定路由器 (DR) 和备用指定路由器 (BDR)。
两台路由器在建立 OSPF 相邻关系之前,必须统一三个值:Hello 间隔、Dead 间隔和网络类型。
OSPF Hello 间隔表示 OSPF 路由器发送其 Hello 数据包的频度。
Dead 间隔是路由器在宣告邻居进入 down(不可用)状态之前等待该设备发送 Hello 数据包的时长,单位为秒。Cisco 所用的默认断路间隔为 Hello 间隔的四倍。
如果 Dead 间隔已到期,而路由器仍未收到邻居发来的 Hello 数据包,则会从其链路状态数据库中删除该邻居。路由器会将该邻居连接断开的信息通过所有启用了 OSPF 的接口以泛洪的方式发送出去。
为减小多路访问网络中的 OSPF 流量,OSPF 会选举一个指定路由器 (DR) 和一个备用指定路由器 (BDR)。当多路访问网络中发生变化时,DR 负责使用该变化信息更新其它所有 OSPF 路由器(称为 DROther)。BDR 会监控 DR 的状态,并在当前 DR 发生故障时接替其角色。
- DBD 数据库描述分组 Database description
数据包包含发送方路由器的链路状态数据库的简略列表,接收方路由器使用本数据包与其本地链路状态数据库对比。 - LSR 链路状态请求分组 link state request
接收方路由器可以通过发送链路状态请求 (LSR) 数据包来请求 DBD 中任何条目的有关详细信息。 - LSU 链路状态更新 link state update
链路状态更新 (LSU) 数据包用于回复 LSR 和通告新信息。LSU 包含七种类型的链路状态通告 (LSA)。LSU 和 LSA 将在下一主题中简略讨论。 - LASck 链路状态确认 link state acknowledgment
路由器收到 LSU 后,会发送一个链路状态确认 (LSAck) 数据包来确认接收到了 LSU。
距离管理
管理距离 (AD) 是路由来源的可信度(即优先程度)。OSPF 的默认管理距离为 110。如图所示,与其它内部网关协议 (IGP) 相比,OSPF 比 IS-IS 和 RIP 优先。
DR/BDR选举
RouteID
OSPF 路由器 ID 用于唯一标识 OSPF 路由域内的每台路由器。一个路由器 ID 其实就是一个 IP 地址。Cisco 路由器按下列顺序根据下列三个条件确定路由器 ID:
- 使用通过 OSPF router-id 命令配置的 IP 地址。
- 如果未配置 router-id,则路由器会选择其所有环回接口的最高 IP 地址。
- 如果未配置环回接口,则路由器会选择其所有物理接口的最高活动 IP 地址。
选举方式
DR 和 BDR 是如何选出的呢?选举过程遵循以下条件:
- DR:具有最高 OSPF 接口优先级的路由器
- BDR:具有第二高 OSPF 接口优先级的路由器
- 如果 OSPF 接口优先级相等,则取路由器 ID 最高者。
DR/BDR的邻居,可以在show ip interface中看到
选举时机
DR 一旦选出,将保持 DR 地位,直到出现下列条件之一为止:
- DR 发生故障。
- DR 上的 OSPF 进程发生故障。
- DR 上的多路访问接口发生故障。
同样地,如果BDR发生故障,而DR不发生故障,则DR不会变,DROther中RouteID最高的称为新的BDR,所以DR的RouteID可能<BDR的RouteID
命令
修改优先级
RA(config)# interface fa0/0
RA(config-if)# ip ospf priority 200
show ip ospf
show ip protocol
show ospf interface
show ip ospf neighbor
修改链路开销有两个方法
Router(config-if)#bandwidth 64
R1(config-if)#ip ospf cost 1562