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 网络内部并不相关.