一、点对点隧道协议PPTP(Point-to-Point Tunneling Protocol)
PPTP将PPP(Point-to-Point Protocol)帧封装进IP数据报中,通过IP网络如Internet或其他企业专用Intranet等发送。PPTP具体文档请参阅RFC 2637。
PPTP通过PPTP控制连接来创建、维护、终止一条隧道,并使用通用路由封装GRE(Generic Routing Encapsulation)对PPP帧进行封装。封装前,PPP帧的有效载荷即有效传输数据首先必须经过加密、压缩或是两者的混合处理。
PPTP协议假定在PPTP客户机和PPTP服务器之间有连通且可用的IP网络。因此如果PPTP客户机本身已经是某IP网络的组成部分,那么即可通过该IP网络与PPTP服务器取得连接;而如果PPTP客户机尚未连入网络,譬如在Internet拨号用户的情形下,PPTP客户机必须首先拨打NAS以建立IP连接。这里所说的PPTP客户机也就是使用PPTP协议的VPN客户机,而PPTP服务器亦即使用PPTP协议的VPN服务器。
在创建基于PPTP的VPN连接过程中,使用的认证机制与创建PPP连接时相同。此类认证机制主要有:扩展身份认证协议EAP(Extensible Authentication Protocol)、微软询问握手认证协议MS-CHAP(Microsoft Challenge-Handshake Authentication Protocol)、CHAP 、Shiva口令字认证协议SPAP(Shiva Password Authentication Protocol)和口令字认证协议PAP(Password Authentication Protocol)。PPTP继承PPP有效载荷的加密和压缩。在Windows 2000中,由于PPP帧使用微软点对点加密技术MPPE(Microsoft Point-to-Point Encryption)进行加密,因此认证机制必须采用EAP或MS-CHAP。
MPPE只提供连接加密,而不提供端-端加密。端-端加密属于应用层的加密技术,如果应用中要求实现端-端加密,则可在PPTP隧道建立之后,使用IPSec对两端的IP数据流进行加密处理。基于Internet的PPTP服务器即使用PPTP协议的VPN服务器,它的一个接口在Internet上,另一个接口在Intranet上。
二、PPTP控制连接与隧道维护
PPTP控制连接建立在PPTP客户机IP地址和PPTP服务器IP地址之间,PPTP客户机使用动态分配的TCP端口号,而PPTP服务器则使用保留TCP端口号1723。PPTP控制连接携带PPTP呼叫控制和管理信息,用于维护PPTP隧道,其中包括周期性地发送回送请求和回送应答消息,以期检测出客户机与服务器之间可能出现的连接中断。
PPTP控制连接数据包包括一个IP报头,一个TCP报头和PPTP控制信息,数据包格式见图八。图八所示的PPTP控制连接数据包还包括数据链路层报头和报尾。
图八、PPTP控制连接数据包
三、PPTP数据封装
PPTP数据的隧道化过程采用多层封装的方法。图九显示了封装后在隧道中传输的数据包格式。
[[The No.9 Picture.]]
图九、在隧道中传输的PPTP数据包格式
1)PPP帧的封装
初始PPP有效载荷如IP数据报、IPX数据报或NetBEUI帧等经过加密后,添加PPP报头,封装形成PPP帧。PPP帧再进一步添加GRE报头,经过第二层封装形成GRE报文。GRE是采用第47号IP协议的客户端协议,为在IP网络上进行数据封装提供了一种简单,轻巧的通用机制。有关GRE详细文档可参见RFC 1701和RFC 1702。在GRE报头中,协议类型即PPP帧的EtherType值应设置为0x880B。
2)GRE报文的封装 PPP有效载荷的第三层封装是在GRE报文外,再添加IP报头。IP报头包含数据包源端及目的端IP地址。
3)数据链路层封装 数据链路层封装是IP数据报多层封装的的最后一层,依据不同的外发物理网络再添加相应的数据链路层报头和报尾。例如,如果IP数据报将在以太网上传输,则用以太网报头和报尾对IP数据报进行数据链路层封装;如果IP数据报将在点-点WAN上传输,如模拟电话网或ISDN等,则用PPP报头和报尾对IP数据报进行数据链路层封装。
4)PPTP数据包的接收处理 PPTP客户机或PPTP服务器在接收到PPTP数据包后,将做如下处理:
1.处理并去除数据链路层报头和报尾
2.处理并去除IP报头
3.处理并去除GRE和PPP报头
4.如果需要的话,对PPP有效载荷即传输数据进行解密或解压缩。
5.对传输数据进行接收或转发处理
四、PPTP数据包和Windows 2000网络体系结构
下图描述了某使用模拟modem进行远程访问的VPN连接中,VPN客户机端数据报在Windows 2000网络体系结构中的封装流程。
[[The No.10 Picture.]]
图十、PPTP数据包的封装流程
具体步骤如下:
1.IP数据报、IPX数据报或NetBEUI帧由各自协议提交给对应于VPN连接的虚拟接口。该接口符合网络驱动程序接口规范NDIS。
2.NDIS将数据报提交给NDISWAN,由NDISWAN负责对数据进行加密、压缩处理后,添加PPP报头进行第一步封装。该PPP报头仅含一个PPP协议标识域,不附加任何帧校正序列FCS或其他标记。
3.NDISWAN将PPP帧提交给PPTP协议驱动程序,该驱动程序负责在PPP帧外添加GRE报头进行第二步封装。该GRE报头中,Call ID域的值唯一地标识了一条隧道。
4.PPTP协议驱动程序将GRE报文提交给TCP/IP协议驱动程序。
5.TCP/IP协议驱动程序再对GRE报文添加IP报头进行第三步封装,封装后提交给拨往本地ISP的拨号连接接口,该接口符合网络驱动程序接口规范NDIS。
6.NDIS再次将数据报提交给NDISWAN,NDISWAN给数据报添加PPP报头、报尾进行最后的数据链路层封装。
7.NDISWAN将最终形成的PPP帧提交给与拨号硬件相对应的WAN微端口驱动程序。(例如modem连接中的异步端口)