跳到主要内容

5. 用于 Diff-Serv 支持的 RSVP 扩展

MPLS 架构不假定单一标签分发协议. [RSVP_MPLS_TE] 定义了用于在 MPLS 网络中建立 LSP 的 RSVP 扩展. 本节规定超出 [RSVP_MPLS_TE] 所定义内容的 RSVP 扩展, 以便在 MPLS 网络中建立支持差分服务的 LSP.

5.1. 与 Diff-Serv 相关的 RSVP 消息格式​

本文档定义了一个新的 RSVP Object: DIFFSERV Object. 下文给出该 Object 的详细描述. 该新 Object 适用于 Path 消息. 本规范仅定义在用于按 [RSVP_MPLS_TE] 建立 LSP Tunnels 的 Path 消息中使用 DIFFSERV Object, 因此这些消息包含 C-Type 等于 LSP_TUNNEL_IPv4 的 Session Object, 并包含 LABEL_REQUEST object.

  • [RSVP_MPLS_TE] 中为通过 RSVP 支持建立 LSP Tunnels 而定义的限制, 也适用于支持 Diff-Serv 的 LSP Tunnels 的建立: 例如, 仅支持单播 LSP, 组播 LSP 留待进一步研究.

该新 DIFFSERV object 相对于 RSVP 是可选的, 从而与 MPLS LSP 建立无关的通用 RSVP 实现不必支持该 object.

按 [RSVP_MPLS_TE] 的定义, DIFFSERV Object 对于支持 LSP Tunnels 是可选的. 支持使用预配置 EXP<-->PHB mapping' 且符合本规范的 E-LSP 的 Diff-Serv 能力 LSR MAY 支持 DIFFSERV Object. 支持使用信令 EXP<-->PHB mapping' 且符合本规范的 E-LSP 的 Diff-Serv 能力 LSR MUST 支持 DIFFSERV Object. 支持符合本规范的 L-LSP 的 Diff-Serv 能力 LSR MUST 支持 DIFFSERV Object.

5.1.1. Path 消息格式​

Path 消息的格式如下:

         <Path Message> ::=       <Common Header> [ <INTEGRITY> ]
<SESSION> <RSVP_HOP>
<TIME_VALUES>
[ <EXPLICIT_ROUTE> ]
<LABEL_REQUEST>
[ <SESSION_ATTRIBUTE> ]
[ <DIFFSERV> ]
[ <POLICY_DATA> ... ]
[ <sender descriptor> ]

<sender descriptor> ::= <SENDER_TEMPLATE> <SENDER_TSPEC>
[ <ADSPEC> ]
[ <RECORD_ROUTE> ]

5.2. DIFFSERV Object​

DIFFSERV object 的格式如下所示. 当前有两种可能的 C_Type. Type 1 是用于 E-LSP 的 DIFFSERV object. Type 2 是用于 L-LSP 的 DIFFSERV object.

5.2.1. 用于 E-LSP 的 DIFFSERV object​

class = 65, C_Type = 1

       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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | MAPnb |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MAP (1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
// ... //
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MAP (MAPnb) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Reserved (28 bits): 该字段保留. 发送时必须置为零, 接收时必须忽略.

  • MAPnb (4 bits): 指示 DIFFSERV Object 中包含的 MAP 项数量. 可设置为 0 到 8 的任意值.

  • MAP (32 bits): 每个 MAP 项定义一个 EXP 字段值与一个 PHB 之间的映射. MAP 项具有下列格式:

       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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | EXP | PHBID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Reserved (13 bits): 该字段保留. 发送时必须置为零, 接收时必须忽略.

  • EXP (3 bits): 该字段包含本 MAP 项所定义的 `EXP<-->PHB mapping' 的 EXP 字段值.

  • PHBID (16 bits): 该字段包含本 MAP 项所定义的 `EXP<-->PHB mapping' 的 PHB 的 PHBID. PHBID 按 [PHBID] 规定编码.

5.2.2. 用于 L-LSP 的 DIFFSERV object​

class = 65, C_Type = 2

       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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | PSC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Reserved (16 bits): 该字段保留. 发送时必须置为零, 接收时必须忽略.

  • PSC (16 bits): PSC 指示该 LSP 要支持的 PHB Scheduling Class. PSC 按 [PHBID] 规定编码.

5.3. 处理 DIFFSERV Object​

为使用 RSVP 建立 LSP tunnel, 发送方创建会话类型为 LSP_Tunnel_IPv4 且带有 LABEL_REQUEST object 的 Path 消息, 如 [RSVP_MPLS_TE] 所述.

为使用 RSVP 建立使用预配置 `EXP<-->PHB mapping' 的 E-LSP tunnel, 发送方创建 Path 消息:

  • 会话类型为 LSP_Tunnel_IPv4,

  • 带有 LABEL_REQUEST object, 以及

  • 不带 DIFFSERV object.

为使用 RSVP 建立使用预配置 `EXP<-->PHB mapping' 的 E-LSP tunnel, 发送方 MAY 另选创建 Path 消息:

  • 会话类型为 LSP_Tunnel_IPv4,

  • 带有 LABEL_REQUEST object, 以及

  • 带有不包含 MAP 项的用于 E-LSP 的 DIFFSERV object.

为使用 RSVP 建立使用信令 `EXP<-->PHB mapping' 的 E-LSP tunnel, 发送方创建 Path 消息:

  • 会话类型为 LSP_Tunnel_IPv4,

  • 带有 LABEL_REQUEST object,

  • 带有用于 E-LSP 的 DIFFSERV object, 其中为该 E-LSP 上要支持的每个 EXP 值包含一个 MAP 项.

为使用 RSVP 建立 L-LSP tunnel, 发送方创建 Path 消息:

  • 会话类型为 LSP_Tunnel_IPv4,

  • 带有 LABEL_REQUEST object,

  • 带有用于 L-LSP 的 DIFFSERV object, 其中包含该 L-LSP 上支持的 PHB Scheduling Class (PSC).

如果 path 消息包含多个 DIFFSERV object, 则仅第一个有意义; 后续 DIFFSERV object 必须被忽略且不得转发.

路径上的每个 LSR 在 path state block 中记录 DIFFSERV object (若存在).

如果 Path 消息中不存在 DIFFSERV object, LSR SHOULD 将其解释为对使用预配置 `EXP<-->PHB mapping' 的 E-LSP 的请求. 然而, 为与 [RSVP_MPLS_TE] 允许的其他非 Diff-Serv 服务质量选项 (例如 Integrated Services Controlled Load 或 Guaranteed Services) 保持向后兼容, LSR MAY 支持可配置的 "override option". 当配置了该 "override option" 时, LSR 将不带 Diff-Serv object 的 path 消息解释为对具有此类非 Diff-Serv 服务质量的 LSP 的请求.

如果 Path 消息中存在不包含 MAP 项的用于 E-LSP 的 DIFFSERV object, LSR MUST 将其解释为对使用预配置 EXP<-->PHB mapping' 的 E-LSP 的请求. 特别地, 这允许已配置 "override option" 的 LSR 在支持具有非 Diff-Serv 服务质量的 LSP 的同时, 支持具有预配置 EXP<-->PHB mapping' 的 E-LSP.

如果 Path 消息中存在至少包含一个 MAP 项的用于 E-LSP 的 DIFFSERV object, LSR MUST 将其解释为对具有信令 `EXP<-->PHB mapping' 的 E-LSP 的请求.

如果 Path 消息中存在用于 L-LSP 的 DIFFSERV object, LSR MUST 将其解释为对 L-LSP 的请求.

E-LSP 或 L-LSP 的目的 LSR 通过发送 Resv 消息来响应包含 LABEL_REQUEST object 的 Path 消息:

  • 带有 LABEL object

  • 不带 DIFFSERV object.

假定标签请求被接受且已分配标签, Diff-Serv LSR (发送方, 目的方, 中间节点) 必须:

  • 按前述各节规定 (入向与出向标签) 更新其 ILM/FTN 中与已建立 LSP 关联的 Diff-Serv Context,

  • 为该 NHLFE (出向标签) 安装所需的 Diff-Serv 转发处理 (调度与丢弃行为).

识别 DIFFSERV object 且收到包含 DIFFSERV object 但不包含 LABEL_REQUEST object 或会话类型不是 LSP_Tunnel_IPv4 的 path 消息的 LSR, 向发送方发送 PathErr, 错误码为 Diff-Serv Error', 错误值为 Unexpected DIFFSERV object'. 这些在下文第 5.5 节定义.

收到用于 E-LSP 的 DIFFSERV object 的 Path 消息, 识别 DIFFSERV object 但不支持一个或多个 MAP 项中编码的特定 PHB 的 LSR, 向发送方发送 PathErr, 错误码为 Diff-Serv Error', 错误值为 Unsupported PHB'. 这些在下文第 5.5 节定义.

收到用于 E-LSP 的 DIFFSERV object 的 Path 消息, 识别 DIFFSERV object 但判定所信令的 EXP<-->PHB mapping' 无效的 LSR, 向发送方发送 PathErr, 错误码为 Diff-Serv Error', 错误值为 Invalid EXP<-->PHB mapping'. 这些在下文第 5.5 节定义. 用于 E-LSP 的 DIFFSERV Object 中信令的 EXP<-->PHB mapping' 在下列情况下无效:

  • MAPnb 字段不在 0 到 8 的范围内, 或

  • 某个给定 EXP 值出现在多于一个 MAP 项中, 或

  • PHBID 编码无效.

收到用于 L-LSP 的 DIFFSERV object 的 Path 消息, 识别 DIFFSERV object 但不支持 PSC 字段中编码的特定 PSC 的 LSR, 向发送方发送 PathErr, 错误码为 Diff-Serv Error', 错误值为 Unsupported PSC'. 这些在下文第 5.5 节定义.

收到 DIFFSERV object 的 Path 消息, 识别 DIFFSERV object 但无法分配所需的每 LSP Diff-Serv 上下文的 LSR, 发送 PathErr, 错误码为 "Diff-Serv Error", 错误值为 "Per-LSP context allocation failure". 这些在下文第 5.5 节定义.

Diff-Serv LSR MUST 按 [RSVP_MPLS_TE] 处理标签请求因本节已讨论原因之外的原因而不能被接受的情况 (例如准入控制拒绝预留, 无法关联标签).

5.4. 不支持 DIFFSERV Object​

不识别 DIFFSERV object Class-Num 的 LSR MUST 按 [RSVP] 对格式为 0bbbbbbb 的未知 Class-Num 规定的规程行为, 即它必须向发送方发送错误码为 `Unknown object class' 的 PathErr.

识别 DIFFSERV object Class-Num 但不识别 DIFFSERV object C-Type 的 LSR, 必须按 [RSVP] 对未知 C-type 规定的规程行为, 即它必须向发送方发送错误码为 `Unknown object C-Type' 的 PathErr.

在这两种情况下, 这会导致路径建立失败. 发送方应通知管理: 无法建立 L-LSP, 并可能采取行动在不带 DIFFSERV object 的情况下重试 LSP 建立 (例如, 作为回退策略尝试使用具有预配置 `EXP<-->PHB mapping' 的 E-LSP).

5.5. Diff-Serv 错误码​

在上述规程中, 某些错误必须报告为 Diff-Serv Error'. Diff-Serv Error' 错误码的值为 27.

下列定义 Diff-Serv Error 的错误值:

      Value    Error

1 Unexpected DIFFSERV object
2 Unsupported PHB
3 Invalid `EXP<-->PHB mapping'
4 Unsupported PSC
5 Per-LSP context allocation failure

5.6. Intserv 服务类型​

E-LSP 与 L-LSP 都可在有或无带宽预留的情况下建立.

如 [RSVP_MPLS_TE] 所规定, 为建立带带宽预留的 E-LSP 或 L-LSP, 使用 Int-Serv 的 Controlled Load 服务 (或可能使用 Guaranteed Service), 并在 path (相应地 Resv) 消息的 SENDER_TSPEC (相应地 FLOWSPEC) 中信令带宽.

如 [RSVP_MPLS_TE] 所规定, 为建立不带带宽预留的 E-LSP 或 L-LSP, 使用 [NULL] 中规定的 Null Service.

注意, 本规范定义 E-LSP 与 L-LSP 的用法仅用于支持 Diff-Serv 服务. 不论 Intserv 服务 (Controlled Load, Null Service, Guaranteed Service,...) 如何, 也不论预留是否带带宽预留, 此处定义的 E-LSP 与 L-LSP 均用于支持 Diff-Serv 服务. 在 MPLS Diff-Serv 骨干上支持 Int-Serv 服务超出本规范范围.

另请注意, 本规范不涉及 [DCLASS] 中定义的 DCLASS object, 因为该 object 传达 DSCP 值信息, 而该信息在 MPLS 网络内部并不相关.