简介
点对点隧道协议(PPTP)是广泛使用的虚拟专用网络协议。 PPTP 是用于在中间网络上传输点对点协议(PPP)帧的一种隧道机制。 通过利用 PPP 的身份验证、加密和协议配置机制,PPTP 连接同时为远程访问和路由器到路由器的虚拟专用网(VPN)连接提供了一条在公共网络(比如:Internet)上创建安全连接的途径。
PPTP是对端对端协议(PPP)的一种扩展,它采用了PPP所提供的身份验证、压缩与加密机制。PPTP能够随TCP/IP协议一道自动进行安装。PPTP与Microsoft端对端加密(MPPE)技术提供了用以对保密数据进行封装与加密的VPN服务。 MPPE将通过由MS-CHAP、MS-CHAP v2身份验证过程所生成的加密密钥对PPP帧进行加密。为对PPP帧中所包含的有效数据进行加密,虚拟专用网络客户端必须使用MS-CHAP、MS-CHAP v2身份验证协议。
GRE协议:GRE(generic routing encapsulation,通用路由封装)协议是对某些网络层协议的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议中传输。
PPTP控制连接创建
在PPTP建立连接过程中,客户端先向服务器1723端口发送TCP连接请求,这里的TCP连接不是标准的三次握手,第三次回应的ACK会随着载荷一起发送,这样做的好处是可以节省一些网络流量,减少不必要的开销。在TCP连接完成以后,PPTP进入控制连接的建立
PPTP 控制连接建立步骤
TCP 连接由 PPTP 客户机上的一个动态分配的 TCP 端口到 PPTP 服务器上的 TCP 端口 1723 建立。
PPTP 客户端发送一条 PPTP
Start-Control-Connection-Request
(开始控制连接请求)消息,后者将用于建立一个 PPTP 控制连接。PPTP服务器使用一条 PPTP
Start-Control-Connection-Reply
(开始控制连接应答)消息予以响应。PPTP 客户端发送一条 PPTP
Outgoing-Call-Request
(传出调用请求)消息,并选择一个调用ID,识别用于将数据从 PPTP 客户端发送到 PPTP 服务器的 PPTP 隧道。PPTP 客户端使用 PPTPOutgoing-Call-Request
消息从 PPTP 服务器请求一个 PPTP 隧道(也称为调用)。PPTP 服务器发送一条 PPTP
Outgoing-Call-Reply
(传出调用应答)消息,并选择自身的调用ID,识别将数据从 PPTP 服务器发送到 PPTP 客户端的 PPTP 隧道。PPTP 客户端发送一条 PPTP
Set-Link-Info
(设置链路信息)消息来指定 PPTP 协商选项。
控制连接创建过程的最终结果
PPTP 服务器已允许创建一个 PPTP 隧道
PPTP 客户端已确定了在通过 PPTP 隧道向 PPTP 服务器发送数据时在 GRE 报头中使用的调用ID
PPTP 服务器已确定了在通过 PPTP 隧道向 PPTP 客户端发送数据时在 GRE 报头中使用的调用ID
具体报文
Start-control-connection-request报文
由PPTP客户端发出,请求建立控制连接;
Length
该 PPTP 信息的八位总长,包括整个 PPTP 头。
Message Type
信息类型。可能值有:1、控制信息;2、管理信息。
Magic Cookie
Magic Cookie 以连续的 0x1A2B3C4D 进行发送,其基本目的是确保接收端与 TCP数据流间的正确同步运行。
Control Message Type
值为1;
Reserved 0 & 1
保留字段,必须设置为0。
Protocol Version
PPTP版本号。
Framing Capabilities
指出帧类型,该信息发送方可以提供:1、异步帧支持(Asynchronous Framing Supported);2、同步帧支持(Synchronous Framing Supported)。
Bearer Capabilities
指出承载性能,该信息发送方可以提供:1、模拟访问支持(Analog Access Supported);2、数字访问支持(Digital access supported)。
Maximum Channels
该 PPTP服务器 可以支持的个人 PPP 会话总数。
Firmware Revision
若由 PPTP服务器 出发,则包括发出 PPTP服务器时的固件修订本编号;若由 PPTP客户端 出发,则包括 PPTP客户端 PPTP 驱动版本。
Host Name
包括发行的 PPTP服务器 或 PPTP客户端的 DNS 名称。
Vendor Name
包括特定供应商字串,指当请求是由 PPTP客户端 提出时,使用的 PPTP服务器 类型或 PPTP客户端软件类型。
Start-Control-Connection-Reply报文
PPTP服务器对Star-Control-Connection-Request回应;
大部分的含义与Start-control-connection-request一致。不同的字段含义如下
Control Message Type
值为2;
Result Code
表示建立channal是否成功的结果码,值为1表示成功,值为2表示通用错误,暗示着有问题。值为3表示channal已经存在,值为4表示请求者未授权,值为5表示请求的PPTP协议版本不支持。
Error Code
表示错误码,一般值为0,除非Result Code值为2,不同的错误码表示不同的含义。(即:只有当Result Code值为2时,Error Code才有其它值)
Outgoing-call-request报文
由PPTP客户机发出,请求创建PPTP隧道,该消息包含GRE报头中call id, 该id可唯一地标识一条隧道;
Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:
Control Message Type
值为7。
Call ID
由PPTP客户端指定的唯一的会话ID。
Call Serial Number
是由PPTP客户端指定的唯一标识符,用于在记录会话信息中标识特定会话,与Call ID不一样的是,Call Serial Number PPTP客户端与PPTP服务器来说,唯一绑定到一个给定的会话,且是相同的。
Minimum BPS
对于此次会话可接受的最低传输速度,单位为位/秒;
Maximum BPS
对于此次会话可接受的最大传输速度,单位为位/秒;
Bearer Type
指出承载访问支持,该信息发送方可以提供:1、模拟访问支持(Analog Access Supported);2、数字访问支持(Digital access supported)。3、可支持的任何类型。
Framing Type
指出帧类型,该信息发送方可以提供:1、异步帧支持(Asynchronous Framing Supported);2、同步帧支持(Synchronous Framing Supported)。 3、异步或同步帧支持。
Packet Receive window size
PPTP客户端为此次会话提供最大接收缓冲大小;
Packet Processing Delay
表示PPTP客户端对数据包处理的延时度量,对于PPTP客户端来说,一般设置比较小越好。
Phone number length
拔号号码长度;
Phone number
建立会话向外拔号的号码,一般对于ISDN或模拟方式拔号来说,此字段域为一个ASCII串。一般长度少于64个字节。
Sub address
额外信息域,一般长度少于64个字节。
Outgoing-Call-Reply报文
PPTP服务器对Outgoing-Call-Request回应
Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:
Control Message Type
值为8。
Call ID
由PPTP服务器指定的唯一的会话ID。主要用于在PPTP服务器与PPTP客户端建立的会话上,复用与解封装隧道包使用的。
Peer Call ID
设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用。
Result Code
表示响应Outgoing-call-request握手是否成功,值为1表示成功,值为2表示通用错误,暗示着有问题。值为3表示无载波,值为4表示服务器忙,无法及时响应,值为5表示无拔号音,值为6表示呼号超时,值为7表示未授权。
Error Code
表示错误码,一般值为0,除非Result Code值为2,不同的错误码表示不同的含义。
Cause Code
表示进一步错误信息描述;
Connect Speed
连接使用的实际速率;
Physical Channel ID
由PPTP服务器指定的物理信道ID。
Set-Link-Info报文
由PPTP客户机或服务器任一方发出,设置PPP协商选项
Control Message Type
值为15。
Peers Call ID
设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用。
Reserved0/Reserve1
保留位,必须为0;
Send ACCM
发送的ACCM值,默认值为0XFFFFFFFF;
Receive ACCM
接收的ACCM值,默认值为0XFFFFFFFF;
Echo request报文
PPTP隧道维护报文,每60S发送一次;
Control Message Type
值为5。
Peers Call ID
设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用。
Reserved0
保留位,必须为0;
Identifier
发送者用来标识Echo request与Echo reply对应标识。
Echo-reply报文
PPTP隧道维护报文,对Echo request的回应报文;
Control Message Type
值为6。
Peers Call ID
设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用。
Reserved0/1
保留位,必须为0;
Identifier
标识值,为接收者从Echo request里标识字段复制填入。
Result Code
结果码,为1表示Echo-reply是有效的,为2表示出现一般性错误。
Call-Clear-Request报文
由PPTP客户机发出,请求终止隧道;
Control Message Type
值为12。
Call ID
由PPTP客户端指定的会话ID。
Call-Disconnect-Notify报文
PPTP服务器对Call-Clear-Request回应或者其他原因指示必须终止隧道;
Control Message Type
值为13。
Call ID
由PPTP客户端指定的会话ID。
Result Code
结果码,为1表示媒介断开,为2表示出现一般性错误,为3表示为管理员关闭连接,为4表示收到Call-Clear-Request;
Error code
同上面所描述的。
Cause Code
此域表示额外说明断开原因。
Stop-Control-Connection-Request报文
由PPTP客户机或者服务器任一方发出,通知对端控制连接将被终止;
Control Message Type
值为3。
Resverve
保留位,必须为0;
Reason
表示会话连接关闭的原因,为1表示响应会话清除请求,为2表示不支持对端PPTP版本,为3表示本地系统关闭
Stop-Control-Connection-Reply报文
回应Stop-Control-Connection-Request消息;
Control Message Type
值为4。
Resverve
保留位,必须为0;
Result Code
表示关闭连接结果码,为1表示正常关闭成功,为2表示发生一般性错误。
Error Code
表示当结果为2时,对应具体的一般性错误,Result Code为1时,必须为0