跳到主要内容

3.5.1. 通知消息

LSR 发送通知 (Notification) 消息, 以将某个重要事件告知 LDP 对等体。通知消息用于信号致命错误, 或提供建议性信息, 例如处理某条 LDP 消息的结果或 LDP 会话的状态。

通知消息的编码为:

 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| Notification (0x0001) | Message Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Status (TLV) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Optional Parameters |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Message ID

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

Status TLV

表示正在信号的事件。Status TLV 的编码在 "Status TLV" 一节中规定。

Optional Parameters

该可变长度字段包含 0 个或多个参数, 每个参数编码为一个 TLV。以下可选参数是通用的, 可以出现在任何通知消息中:

      Optional Parameter     Type     Length  Value

Extended Status 0x0301 4 See below
Returned PDU 0x0302 var See below
Returned Message 0x0303 var See below

也可能出现其他可选参数, 它们特定于通知消息正在信号的具体事件; 这些参数在其他地方描述。

Extended Status

该 4 字节值是一个 Extended Status Code, 它编码附加信息, 以补充通知 Status Code 中所包含的状态信息。

Returned PDU

LSR 使用该参数将某个 LDP PDU 的一部分返回给发送该 PDU 的 LSR。该 TLV 的值是 PDU 头部, 以及紧随头部之后、相对于通知消息所信号的条件而言适当的那部分 PDU 数据。

Returned Message

LSR 使用该参数将某条 LDP 消息的一部分返回给发送该消息的 LSR。该 TLV 的值是消息的类型和长度字段, 以及紧随类型和长度字段之后、相对于通知消息所信号的条件而言适当的那部分消息数据。

3.5.1.1. 通知消息过程​

如果 LSR 遇到某种情况, 需要以建议性或错误信息通知其对等体, 它就向该对等体发送一条通知消息, 其中包含编码该信息的 Status TLV, 以及可选的其他 TLV 以提供关于该情况的更多信息。

如果该情况属于致命错误, 则通知中携带的 Status Code 会表明这一点。在这种情况下, 发送该通知消息之后, 该 LSR 应当 (SHOULD) 通过关闭会话 TCP 连接来终止该 LDP 会话, 并丢弃与该会话关联的所有状态, 包括通过该会话学到的所有标签-FEC 绑定。

当 LSR 收到携带表示致命错误的 Status Code 的通知消息时, 它 应当 (SHOULD) 立即通过关闭会话 TCP 连接来终止该 LDP 会话, 并丢弃与该会话关联的所有状态, 包括通过该会话学到的所有标签-FEC 绑定。

上述说明不适用于会话初始化过程中对 Shutdown 消息的处理。当 LSR 在会话初始化期间收到 Shutdown 消息时, 它 应当 (SHOULD) 发送一条 Shutdown 消息, 然后关闭传输连接。

3.5.1.2. 由通知消息信号的事件​

出于描述方便, 将通知消息所信号的事件分为以下类别是有用的。

3.5.1.2.1. 畸形 PDU 或消息​

作为 LDP 发现机制一部分的畸形 LDP PDU 或消息, 通过静默丢弃来处理。

在某个 LDP 会话的 TCP 连接上收到的 LDP PDU 在以下情况下是畸形的:

  • PDU 头部中的 LDP Identifier 对接收方是未知的, 或者它是已知的, 但不是接收方为此 LDP 会话与该 LDP 对等体关联的 LDP Identifier。这是由 Bad LDP Identifier Status Code 信号的致命错误。

  • 该 LDP 协议版本不为接收方所支持, 或者它被支持但不是会话建立期间为该会话协商的版本。这是由 Bad Protocol Version Status Code 信号的致命错误。

  • PDU Length 字段太小 (小于 14) 或太大 (大于最大 PDU 长度)。这是由 Bad PDU Length Status Code 信号的致命错误。 "Initialization Message" 一节描述了如何确定会话的最大 PDU 长度。

LDP 消息在以下情况下是畸形的:

  • Message Type 未知。

    如果 Message Type 小于 0x8000 (高位 = 0), 则这是由 Unknown Message Type Status Code 信号的错误。

    如果 Message Type 大于等于 0x8000 (高位 = 1), 则静默丢弃它。

  • Message Length 太大, 即指示该消息延伸到包含它的 LDP PDU 末尾之外。这是由 Bad Message Length Status Code 信号的致命错误。

  • Message Length 太小, 即小于可能的最小值组成部分。这是由 Bad Message Length Status Code 信号的致命错误。

  • 该消息缺少一个或多个必需参数 (Mandatory Parameters)。这是由 Missing Message Parameters Status Code 信号的非致命错误。

3.5.1.2.2. 未知或畸形 TLV​

作为 LDP 发现机制一部分的 LDP 消息中所包含的畸形 TLV, 通过静默丢弃包含它的消息来处理。

在某个 LDP 会话 TCP 连接上收到的 LDP 消息中所包含的 TLV, 在以下情况下是畸形的:

  • TLV Length 太大, 即指示该 TLV 延伸到包含它的消息末尾之外。这是由 Bad TLV Length Status Code 信号的致命错误。

  • TLV 类型未知。

    如果 TLV 类型小于 0x8000 (高位 = 0), 则这是由 Unknown TLV Status Code 信号的错误。

    如果 TLV 类型大于等于 0x8000 (高位 = 1), 则静默丢弃该 TLV。

  • TLV Value 畸形。当接收方处理该 TLV 但无法解码该 TLV Value 时, 会发生这种情况。这被解释为表明发送方或接收方 LSR 存在缺陷。这是由 Malformed TLV Value Status Code 信号的致命错误。

3.5.1.2.3. 会话 KeepAlive Timer 到期​

这是由 KeepAlive Timer Expired Status Code 信号的致命错误。

3.5.1.2.4. 单方面会话关闭​

这是由 Shutdown Status Code 信号的致命事件。通知消息可以可选地包含一个 Extended Status TLV, 以提供关闭的原因。发送方 LSR 在发送该通知后立即终止会话。

3.5.1.2.5. 初始化消息事件​

如果初始化消息中收到的会话参数不可接受, 会话初始化协商 (见 "Session Initialization" 一节) 就可能失败。这是致命错误。具体的 Status Code 取决于被认为不可接受的参数, 并在 "Initialization Message" 各节中定义。

3.5.1.2.6. 由其他消息产生的事件​

初始化消息以外的消息可能产生必须通过通知消息向 LDP 对等体信号的事件。这些事件以及用于信号它们的通知消息中所使用的 Status Code, 在描述这些消息的各节中说明。

3.5.1.2.7. 内部错误​

LDP 实现可能能够检测其实现特有的问题情况。当这种情况使实现无法与对等体正确交互时, 该实现应当 (在能够做到时) 使用 Internal Error Status Code 向对等体发出信号。这是致命错误。

3.5.1.2.8. 杂项事件​

这些是不属于上述任何类别的事件。本版本协议中没有定义杂项事件。