1. 简介 (Introduction)
PPTP允许使用客户端-服务器架构来分离现有的网络接入服务器 (Network Access Server, NAS) 功能。传统上, NAS实现以下功能:
-
与PSTN或ISDN的物理本地接口, 以及对外部调制解调器或终端适配器的控制。
NAS可以直接连接到电信模拟或数字电路, 或通过外部调制解调器或终端适配器连接。电路交换连接的控制通过调制解调器控制或DSS1 ISDN呼叫控制协议来实现。
NAS与调制解调器或终端适配器一起, 可能执行速率适配、模拟到数字转换、同步到异步转换或对数据流的多种其他修改。
-
点对点协议 (Point-to-Point-Protocol, PPP) 链路控制协议 (Link Control Protocol, LCP) 会话的逻辑终结。
-
参与PPP认证协议 [3,9,10]。
-
PPP多链路协议的信道聚合和捆绑管理。
-
各种PPP网络控制协议 (NCP) 的逻辑终结。
-
NAS接口之间的多协议路由和桥接。
PPTP将这些功能在PAC和PNS之间进行划分。PAC负责功能1、2, 可能还有功能3。PNS可能负责功能3, 并负责功能4、5和6。用于在PAC和PNS之间承载PPP协议数据单元 (PDUs) 以及呼叫控制和管理的协议由PPTP解决。
NAS功能解耦提供以下好处:
-
灵活的IP地址管理 (Flexible IP address management): 拨入用户在拨入不同的PAC时可以保持单一的IP地址, 只要它们由同一个PNS提供服务。如果企业网络使用未注册的地址, 则与企业关联的PNS分配对专用网络有意义的地址。
-
支持IP网络后面的拨号网络的非IP协议 (Support of non-IP protocols for dial networks behind IP networks): 这允许例如Appletalk和IPX通过仅支持IP的提供商进行隧道传输。PAC无需能够处理这些协议。
-
"多链路寻线组分割"问题的解决方案 (A solution to the "multilink hunt-group splitting" problem): 多链路PPP通常用于聚合ISDN B信道, 要求组成多链路捆绑的所有信道聚合在单个NAS上。由于多链路PPP捆绑可以由单个PNS处理, 因此组成捆绑的信道可以分布在多个PAC上。
1.1. 协议目标和假设 (Protocol Goals and Assumptions)
PPTP协议仅由PAC和PNS实现。其他系统无需了解PPTP。拨号网络可以连接到PAC而无需了解PPTP。标准PPP客户端软件应当继续在隧道PPP链路上运行。
PPTP也可用于通过IP网络隧道传输PPP会话。在这种配置中, PPTP隧道和PPP会话在同两台机器之间运行, 呼叫方充当PNS。
预计PAC和PNS之间将存在多对多关系。一个PAC可以为许多PNS提供服务。例如, 互联网服务提供商可能选择为多个专用网络客户端支持PPTP并为他们创建VPN。每个专用网络可能运行一个或多个PNS。单个PNS可能与许多PAC关联, 以聚合来自大量地理上分散的站点的流量。
PPTP使用GRE的扩展版本来承载用户PPP数据包。这些增强允许对用于在PAC和PNS之间承载用户数据的隧道提供低级拥塞和流量控制。此机制允许有效使用隧道可用的带宽, 并避免不必要的重传和缓冲区溢出。PPTP不规定用于此低级控制的特定算法, 但它确实定义了为允许此类算法工作而必须通信的参数。第4节包含建议的算法。
1.2. 术语 (Terminology)
Analog Channel (模拟信道)
一种电路交换通信路径, 旨在在每个方向上承载3.1 Khz音频。
Digital Channel (数字信道)
一种电路交换通信路径, 旨在在每个方向上承载数字信息。
Call (呼叫)
PSTN或ISDN上两个终端端点之间的连接或尝试连接, 例如, 两个调制解调器之间的电话呼叫。
Control Connection (控制连接)
为每个PAC、PNS对创建控制连接, 并通过TCP [4] 运行。控制连接管理隧道和分配给隧道的会话的各个方面。
Dial User (拨号用户)
连接到按需PSTN或ISDN的终端系统或路由器, 它是呼叫的发起方或接收方。
Network Access Server (NAS) (网络接入服务器)
为用户提供临时、按需网络接入的设备。此接入使用PSTN或ISDN线路进行点对点通信。
PPTP Access Concentrator (PAC) (PPTP接入集中器)
连接到一条或多条PSTN或ISDN线路的设备, 能够进行PPP操作和处理PPTP协议。PAC只需实现TCP/IP即可将流量传递到一个或多个PNS。它也可以隧道传输非IP协议。
PPTP Network Server (PNS) (PPTP网络服务器)
PNS设计为在通用计算/服务器平台上运行。PNS处理PPTP协议的服务器端。由于PPTP完全依赖于TCP/IP并且独立于接口硬件, 因此PNS可以使用任何IP接口硬件的组合, 包括LAN和WAN设备。
Session (会话)
PPTP是面向连接的。PNS和PAC为连接到PAC的每个用户维护状态。当在拨号用户和PNS之间尝试端到端PPP连接时, 将创建一个会话。与会话相关的数据报通过PAC和PNS之间的隧道发送。
Tunnel (隧道)
隧道由PNS-PAC对定义。隧道协议由GRE [1,2] 的修改版本定义。隧道在PAC和PNS之间承载PPP数据报。多个会话在单个隧道上复用。通过TCP运行的控制连接控制会话和隧道本身的建立、释放和维护。
1.3. 协议概述 (Protocol Overview)
PPTP有两个并行组件: 1) 在每个PAC-PNS对之间通过TCP运行的控制连接, 以及 2) 在同一PAC-PNS对之间运行的IP隧道, 用于传输该对之间用户会话的GRE封装的PPP数据包。
1.3.1. 控制连接概述 (Control Connection Overview)
在PAC和PNS之间可以进行PPP隧道传输之前, 必须在它们之间建立控制连接。控制连接是一个标准的TCP会话, 通过它传递PPTP呼叫控制和管理信息。控制会话在逻辑上与通过PPTP隧道隧道传输的会话相关联, 但是独立的。对于每个PAC-PNS对, 都存在一个隧道和一个控制连接。控制连接负责建立、管理和释放通过隧道承载的会话。它是PNS被通知关联PAC上的传入呼叫的方式, 也是PAC被指示拨出呼叫的方式。
控制连接可以由PNS或PAC建立。在建立所需的TCP连接之后, PNS和PAC使用Start-Control-Connection-Request和-Reply消息建立控制连接。这些消息还用于交换有关PAC和PNS基本操作能力的信息。一旦建立了控制连接, PAC或PNS可以通过请求出站呼叫或响应入站请求来发起会话。控制连接可以使用Set-Link-Info消息传达单个用户会话的操作特性变化。单个会话可以由PAC或PNS通过控制连接消息释放。
控制连接本身通过保活回显消息维护。这确保可以及时检测到PNS和PAC之间的连接故障。其他故障可以通过也在控制连接上的Wan-Error-Notify消息报告。
预期控制连接将来还将承载管理相关消息, 例如允许PNS请求给定PAC状态的消息; 这些消息类型尚未定义。
1.3.2. 隧道协议概述 (Tunnel Protocol Overview)
PPTP要求为每个通信的PNS-PAC对建立一个隧道。此隧道用于承载涉及给定PNS-PAC对的所有用户会话PPP数据包。GRE头部中存在的密钥指示特定PPP数据包属于哪个会话。
以这种方式, PPP数据包在给定PNS-PAC对之间的单个隧道上进行复用和解复用。要在密钥字段中使用的值由在控制连接上进行的呼叫建立过程建立。
GRE头部还包含确认和排序信息, 用于对隧道执行一定程度的拥塞控制和错误检测。同样, 控制连接用于确定用于调节通过隧道为特定会话传输PPP数据包的流量的速率和缓冲参数。PPTP不指定用于拥塞控制和流量控制的特定算法。本文档第4.4节包含用于确定自适应超时以从隧道上丢失的数据或确认中恢复的建议算法。
1.4. 消息格式和协议可扩展性 (Message Format and Protocol Extensibility)
PPTP定义了一组在PNS和给定PAC之间的控制连接上作为TCP数据发送的消息。通过发起到端口1723 [6] 的TCP连接来建立控制连接的TCP会话。源端口分配给任何未使用的端口号。
每个PPTP控制连接消息都以8个八位字节的固定头部部分开始。此固定头部包含以下内容: 消息的总长度、PPTP消息类型指示符和"Magic Cookie"。
PPTP消息类型字段指示两种控制连接消息类型:
- 1 - 控制消息 (Control Message)
- 2 - 管理消息 (Management Message)
管理消息当前未定义。
Magic Cookie始终作为常量0x1A2B3C4D发送。其基本目的是允许接收方确保它与TCP数据流正确同步。它不应该用作在发送方发出格式不正确的消息时重新同步TCP数据流的手段。同步丢失必须导致立即关闭控制连接的TCP会话。
为清楚起见, 下一节中的所有控制连接消息模板都包括完整的PPTP控制连接消息头部。前面带有0x的数字是十六进制值。
当前定义的控制消息按功能分组如下:
控制消息 (Control Message) - 消息代码 (Message Code)
(控制连接管理, Control Connection Management)
- Start-Control-Connection-Request - 1
- Start-Control-Connection-Reply - 2
- Stop-Control-Connection-Request - 3
- Stop-Control-Connection-Reply - 4
- Echo-Request - 5
- Echo-Reply - 6
(呼叫管理, Call Management)
- Outgoing-Call-Request - 7
- Outgoing-Call-Reply - 8
- Incoming-Call-Request - 9
- Incoming-Call-Reply - 10
- Incoming-Call-Connected - 11
- Call-Clear-Request - 12
- Call-Disconnect-Notify - 13
(错误报告, Error Reporting)
- WAN-Error-Notify - 14
(PPP会话控制, PPP Session Control)
- Set-Link-Info - 15
Start-Control-Connection-Request和-Reply消息确定将使用哪个版本的控制连接协议。这些消息中携带的版本号字段由高八位字节中的版本号和低八位字节中的修订号组成。版本处理在第2节中描述。版本号字段的当前值是0x0100, 表示版本1, 修订版0。
第4.1节指定了用于封装PPP用户数据包的类GRE头部的使用。
封装在GRE中的用户数据包的MTU为1532个八位字节, 不包括IP和GRE头部。