大家好,我是小弗。上篇《图解 OSPF 》,只是描述了协议的完整过程,并解释了文中出现的专用名词,看完能对 OSPF 有一个全流程的了解。OSPF 的专用名词也比较多,这次索性把常见的名词整理出来,以供大家(也包括我自己)学习和参考。按照惯例,先来一张全景图,一眼就能看完文章的主要内容,方便阅读和查找。
Router-ID
Router-ID 用于标识 OSPF 路由器,是一个 32 位的数值,跟 IPv4 地址格式一样,比如:192.168.100.1 。连续的 OSPF 路由器组成的网络叫做 OSPF 域,域内 Router-ID 必须唯一,也就是在同一个域内不允许出现两台相同 Router-ID 的路由器。Router-ID 可以手动设置,也可以自动生成,常见的做法是把设备的 Router-ID 指定为设备的 Loopback 接口的 IP 地址。
Loopback 接口
Loopback 接口也就是本地回环接口,是一种软件的、逻辑的接口,不只网络设备支持 Loopback 接口,Windows 主机或 Linux 主机也支持。根据业务需求,在网络设备上创建 Loopback 接口,并配置 IP 地址。Loopback 接口非常稳定,除非手动进行关闭或删除,否则是永远不会失效的。正因如此,Loopback 接口常用于设备网管、网络测试、网络协议应用等。
OSPF 三张表
OSPF 使用三种表格确保能正常运行。
邻居表( Peer Table )
在 OSPF 交互 LSA 之前,两台直连路由器需要建立 OSPF 邻居关系。当一个接口激活 OSPF 后,就会周期性的发送 OSPF Hello 报文,同时侦听 Hello 报文从而发现直连链路上的邻居。在接口上发现邻居后,邻居的信息会写入路由器的 OSPF 邻居表,随后一个邻接关系的建立过程也开始了。
链路状态数据库( Link-State Database ,LSDB )
OSPF 路由器在网络中泛洪的链路状态信息,叫做 LSA( Link-State Advertisement ,链路状态通告)。路由器搜集 LSA 并添加到自己的 LSDB 中,路由器通过 LSDB 获取网络的完整信息。OSPF 定义了多种类型的 LSA ,这些 LSA 各有用途,最终目的是让路由器知道网络的拓扑结构以及网段信息,并计算出最短路径树,从而发现到达全网各个网段的路由。
OSPF 路由表( Routing Table )
OSPF 根据 LSDB 中的数据,运行 SPF 算法,得到一棵以自己为根、无环的最短路径树,基于这棵树,OSPF 能够发现到达网络中各个网段的最佳路径,从而得到路由信息,并添加到 OSPF 路由表中。当然,这些 OSPF 路由表中的路由最终是否被添加到全局路由器,还需要经过比较路由优先级等过程。
度量值
每种路由协议对度量值的定义是不同的,OSPF 使用 Cost(开销)作为路由度量值,Cost 值越小,则路径(路由)越优。每一个激活 OSPF 的接口都有一个接口的 Cost 值,值等于 100/接口带宽 Mbit/s,计算结果取整数部分,当结果小于 1 时,值取 1 。这个值也可以人为修改,修改值会直接影响 Cost 值的计算,从而影响网络中 OSPF 路由的选择。
报文类型及格式
OSPF 协议的报文直接使用 IP 封装,在 IP 报文头部对应的协议号是 89 。通常 OSPF 的协议报文使用组播地址作为目的 IP 地址,有两个组播 IP 地址是 OSPF 专用。
224.0.0.5:这个组播 IP 地址是指所有的 OSPF 路由器。
224.0.0.6:这个组播 IP 地址是指所有的 OSPF DR 路由器。
OSPF 一共定义了五种报文,各有各的用途。
路由器的接口一旦激活 OSPF ,就会开始发送 Hello 报文。Hello 报文的一个重要功能就是发现直连链路上的 OSPF 邻居。发现邻居后,就开始邻接关系的建立。这个过程中,DD 报文用于发送 LSA 的头部摘要。通过 DD 报文的交互,路由器知道了对方所有的 LSA ,而 LSR 向对方请求完整的 LSA 。LSU 对 LSR 进行回应,或者主动更新 LSA ,LSU 包含完整的 LSA 数据。LSAck 保证 OSPF 更新机制的可靠性。此外,Hello 报文负责 OSPF 邻居关系的维护,两台直连路由器形成邻接关系后,双方仍然周期性的发送 Hello 报文,告知对方自己是在线状态。
所有 OSPF 报文是相同的头部,这个头部的长度是 24 字节。