Chinaunix首页 | 论坛 | 博客
  • 博客访问: 411438
  • 博文数量: 96
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 415
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-22 09:08
个人简介

最近的研究方向:Nginx

文章分类
文章存档

2017年(2)

2016年(59)

2015年(35)

我的朋友

分类: 网络与安全

2016-04-12 10:45:42

本文转自:http://blog.csdn.net/zhaqiwen/article/details/10083025
首先,先来理解下什么是 PPTP。PPTP将PPP(Point-to-Point Protocol)帧封装进IP数据报中,通过IP网络如Internet或其他企业专用Intranet等发送。PPTP通过PPTP控制连接来创建、维护、终止一条隧道,并使用通用路由封装GRE(Generic Routing Encapsulation)对PPP帧进行封装。封装前,PPP帧的有效载荷即有效传输数据一般会经过加密、压缩或是两者的混合处理。PPTP协议假定在PPTP客户机和PPTP服务器之间有连通且可用的IP网络。因此如果PPTP客户机本身已经是某IP网络的组成部分,那么即可通过该IP网络与PPTP服务器取得连接.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典型连接过程:

TCP连接由PPTP客户机上的一个动态分配的TCP端口到PPTP服务器上的TCP端口1723建立。

                               

 

二、大致分析下客户端和服务端的报文

start-control-connection-request : 由PPTP客户端发出,请求简历控制连接。PPTP隧道要求在发送任何其他PPTP消息之前,先建立一条控制连接。

start-control-connection-reply:由PPTP服务器发出,回应start-controlconnection-request消息。

outgoing-call-request:由PPTP客户机发出,请求创建PPTP隧道,outgoing-call-request消息包含GRE报头钟的Call ID,该ID可唯一地标识一条隧道。

outgoing-call-reply:PPTP服务器对outgoing-call-request消息的回应。

echo-request:作为保持连线机制,可由PPTP客户机或服务器任何一方发出,若echo-request了没有应答,则PPTP隧道逐渐终止。

echo-reply:对echo-request的应答。注:PPTP的echo-request和echo-reply的消息与ICMP回送请求和回送应答消息无关。

wan-error-notify:由PPTP服务器向所有VPN客户机发出,指示服务器的PPP接口处于错误状态。

set-link-info:可由PPTP客户机或服务器任何一方发出,设置PPP协商选项。

call-clear-request:由PPTP客户机发出,请求终止隧道。

call-disconnect-notify:PPTP服务器回应call-clear-request,或因其他原因指示必须终止隧道。如果PPTP服务器终止隧道,则发送出call-disconnect-notify消息。

stop-control-connection-request:可由PPTP客户机或服务器任何一方发出,通知对方控制连接将被终止。

stop-control-connection-reply:回应stop-control-connection-request消息。

 

三、详细分析数据包的内容

1.  Start-control-connection-request

                           

Length:该PPTP信息的八位总长,包括整个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客户端软件类型。

 

2. Start-Control-Connection-Reply

                            

大部分字段的含义与Start-control-connection-request一致。不同的字段含义如下:

Control Message Type :值为2;

Result Code:表示建立channal是否成功的结果码,值为1表示成功,值为2表示通用错误,暗示着有问题。值为3表示channal已经存在,值为4表示请求者未授权,值为5表示请求的PPTP协议版本不支持。

Error Code:表示错误码,一般值为0,除非Result Code值为2,不同的错误码表示不同的含义。

 

3.  Outgoing-call-request

                                     

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、异步或同步帧支持。

Rev window size:PPTP客户端为此次会话提供最大接收缓冲大小;

PPTP服务器ket processing delay:表示PPTP客户端对数据包处理的延时度量,对于PPTP客户端来说,一般设置比较小越好。

Phone number length:拔号号码长度;

Phone number:建立会话向外拔号的号码,一般对于ISDN或模拟方式拔号来说,此字段域为一个ASCII串。一般长度少于64个字节。

Sub address:额外信息域,一般长度少于64个字节。

 

4. Outgoing-Call-Reply

                     

Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:

Control Message Type :值为8。

Call ID:由PPTP服务器指定的唯一的会话ID。主要用于在PPTP服务器与PPTP客户端建立的会话上,复用与解封装隧道包使用的。

Peer’s 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:连接使用的实际速率;

Rev window size:PPTP服务器为此次会话提供最大接收缓冲大小;

PPTP服务器ket processing delay:表示PPTP服务器对数据包处理的延时度量。

Physical Channel ID:由PPTP服务器指定的物理信道ID。

 

5. Set-Link-Info

                      

Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:

Control Message Type :值为15。

Peer’s Call ID:设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用。

Reserved0/Reserve1:保留位,必须为0;

Send ACCM:发送的ACCM值,默认值为0XFFFFFFFF;

Receive ACCM:接收的ACCM值,默认值为0XFFFFFFFF;

 

6.  Echo request

                      

Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:

Control Message Type :值为5。

Peer’s Call ID:设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用。

Reserved0:保留位,必须为0;

Identifier:发送者用来标识Echo request与Echo reply对应标识。

 

7.  Echo-reply

                          

Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:

Control Message Type :值为6。

Peer’s Call ID:设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用。

Reserved0/1:保留位,必须为0;

Identifier:标识值,为接收者从Echo request里标识字段复制填入。

Result Code:结果码,为1表示Echo-reply是有效的,为2表示出现一般性错误。

Error code:同上面所描述的。

 

8. Call-Clear-Request

                     

Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:

Control Message Type :值为12。

Call ID:由PPTP客户端指定的会话ID。

Reserved0/1:保留位,必须为0;

 

9. Call-Disconnect-Notify

                      

Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:

Control Message Type :值为13。

Call ID:由PPTP客户端指定的会话ID。

Reserved0/1:保留位,必须为0;

 

10. Call-Disconnect-Notify

Result Code:结果码,为1表示媒介断开,为2表示出现一般性错误,为3表示为管理员关闭连接,为4表示收到Call-Clear-Request;

Error code:同上面所描述的。

Cause Code:此域表示额外说明断开原因。

 

11.  Stop-Control-Connection-Request

                     

Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:

Control Message Type :值为3。

Resverve0/1/2:保留位,必须为0;

Reason:表示会话连接关闭的原因,为1表示响应会话清除请求,为2表示不支持对端PPTP版本,为3表示本地系统关闭.

 

12.  Stop-Control-Connection-Reply

Length、PPTP Message、Magic cookie与Start-control-connection-request一致。不同的字段含义如下:

Control Message Type :值为4。

Resverve0/1/2:保留位,必须为0;

Result Code:表示关闭连接结果码,为1表示正常关闭成功,为2表示发生一般性错误。

Error Code::表示当结果为2时,对应具体的一般性错误,Result Code为1时,必须为0。

 

四、总结

1. PPTP原理

首先,PPTP客户机使用动态分配的TCP端口号,与PPTP服务器使用的保留TCP端口号1723建立控制连接(PPTP控制连接携带PPTP呼叫控制和管理信息,用于维护PPTP隧道)。

其次,客户端与服务器通过控制连接来创建、维护、终止一条隧道。

然后,PPP帧的有效载荷经过加密、压缩或是两者的混合处理。

接着,使用通用路由封装GRE对PPP帧进行封装。

再者,将PPP帧封装进IP数据报文中。通过IP网络如Internet或其他企业准用INTRANET灯发送给PPTP服务器。

最后,服务器接收到PPTP数据包后进行常规处理。

 

2. PPTP控制连接数的数据包格式

包括一个IP报头,一个TCP报头和PPTP控制信息,还包括数据链路层报头和报尾。

阅读(7755) | 评论(0) | 转发(0) |
0

上一篇:PPTP与L2TP封装格式

下一篇:libpcap详解

给主人留下些什么吧!~~