4. 通过 PPP 传输带标签的数据包
点对点协议(Point-to-Point Protocol, PPP)[6] 提供了一种通过点到点链路传输多协议数据报的标准方法。PPP 定义了一个可扩展的链路控制协议(Link Control Protocol), 并提出了一系列用于建立和配置不同网络层协议的网络控制协议族(Network Control Protocols)。
本节定义了用于在 PPP 上建立和配置标签交换(label Switching)的网络控制协议。
4.1. 简介
PPP 有三个主要组成部分:
-
一种用于封装多协议数据报的方法。
-
一个用于建立、配置和测试数据链路连接的链路控制协议(LCP)。
-
一系列用于建立和配置不同网络层协议的网络控制协议族。
为了在点对点链路上建立通信, PPP 链路的两端必须首先发送 LCP 数据包来配置和测试数据链路。在链路建立之后, 并且 LCP 根据需要协商了可选的功能之后, PPP 必须发送"MPLS 控制协议"(MPLS Control Protocol)数据包, 以启用带标签数据包的传输。一旦"MPLS 控制协议"达到了 Opened 状态, 就可以在链路上发送带标签的数据包。
链路将保持配置好的通信状态, 直到显式的 LCP 或 MPLS 控制协议数据包关闭链路, 或者直到发生某些外部事件(不活动定时器超时或网络管理员干预)。
4.2. 用于 MPLS 的 PPP 网络控制协议
MPLS 控制协议(MPLSCP)负责在 PPP 链路上启用和禁用标签交换的使用。它使用与链路控制协议(LCP)相同的包交换机制。在 PPP 达到网络层协议阶段(Network-Layer Protocol phase)之前, MUST NOT 交换 MPLSCP 数据包。在此阶段之前接收到的 MPLSCP 数据包应该被静默丢弃。
MPLS 控制协议与链路控制协议 [6] 完全相同, 除了以下几点例外:
-
帧的修改
数据包 MAY 使用在链路建立阶段协商过的、对基本帧格式所作的任何修改。
-
数据链路层协议字段
恰好一个 MPLSCP 数据包被封装在 PPP 的 Information 字段中, 其中 PPP 的 Protocol 字段指示类型十六进制 8281(MPLS)。
-
Code 字段
只使用 Code 1 到 7(Configure-Request、Configure-Ack、Configure-Nak、Configure-Reject、Terminate-Request、Terminate-Ack 和 Code-Reject)。其他的 Code 应该被视为无法识别, 并应该导致 Code-Reject。
-
超时
在 PPP 达到网络层协议阶段之前, MUST NOT 交换 MPLSCP 数据包。一个实现应该准备好等待认证和链路质量判定(Link Quality Determination)完成之后, 再对等待 Configure-Ack 或其他响应进行超时处理。建议实现仅在用户干预或经过了可配置的一段时间后才放弃。
-
配置选项类型
无(None)。
4.3. 发送带标签的数据包
在任何带标签的数据包可以被传输之前, PPP MUST 达到网络层协议阶段, 并且 MPLS 控制协议 MUST 达到 Opened 状态。
恰好一个带标签的数据包被封装在 PPP 的 Information 字段中, 其中 PPP 的 Protocol 字段指示类型十六进制 0281(MPLS Unicast, MPLS 单播)或类型十六进制 0283(MPLS Multicast, MPLS 组播)。通过 PPP 链路传输的带标签数据包的最大长度, 与 PPP 封装数据包的 Information 字段的最大长度相同。
Information 字段本身的格式如第 2 节所定义。
请注意, 为带标签的数据包定义了两个 codepoint: 一个用于组播, 一个用于单播。一旦 MPLSCP 达到了 Opened 状态, 标签交换的组播和标签交换的单播都可以通过 PPP 链路发送。
4.4. 标签交换控制协议的配置选项
没有任何配置选项。