跳到主要内容

3.5.2. Hello 消息

LDP Hello 消息作为 LDP 发现机制的一部分进行交换; 见 "LDP Discovery" 一节。

Hello 消息的编码为:

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0| Hello (0x0100) | Message Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Common Hello Parameters TLV |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Optional Parameters |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Message ID

用于标识本消息的 32 位值。

Common Hello Parameters TLV

规定所有 Hello 消息共有的参数。Common Hello Parameters TLV 的编码为:

    0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| Common Hello Parms(0x0400)| Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Hold Time |T|R| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Hold Time

Hello 保持时间, 以秒为单位。LSR 维护一份从潜在对等体收到的 Hello 记录 (见 "Hello Message Procedures" 一节)。Hello Hold Time 规定发送方 LSR 在未收到另一个 Hello 的情况下, 将保持其关于接收方 LSR 的 Hello 记录的时间。

一对 LSR 协商它们彼此使用的 Hello 保持时间。每一方提出一个保持时间。所使用的保持时间取双方 Hello 中所提出的保持时间的最小值。

取值为 0 表示使用默认值, 即链路 Hello (Link Hello) 为 15 秒, 定向 Hello (Targeted Hello) 为 45 秒。取值为 0xffff 表示无限。

T, Targeted Hello

取值为 1 表示该 Hello 是定向 Hello。取值为 0 表示该 Hello 是链路 Hello。

R, Request Send Targeted Hellos

取值为 1 请求接收方向本 Hello 的源周期性发送定向 Hello。取值为 0 不提出请求。

发起扩展发现的 LSR 将 R 置为 1。如果 R 为 1, 接收方 LSR 检查它是否被配置为响应该请求, 向 Hello 源发送定向 Hello。如果没有配置, 它忽略该请求。如果已配置, 它启动向 Hello 源周期性发送定向 Hello。

Reserved

该字段保留。发送时必须置为零, 接收时忽略。

Optional Parameters

Hello 消息的这个可变长度字段包含 0 个或多个参数, 每个参数编码为一个 TLV。本版本协议定义的可选参数为:

   Optional Parameter         Type     Length  Value

IPv4 Transport Address 0x0401 4 See below
Configuration 0x0402 4 See below
Sequence Number
IPv6 Transport Address 0x0403 16 See below

IPv4 Transport Address

规定发送方 LSR 在打开 LDP 会话 TCP 连接时要使用的 IPv4 地址。如果该可选 TLV 不存在, 则 应当 (SHOULD) 使用承载该 Hello 的 UDP 分组的 IPv4 源地址。

Configuration Sequence Number

规定一个 4 字节无符号配置序列号, 用于标识发送方 LSR 的配置状态。接收方 LSR 用它来检测发送方 LSR 上的配置变化。

IPv6 Transport Address

规定发送方 LSR 在打开 LDP 会话 TCP 连接时要使用的 IPv6 地址。如果该可选 TLV 不存在, 则 应当 (SHOULD) 使用承载该 Hello 的 UDP 分组的 IPv6 源地址。

3.5.2.1. Hello 消息过程​

从另一台 LSR 接收 Hello 的 LSR 维护一个对应于这些 Hello 的 Hello 邻接。该 LSR 为该 Hello 邻接维护一个保持定时器 (hold timer), 每当收到匹配该 Hello 邻接的 Hello 时就重启它。如果某个 Hello 邻接的保持定时器到期, 该 LSR 就丢弃该 Hello 邻接: 见 "Maintaining Hello Adjacencies" 和 "Maintaining LDP Sessions" 两节。

我们建议 Hello 发送间隔至多为 Hello 保持时间的三分之一。

LSR 按如下方式处理收到的 LDP Hello:

  1. 该 LSR 检查该 Hello 是否可接受。判定 Hello 是否可接受的标准依赖于实现 (示例标准见下文)。

  2. 如果该 Hello 不可接受, 该 LSR 忽略它。

  3. 如果该 Hello 可接受, 该 LSR 检查它是否拥有针对该 Hello 源的 Hello 邻接。如果有, 它重启该 Hello 邻接的保持定时器。如果没有, 它为 Hello 源创建一个 Hello 邻接并启动其保持定时器。

  4. 如果该 Hello 携带任何可选 TLV, 该 LSR 处理它们 (见下文)。

  5. 最后, 如果该 LSR 没有针对该 Hello 的 PDU 头部中 LDP Identifier 所指定的标签空间的 LDP 会话, 则它遵循 "LDP Session Establishment" 一节的各过程。

以下是链路 Hello 和定向 Hello 可接受性标准的示例:

  • 如果收到某个链路 Hello 的接口已被配置用于标签交换, 则该链路 Hello 可接受。

  • 来自源地址 A 的定向 Hello 在以下任一情况下可接受:

    • 该 LSR 已被配置为接受定向 Hello, 或者

    • 该 LSR 已被配置为向 A 发送定向 Hello。

以下描述 LSR 如何处理 Hello 的可选 TLV:

Transport Address

该 LSR 将指定的传输地址与该 Hello 邻接关联起来。

Configuration Sequence Number

发送方 LSR 使用 Configuration Sequence Number 可选参数向接收方 LSR 信号配置变化。当在 LDP 会话建立中扮演主动角色的接收方 LSR 检测到发送方 LSR 的配置变化时, 它可以清除与发送方 LSR 关联的会话建立退避延迟 (如果有的话) (见 "Session Initialization" 一节)。

使用该可选参数的发送方 LSR 负责维护它在 Hello 消息中发送的配置序列号。每当发送方 LSR 上发生配置变化时, 它就递增该配置序列号。