1 PPTP概述

      PPTP(Point to Point Tunneling Protocol),即点对点隧道协议。该协议是PPP协议的基础上开发的一种新的增强型安全协议。可以使远程用户拨入ISP、通过直接连接Internet或者其他网络安全地访问企业网。

      PPTP实现需要完成2个动作:协商PPTP/GRE隧道和协商建立PPTP虚拟链路,PPTP和FTP类似,是一种多通道协议,具体而言,即PPTP存在控制通道和数据通道。控制通道建立在PPTP客户端和服务器之间,PPTP客户机使用动态分配的TCP端口号,而PPTP则使用保留TCP端口号1723。控制通道用于PPTP隧道的协商和维护。PPTP控制通道协商数据包包括一个IP包头,一个TCP报头和PPTP控制消息:

   

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_客户端

      PPTP控制消息报文格式:

   

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_客户端_02

     

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_TCP_03

     数据通道则用于数据的转发,将原来的Ethernet数据包先封装成PPP packet,再使用增强GRE进行封装,通过Internet传送至接收端,数据报文的封装格式:

   

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_服务器_04

2 简要协商过程

   

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_pptp_05

      TCP连接由PPTP客户端上分配的动态分配的端口到PPTP服务器的TCP端口1723建立,简要建立过程如下

  1. PPTP客户机使用动态分配的TCP端口号,与PPTP服务器使用的保留号1723建立控制连接
  2. 客户端与服务器通过控制连接来创建、维护和终止一条数据通道
  3. PPP帧的有效载荷经过加密、压缩等处理
  4. 使用GRE对PPP帧进行封装
  5. 将PPP帧封装入IP数据包中
  6. 服务器收到PPTP报文后进行解封装处理

       下面是PPTP协商和维护隧道使用的控制报文类型:

     

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_客户端_06

3 PPTP协商的报文分析

(1)客户端向服务器发起控制连接请求Start-Control-Connection-Request,PPTP作为TCP的载荷,目的端口号是1723

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_客户端_07

(2)服务器给客户端发送请求相应报文Start-Control-Connection-Reply

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_客户端_08

(3)客户端向服务器发送Outgoing-Call-Request报文,设置Call ID,Call ID是客户端的标识,每条连接对应一对Call ID,该报文中客户端将自己的Call ID发送给服务器,Call ID还有另外一个用途就是ALG应用,此处不做讨论。

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_pptp_09

(4)服务器回应客户端Outgoing-Call-Reply报文,表示控制通道建立完毕。

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_客户端_10

(5)接下来是Set-Link-Info,用于设置链路参数。

PPTP拨入反馈Peer refused to agree to our IP address pptp拨号_TCP_11

至此,PPTP控制通道建立完毕,接下来是标准的PPP协商,即LCP协商->认证协商->IPCP协商,这部分内容在《PPPoE客户端连接协商过程》已经进行过分析,因此这里不再赘述。