CCIE学习(36)―― OSPF数据库交换(一)

OSPF 中,定义了五类消息用来交换链路状态广播( link-state advertisements LSA )。交换 LSA 的过程不论在单域还是多域都差不多。
 
OSPF 路由器 ID
OSPF 路由器在发送消息之前,首先要选择一个唯一的 32 位标识作为其路由器标识( RID )。 Cisco 路由器通过下列步骤来选择:
1 )先看是否在 router ospf 下用子命令 router-id id 配置了路由器 ID ,如果有即选择它。
2 )再选择当前 up and up ”(物理和协议均 up )的 loopback 接口上最大 IP 地址。
3 )再选择当前 up and up ”的非 loopback 接口上最大 IP 地址。
虽然这个过程很简单,但还是有一些需要引起注意的:
1 )获得 RID 的接口不一定要与 OSPF network 命令匹配。
2 OSPF 不必广播路由到 RID 的子网。
3 )对 IP 路由表而言, RID 也不必可达。
4 )当 OSPF 进程启动时,都是从当前接口状态来选择 RID
5 )如果 OSPF 进程重启或通过配置改变了 RID ,路由器会考虑改变 OSPF RID
6 )如果路由器 RID 改变了,在同一域的其他路由器必须重新进行 SPF 计算。
7 )如果 RID 是通过 router-id 命令配置的,那么只要该命令不改变,路由器 RID 就不会变。
 
发现邻接路由器,交换数据库,建立邻接关系
OSPF 使用 IP 包(协议 89 )来封装五类消息,具体如下:
1 Hello 消息:用来发现邻接路由器,建立邻接关系为 2 路状态,并监测邻接路由器的响应。
2 )数据库描述( DD DBD )消息:用来交换每个 LSA 的摘要版本,一般出现在初始拓扑交换中,这样路由器可以获悉邻接路由器的 LSA 列表。
3 )链路状态请求( LSR )消息:请求一个或多个 LSA ,通告邻接路由器提供 LSA 的详细信息给发送路由器。
4 )链路状态更新( LSU )消息:包含 LSA 的详细信息,一般用来响应 LSR 消息。
5 )链路状态应答( LSAck )消息:用来确认收到 LSU 消息。
这些消息可以支持路由器发现邻接路由器( Hello ),学习它们自己链路状态库( link-state database LSDB )中没有的 LSA DD ),请求并可靠交换 LSA LSR/LSU ),以及监测邻接路由器是否有发生拓扑改变( Hello )。注意 LSA 本身不是 OSPF 的消息,它是一类数据结构,存放在路由器的 LSDB 中,并可包含在 LSU 消息中进行交换。
OSPF LSDB 交换过程:
OSPF 路由器为每个邻接路由器维护一个状态机,可以使用 show ip ospf neighbor 命令显示当前邻接路由器的状态。随着 LSDB 交换的进行,邻接路由器的状态也会随之改变,最后稳定在完全状态( full state ),意味着建立了完全的邻接关系。
LSDB 交换进程详解:
1 )成为邻接路由器( Hello 进程)
Hello 消息的三大功能:在子网中发现其他 OSPF 路由器;检查配置参数是否一致;监测邻接路由器健康状况。
为了发现邻接路由器, Cisco OSPF 路由器在其所有激活 OSPF 的接口上监听发向 224.0.0.5 的多点传送 Hello 消息。 Hello 消息的源地址为路由器接口上的主 IP 地址。当两台路由器通过 Hello 消息互相发现之后,路由器会作如下参数检查:必须通过认证;必须在同一主子网内(包括掩码也要相同);必须在同一 OSPF 域;必须有同样的域类型;必须 RID 无重复; OSPF Hello Dead 定时器必须相等。只有所有检查通过,两台路由器才可以建立邻接关系。注意:两台路由器的 OSPF 进程号(通过 router ospf process-id 命令配置)不需要匹配。另外,虽然 MTU 值在传送 DD 包时需要相等,但其检查并不在 Hello 消息中出现。
建立邻接关系之后,邻接路由器每隔 hello 间隔发送 Hello 消息,如果在长于 dead 间隔的时间内没有接收到来自邻接路由器的 Hello 消息,那么即认为该邻接路由器失效。 Hello 间隔默认在 LAN 接口是 10 秒, T1 和更慢的 WAN 接口是 30 秒;而 dead 间隔默认为 hello 间隔的 4 倍。
2 )广播 LSA 头信息到邻接路由器
当两台路由器建立邻接关系之后,并不急于发送包含 LSA 的包,而是先创建并发送 DD 包(其中包含了每个 LSA 的头信息)。这些头信息可以用来唯一地标识每个 LSA DD 消息的传输使用的是 OSPF 定义的简单错误恢复过程。每个 DD 包分配一个序列号,接收端通过发送一个与接收到的 DD 包相同的包来进行确认。发送端使用的窗口大小为 1 ,确认之后再发送下一个 DD 包。
3 )数据库描述交换:主 / 从关系
在邻接关系建立起来之后(邻接关系的 ExStart 阶段),邻接路由器需要在数据库交换时确定哪个路由器是主路由器,哪个路由器是从路由器。拥有最高 RID 的路由器为主路由器,它可以发起数据库交换。此时,主路由器向从路由器发送 DD 包,而从路由器进行确认,在整个 DD 交换过程中只有主路由器可以增加序列号。
4 )请求、获得并应答 LSA
通过 LSA 头信息的交换,每台路由器获悉了邻接路由器的 LSA 列表,利用这些信息,路由器可以请求那些其 LSDB 中没有的 LSA 的完全版本。
要确定邻接路由器是否拥有一个 LSA 的更新版本,路由器需要在其 LSDB 中查看 LSA 的序列号,并与收到的 DD 包中的 LSA 的序列号进行比较。如果 DD LSA 头信息的序列号更大,那么路由器就知道邻接路由器拥有更新的 LSA ,它会请求其发送该 LSA 的完全版本。(注意: LSA 的起始序列号为 0x80000001 ,每次递增 1 ,然后到 0x7FFFFFFF 又重新从 0x80000000 开始。如果 LSA 的序列号为 0x80000000 LSA 必须在全网重新洪泛一次)
路由器使用 LSR 来请求 LSA 。邻接路由器响应包含所需 LSA 完全版本的 LSU 。该进程完成,两台路由器进入完全状态,这表示它们之间完整交换过数据库,它们的 LSDB 记录一致。
LSR/LSU 进程使用可靠协议,所以需要进行应答。应答方式有两种:一种是直接使用收到的 LSU 包应答发送者,另一种是发送 LSAck 包来应答(其中包含了应答 LSA 信息头的列表)。

你可能感兴趣的:(职场,Cisco,休闲,ospf)