2. 控制连接协议规范 (Control Connection Protocol Specification)
控制连接消息用于建立和清除用户会话。第一组控制连接消息用于维护控制连接本身。在 PNS 或 PAC 建立底层 TCP 连接后,由它们发起控制连接。确定建立哪些 TCP 连接所需的过程和配置信息不在本协议的范围内。
以下控制连接消息都作为用户数据在给定 PNS-PAC 对之间建立的 TCP 连接上发送。请注意,已注意确保所有字 (2 字节) 和长字 (4 字节) 值在适当的边界上开始。所有数据按网络字节序发送(高位字节在前)。任何"保留"字段必须 (MUST) 作为 0 值发送以允许协议可扩展性。
2.1. Start-Control-Connection-Request (启动控制连接请求)
Start-Control-Connection-Request 是用于在 PNS 和 PAC 之间建立控制连接的 PPTP 控制消息。每个 PNS-PAC 对都需要建立专用的控制连接。在发出任何其他 PPTP 消息之前,必须 (MUST) 建立控制连接。控制连接的建立可以由 PNS 或 PAC 发起。第 3.1.3 节描述了处理 PNS 和 PAC Start-Control-Connection-Request 之间发生冲突的过程。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protocol Version | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Framing Capabilities |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Bearer Capabilities |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Maximum Channels | Firmware Revision |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Host Name (64 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Vendor String (64 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。此常量值用作接收消息的合理性检查(参见第 1.4 节)。
Control Message Type(控制消息类型)
1 表示 Start-Control-Connection-Request。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Protocol Version(协议版本)
发送方希望使用的 PPTP 协议版本。
Reserved1(保留字段 1)
此字段必须 (MUST) 为 0。
Framing Capabilities(成帧能力)
一组位,指示此消息发送方可以提供的成帧类型。当前定义的位设置为:
- 1 - 支持异步成帧 (Asynchronous Framing supported)
- 2 - 支持同步成帧 (Synchronous Framing supported)
Bearer Capabilities(承载能力)
一组位,指示此消息发送方可以提供的承载能力。当前定义的位设置为:
- 1 - 支持模拟访问 (Analog access supported)
- 2 - 支持数字访问 (Digital access supported)
Maximum Channels(最大信道数)
此 PAC 可以支持的单个 PPP 会话的总数。在由 PNS 发出的 Start-Control-Connection-Request 中,此值应该 (SHOULD) 设置为 0。PAC 必须 (MUST) 忽略此值。
Firmware Revision(固件版本)
当由 PAC 发出时,此字段包含发出的 PAC 的固件修订号;当由 PNS 发出时,包含 PNS PPTP 驱动程序的版本。
Host Name(主机名)
包含发出的 PAC 或 PNS 的 DNS 名称的 64 字节字段。如果长度小于 64 字节,则此字段的其余部分应该 (SHOULD) 用值为 0 的字节填充。
Vendor Name(供应商名称)
包含供应商特定字符串的 64 字节字段,描述正在使用的 PAC 类型,或如果此请求由 PNS 发出,则描述正在使用的 PNS 软件类型。如果长度小于 64 字节,则此字段的其余部分应该 (SHOULD) 用值为 0 的字节填充。
2.2. Start-Control-Connection-Reply (启动控制连接回复)
Start-Control-Connection-Reply 是响应收到的 Start-Control-Connection-Request 消息而发送的 PPTP 控制消息。此消息包含一个结果代码,指示控制连接建立尝试的结果。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protocol Version | Result Code | Error Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Framing Capability |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Bearer Capability |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Maximum Channels | Firmware Revision |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Host Name (64 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Vendor String (64 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
2 表示 Start-Control-Connection-Reply。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Protocol Version(协议版本)
发送方希望使用的 PPTP 协议版本。
Result Code(结果代码)
指示命令通道建立尝试的结果。当前有效的结果代码值为:
- 1 - 成功建立通道
- 2 - 一般错误 -- 错误代码指示问题
- 3 - 命令通道已存在
- 4 - 请求者未被授权建立命令通道
- 5 - 不支持请求者的协议版本
Error Code(错误代码)
除非存在"一般错误",否则此字段设置为 0,在这种情况下,结果代码设置为 2,此字段设置为与第 2.2 节中指定的一般错误条件相对应的值。
Framing Capabilities(成帧能力)
一组位,指示此消息发送方可以提供的成帧类型。当前定义的位设置为:
- 1 - 支持异步成帧
- 2 - 支持同步成帧
Bearer Capabilities(承载能力)
一组位,指示此消息发送方可以提供的承载能力。当前定义的位设置为:
- 1 - 支持模拟访问
- 2 - 支持数字访问
Maximum Channels(最大信道数)
此 PAC 可以支持的单个 PPP 会话的总数。在由 PNS 发出的 Start-Control-Connection-Reply 中,此值应该 (SHOULD) 设置为 0,并且 PAC 必须 (MUST) 忽略它。PNS 禁止 (MUST NOT) 使用此值来尝试跟踪 PAC 将允许的剩余 PPP 会话数。
Firmware Revision(固件版本)
此字段包含发出的 PAC 的固件修订号,或如果由 PNS 发出,则包含 PNS PPTP 驱动程序的版本。
Host Name(主机名)
包含发出的 PAC 或 PNS 的 DNS 名称的 64 字节字段。
Vendor String(供应商字符串)
包含供应商特定字符串的 64 字节字段。
2.3. Stop-Control-Connection-Request (停止控制连接请求)
Stop-Control-Connection-Request 是由 PAC-PNS 控制连接的一个对等方发送的 PPTP 控制消息,用于通知另一个对等方应该关闭控制连接。除了关闭控制连接之外,所有活动的用户呼叫都会被隐式清除。发出此请求的原因在 Reason 字段中指示。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reason | Reserved1 | Reserved2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
3 表示 Stop-Control-Connection-Request。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Reason(原因)
指示关闭控制连接的原因。当前有效的原因值为:
- 1 (None) - 清除控制连接的一般请求
- 2 (Stop-Protocol) - 无法支持对等方的协议版本
- 3 (Stop-Local-Shutdown) - 请求者正在关闭
Reserved1, Reserved2(保留字段 1, 2)
这些字段必须 (MUST) 为 0。
2.4. Stop-Control-Connection-Reply (停止控制连接回复)
Stop-Control-Connection-Reply 是 PAC-PNS 控制连接的一个对等方在收到另一个对等方的 Stop-Control-Connection-Request 后发送的 PPTP 控制消息。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Result Code | Error Code | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
4 表示 Stop-Control-Connection-Reply。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Result Code(结果代码)
指示关闭控制连接尝试的结果。当前有效的结果代码值为:
- 1 (OK) - 控制连接已关闭
- 2 (General Error) - 由于错误代码中指示的原因,控制连接未关闭
Error Code(错误代码)
除非存在"一般错误",否则此字段设置为 0,在这种情况下,结果代码设置为 2,此字段设置为与第 2.2 节中指定的一般错误条件相对应的值。
Reserved1(保留字段 1)
此字段必须 (MUST) 为 0。
2.5. Echo-Request (回显请求)
Echo-Request 是由 PAC-PNS 控制连接的任一对等方发送的 PPTP 控制消息。此控制消息用作控制连接的"保持活动"。接收对等方对收到的每个 Echo-Request 发出一个 Echo-Reply。如第 3.1.4 节所述,如果发送方未收到对 Echo-Request 的 Echo-Reply 响应,它最终将清除控制连接。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
5 表示 Echo-Request。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Identifier(标识符)
在相应的 Echo-Reply 中回显的 32 位值。
2.6. Echo-Reply (回显回复)
Echo-Reply 是 PAC-PNS 控制连接的任一对等方响应收到的 Echo-Request 而发送的 PPTP 控制消息。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Result Code | Error Code | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
6 表示 Echo-Reply。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Identifier(标识符)
从收到的 Echo-Request 的标识字段的内容被复制到此字段。
Result Code(结果代码)
指示接收 Echo-Request 的结果。当前有效的结果代码值为:
- 1 (OK) - Echo-Reply 有效
- 2 (General Error) - 由于错误代码中指示的原因,Echo-Request 未被接受
Error Code(错误代码)
除非存在"一般错误"条件,否则此字段设置为 0,在这种情况下,结果代码设置为 2,此字段设置为与第 2.2 节中指定的一般错误条件相对应的值。
Reserved1(保留字段 1)
此字段必须 (MUST) 为 0。
2.7. Outgoing-Call-Request (出站呼叫请求)
Outgoing-Call-Request 是 PNS 发送给 PAC 的 PPTP 控制消息,用于指示要从 PAC 建立出站呼叫。此请求为 PAC 提供了进行呼叫所需的信息。它还为 PAC 提供了用于在建立会话后调节向 PNS 传输数据的信息。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Call ID | Call Serial Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Minimum BPS |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Maximum BPS |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Bearer Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Framing Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Packet Recv. Window Size | Packet Processing Delay |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Phone Number Length | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Phone Number (64 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Subaddress (64 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
7 表示 Outgoing-Call-Request。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Call ID(呼叫 ID)
由 PNS 分配给此会话的唯一标识符,对于特定的 PAC-PNS 对是唯一的。它用于在参与此会话的 PNS 和 PAC 之间通过隧道发送的数据进行多路复用和解复用。
Call Serial Number(呼叫序列号)
PNS 分配给此会话的标识符,用于在记录的会话信息中识别此特定会话。与呼叫 ID 不同,PNS 和 PAC 都将相同的呼叫序列号与给定会话关联。IP 地址和呼叫序列号的组合应该 (SHOULD) 是唯一的。
Minimum BPS(最小 BPS)
此会话可接受的最低线路速度(位/秒)。
Maximum BPS(最大 BPS)
此会话可接受的最高线路速度(位/秒)。
Bearer Type(承载类型)
指示此出站呼叫所需的承载能力的值。当前定义的值为:
- 1 - 在模拟通道上进行呼叫
- 2 - 在数字通道上进行呼叫
- 3 - 可以在任何类型的通道上进行呼叫
Framing Type(成帧类型)
指示此出站呼叫要使用的 PPP 成帧类型的值。
- 1 - 使用异步成帧的呼叫
- 2 - 使用同步成帧的呼叫
- 3 - 可以使用任一类型成帧的呼叫
Packet Recv. Window Size(数据包接收窗口大小)
PNS 将为此会话缓冲的已接收数据包的数量。
Packet Processing Delay(数据包处理延迟)
对从 PAC 发送到 PNS 的数据可能施加的数据包处理延迟的度量。此值以 1/10 秒为单位指定。对于 PNS,此数字应该非常小。
Phone Number Length(电话号码长度)
电话号码字段中有效数字的实际数量。
Reserved1(保留字段 1)
此字段必须 (MUST) 为 0。
Phone Number(电话号码)
要拨打以建立出站会话的号码。如果少于 64 字节长,则此字段的其余部分用值 0 的字节填充。
Subaddress(子地址)
用于指定拨号信息的附加拨号字符串的 64 字节字段。如果少于 64 字节长,则此字段的其余部分用值 0 的字节填充。
2.8. Outgoing-Call-Reply (出站呼叫回复)
Outgoing-Call-Reply 是 PAC 响应收到的 Outgoing-Call-Request 消息而发送给 PNS 的 PPTP 控制消息。该回复指示出站呼叫尝试的结果。它还向 PNS 提供有关呼叫使用的特定参数的信息,并提供允许 PNS 调节此会话向 PAC 传输数据的信息。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Call ID | Peer's Call ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Result Code | Error Code | Cause Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Connect Speed |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Packet Recv. Window Size | Packet Processing Delay |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Physical Channel ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
8 表示 Outgoing-Call-Reply。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Call ID(呼叫 ID)
此会话的对等方(PAC)的唯一标识符。此值在对等方收到的所有后续呼叫控制消息中用作多路复用密钥。
Peer's Call ID(对等方呼叫 ID)
此值是从相应的 Outgoing-Call-Request 的呼叫 ID 字段中复制的,用于将此回复与发送的 Outgoing-Call-Request 关联起来。
Result Code(结果代码)
指示出站呼叫尝试的结果。当前有效的结果代码值包括:
- 1 (Connected) - 呼叫已连接
- 2 (General Error) - 由于在错误代码中指示的原因,出站呼叫未完成
- 3 (No Carrier) - 出站呼叫失败,因为检测不到载波
- 4 (Busy) - 出站呼叫失败,因为忙信号
- 5 (No Dial Tone) - 出站呼叫失败,因为检测不到拨号音
- 6 (Time-out) - 出站呼叫未在分配的时间内完成
- 7 (Do Not Accept) - 出站呼叫在本地管理上不被接受
Error Code(错误代码)
此字段设置为 0,除非存在一般错误条件(如结果代码 2 所示)。
Cause Code(原因代码)
此字段提供了呼叫断开的附加故障信息。该值通常从电话网络的设施提供。
Connect Speed(连接速度)
指示呼叫连接的实际速度(位/秒)。
Packet Recv. Window Size(数据包接收窗口大小)
PAC 将为此会话缓冲的已接收数据包的数量。
Packet Processing Delay(数据包处理延迟)
对从 PNS 发送到 PAC 的数据可能施加的数据包处理延迟的度量。此值以 1/10 秒为单位指定。
Physical Channel ID(物理通道 ID)
此字段由 PAC 设置为用于此呼叫的物理通道的唯一标识符。其值在日志记录和调试目的中使用。
2.9. Incoming-Call-Request (入站呼叫请求)
Incoming-Call-Request 是由 PAC 发送给 PNS 的 PPTP 控制消息,用于指示已从 PSTN 接收到入站呼叫并已被本地接受。此请求向 PNS 提供有关入站呼叫类型的信息。它还提供用于调节此会话从 PAC 向 PNS 传输数据的信息。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Call ID | Call Serial Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Bearer Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Physical Channel ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Dialed Number Length | Dialing Number Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Dialed Number (64 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Dialing Number (64 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Subaddress (64 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
9 表示 Incoming-Call-Request。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Call ID(呼叫 ID)
由 PAC 分配给此会话的唯一标识符。此值用作所有后续呼叫控制消息中的多路复用密钥。
Call Serial Number(呼叫序列号)
PAC 分配给此会话的标识符,用于在记录的会话信息中识别此特定会话。
Bearer Type(承载类型)
指示入站呼叫的承载能力的值:
- 1 - 模拟通道上的呼叫
- 2 - 数字通道上的呼叫
Physical Channel ID(物理通道 ID)
PAC 为此呼叫使用的物理通道的唯一标识符。
Dialed Number Length(被叫号码长度)
被叫号码字段中有效数字的实际数量。
Dialing Number Length(主叫号码长度)
主叫号码字段中有效数字的实际数量。
Dialed Number(被叫号码)
被呼叫的号码。64 字节字段,不足部分用 0 填充。
Dialing Number(主叫号码)
呼叫方的号码。64 字节字段,不足部分用 0 填充。
Subaddress(子地址)
附加的拨号信息。64 字节字段,不足部分用 0 填充。
2.10. Incoming-Call-Reply (入站呼叫回复)
Incoming-Call-Reply 是 PNS 响应收到的 Incoming-Call-Request 而发送给 PAC 的 PPTP 控制消息。该回复指示 PNS 是否接受入站呼叫。它还提供用于调节此会话从 PNS 向 PAC 传输数据的信息。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Call ID | Peer's Call ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Result Code | Error Code | Packet Recv. Window Size |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Packet Processing Delay | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
10 表示 Incoming-Call-Reply。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Call ID(呼叫 ID)
此会话的对等方(PNS)的唯一标识符。
Peer's Call ID(对等方呼叫 ID)
从相应 Incoming-Call-Request 的呼叫 ID 字段复制的值。
Result Code(结果代码)
指示 PNS 是否接受入站呼叫:
- 1 (Connect) - 接受入站呼叫
- 2 (General Error) - 由于错误代码中指示的原因,入站呼叫未被接受
- 3 (Do Not Accept) - 入站呼叫在管理上不被接受
Error Code(错误代码)
此字段设置为 0,除非存在一般错误条件。
Packet Recv. Window Size(数据包接收窗口大小)
PNS 将为此会话缓冲的已接收数据包的数量。
Packet Processing Delay(数据包处理延迟)
对从 PAC 发送到 PNS 的数据可能施加的数据包处理延迟的度量。此值以 1/10 秒为单位指定。
Reserved1(保留字段 1)
此字段必须 (MUST) 为 0。
2.11. Incoming-Call-Connected (入站呼叫已连接)
Incoming-Call-Connected 是由 PAC 发送给 PNS 的 PPTP 控制消息,用作入站呼叫的最终确认。它提供有关已建立会话的参数信息。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peer's Call ID | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Connect Speed |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Packet Recv. Window Size | Packet Processing Delay |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Framing Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Length(长度)
此 PPTP 消息的总长度(字节数),包括整个 PPTP 头部。
PPTP Message Type(PPTP 消息类型)
1 表示控制消息。
Magic Cookie(魔术 Cookie)
0x1A2B3C4D。
Control Message Type(控制消息类型)
11 表示 Incoming-Call-Connected。
Reserved0(保留字段 0)
此字段必须 (MUST) 为 0。
Peer's Call ID(对等方呼叫 ID)
从相应 Incoming-Call-Reply 的呼叫 ID 字段复制的值。
Reserved1(保留字段 1)
此字段必须 (MUST) 为 0。
Connect Speed(连接速度)
指示呼叫连接的实际速度(位/秒)。
Packet Recv. Window Size(数据包接收窗口大小)
PAC 将为此会话缓冲的已接收数据包的数量。
Packet Processing Delay(数据包处理延迟)
对从 PNS 发送到 PAC 的数据可能施加的数据包处理延迟的度量。此值以 1/10 秒为单位指定。
Framing Type(成帧类型)
指示入站呼叫使用的成帧类型:
- 1 - 异步成帧
- 2 - 同步成帧
2.12. Call-Clear-Request (呼叫清除请求)
Call-Clear-Request 是由 PNS 发送给 PAC 的 PPTP 控制消息,用于指示应断开特定呼叫。发起此请求的原因在 Result Code 字段中指示。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Call ID | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Control Message Type(控制消息类型)
12 表示 Call-Clear-Request。
Call ID(呼叫 ID)
要断开的呼叫的对等方呼叫 ID 值。
2.13. Call-Disconnect-Notify (呼叫断开通知)
Call-Disconnect-Notify 是由 PAC 发送给 PNS 的 PPTP 控制消息,用于指示呼叫已断开。它提供有关断开原因的信息。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Call ID | Result Code | Error Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cause Code | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Call Statistics (128 octets) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Control Message Type(控制消息类型)
13 表示 Call-Disconnect-Notify。
Result Code(结果代码)
指示断开呼叫的原因。
Call Statistics(呼叫统计)
128 字节的字段,包含呼叫的统计信息。
2.14. WAN-Error-Notify (WAN 错误通知)
WAN-Error-Notify 是由 PAC 发送给 PNS 的 PPTP 控制消息,用于指示发生了 WAN 错误情况。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peer's Call ID | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| CRC Errors |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Framing Errors |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Hardware Overruns |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Buffer Overruns |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time-out Errors |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Alignment Errors |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Control Message Type(控制消息类型)
14 表示 WAN-Error-Notify。
CRC Errors(CRC 错误)
自上次发送此消息以来接收到的具有 CRC 错误的 PPP 帧数。
Framing Errors(成帧错误)
具有成帧错误的 PPP 帧数。
Hardware Overruns(硬件溢出)
硬件溢出错误的数量。
Buffer Overruns(缓冲区溢出)
缓冲区溢出错误的数量。
Time-out Errors(超时错误)
超时错误的数量。
Alignment Errors(对齐错误)
对齐错误的数量。
2.15. Set-Link-Info (设置链路信息)
Set-Link-Info 是由 PNS 发送给 PAC 的 PPTP 控制消息,用于设置 PPP 协商参数。
消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | PPTP Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic Cookie |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Message Type | Reserved0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peer's Call ID | Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Send ACCM |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Receive ACCM |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Control Message Type(控制消息类型)
15 表示 Set-Link-Info。
Send ACCM(发送 ACCM)
要在此会话的发送方向使用的异步控制字符映射。
Receive ACCM(接收 ACCM)
要在此会话的接收方向使用的异步控制字符映射。
2.16. General Error Codes (通用错误代码)
以下是在各种 PPTP 控制消息的 Error Code 字段中使用的通用错误代码值:
- 0 - None (无错误)
- 1 - Not-Connected (未连接) - PAC 与 PNS 之间没有控制连接
- 2 - Bad-Format (格式错误) - 消息长度错误或消息格式不正确
- 3 - Bad-Value (值错误) - 消息字段中的值超出范围或无效
- 4 - No-Resource (无资源) - 资源不足以处理此命令
- 5 - Bad-Call ID (呼叫 ID 错误) - 此对等方不知道引用的呼叫 ID
- 6 - PAC-Error (PAC 错误) - PAC 遇到的一般错误
错误代码使用说明
当控制消息中的 Result Code 字段设置为表示一般错误(通常为值 2)时,应使用 Error Code 字段来提供有关该错误性质的更多详细信息。如果 Result Code 不表示一般错误,则 Error Code 字段必须 (MUST) 设置为 0。
这些错误代码旨在为调试和日志记录目的提供有用的诊断信息,帮助识别和解决 PPTP 会话建立和维护过程中的问题。
Section 2 完成 - 本节详细定义了 PPTP 控制连接协议中使用的所有消息类型,包括控制连接管理消息(2.1-2.6)、呼叫控制消息(2.7-2.15)以及通用错误代码(2.16)。