Chinaunix首页 | 论坛 | 博客
  • 博客访问: 248707
  • 博文数量: 55
  • 博客积分: 2160
  • 博客等级: 大尉
  • 技术积分: 598
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-08 14:36
文章分类

全部博文(55)

文章存档

2013年(1)

2012年(5)

2010年(49)

我的朋友

分类: 网络与安全

2010-03-08 15:56:44

PPTP控制连接创建

PPTP控制连接通过以下步骤建立:

1.

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

2.

PPTP客户端发送一条PPTP Start-Control-Connection-Request(开始控制连接请求)消息,后者将用于建立一个PPTP控制连接。

3.

PPTP服务器使用一条PPTP Start-Control-Connection-Reply(开始控制连接应答)消息予以响应。

4.

PPTP客户端发送一条PPTP Outgoing-Call-Request(传出调用请求)消息,并选择一个调用ID,识别用于将数据从PPTP客户端发送到PPTP服务器的PPTP隧道。PPTP客户端使用PPTP Outgoing-Call-Request消息从PPTP服务器请求一个PPTP隧道(也称为调用)。

5.

PPTP服务器发送一条PPTP Outgoing-Call-Reply(传出调用应答)消息,并选择自身的调用ID,识别将数据从PPTP服务器发送到PPTP客户端的PPTP隧道。

6.

PPTP客户端发送一条PPTP Set-Link-Info(设置链路信息)消息来指定PPTP协商选项。

PPTP控制连接创建过程的最终结果如下:

PPTP服务器已允许创建一个PPTP隧道。

PPTP客户端已确定了在通过PPTP隧道向PPTP服务器发送数据时在GRE报头中使用的调用ID

PPTP服务器已确定了在通过PPTP隧道向PPTP客户端发送数据时在GRE报头中使用的调用ID

 

PPTP数据封装

在建立PPTP控制连接之后,数据就可以在PPTP客户端和PPTP服务器之间发送了。 通过PPTP连接发送的第一个数据包将用于建立PPP连接。

数据包首先被加密并使用一个PPP报头进行封装。 所得到PPP帧将使用一个通用路由封装(GRE)报头进行封装,该报头已针对PPTP修改过。 然后,GRE封装的PPP帧使用一个IP报头进行封装,这个报头包含对应于PPTP隧道端点的源和目标IP地址。

经过修改应用于PPTP数据包的GRE报头具有如下图所示的结构。 最初的GRE报头在RFC 1701中有所定义。

 

修改过的GRE报头中的字段如下:

Checksum Present 一个1位标志,当设置为1时,表示提供了一个Checksum字段。对于PPTP,该标志总被设为0

Routing Present 一个1位标志,当设置为1时,表示提供了一个Routing字段。对于PPTP,该标志总被设为0

Key Present 一个1位标志,当设置为1时,表示提供了一个Key字段。对于PPTP,该标志总被设为1Key字段是Protocol TypePayload LengthCall ID字段的组合。

Sequence Number Present 一个1位标志,当设置为1时,表示提供了Sequence Number字段。

Strict Source Route Present 一个1位标志,当设置为1时,表示提供了一个严格源路由。对于PPTP,该标志总被设置为0

Recursion Control 一个用于递归的3位标志。对于PPTP,该字段总被设为0

Acknowledgement Number Present 一个1位标志,当设置为1时,表示提供了Acknowledgement Number字段。

Flags 一个用于GRE标志的4位字段。对于PPTP,该字段总被设为0

Version 一个用于表示GRE报头版本的3位字段。对于PPTP,该字段总被设为1

Protocol Type 一个用于存储GRE有效负载(payload)的EtherType值的16位字段。对于PPTP,该字段总被设为0x880B,即PPP帧的EtherType值。

Payload Length 一个用于表示GRE有效负载长度的16位字段。

Call ID 一个用于表示这个包的PPTP隧道的16位字段。对于PPTP连接,Call ID字段有两个不同的值。 一个值用于PPTP客户端发送的数据,另一个值用于PPTP服务器发送的数据。

Sequence Number 一个用于表示这个数据包的序列号的32位字段。该字段仅在Sequence Number Present标志被设置为1时才提供。

Acknowledgement Number 一个32位字段,用于表示这个隧道接收的某个GRE封装的数据包的最高序列号。 这个字段仅在Acknowledgement Number Present标志被设置为1时才提供。

PPTP使用Sequence NumberAcknowledgement Number字段检测被丢弃的数据包。

PPTP数据封装使用一种单独的机制给网络地址转换(NAT)带来了一个有趣的副作用 大多数NAT都能够转换基于TCP的流量来维持隧道。然而,具有GRE报头的PPTP数据包通常不是使用静态地址映射或PPTP NAT编辑器来转换的。

PPTP服务器位于NAT后方时,必须手动地将该NAT配置为使用静态地址映射,即把某个特定的公共地址的所有流量映射到某个特定的专用地址。 在这种情况下,只有IP报头中的地址才会被修改。

PPTP客户端位于NAT后方时,通常会使用一个PPTP NAT编辑器。 NAT编辑器是NAT上的一个附加软件组件,用于执行除IP地址、TCP端口和UDP端口之外的转换服务。 虽然使用PPTP NAT编辑器来监视GRE有效载载的传入数据包并转换IP报头中的IP地址是一件简单的事情,但是在NAT后方可能会有多个PPTP客户端。 在这种情况下,该NAT无法确定应该将传入的PPTP包发送给哪个专用客户端,因为多个专用客户端使用了相同的公共地址。为了确定应该向其发送传入数据包的专用客户端,PPTP NAT编辑器在GRE报头中使用了一个调用(CallID 然而,当两个不同的PPTP客户端使用相同的调用 ID时,NAT就无法确定应该将包发送给哪个专用客户端。

为了给不同的专用客户端提供GRE封装的流量的正确多路复用,PPTP NAT编辑器监控PPTP控制连接设置,并以转换TCPUDP源端口的相同方式,同时转换PPTP消息和GRE封装的数据包中的PPTP客户端调用 ID字段。通过转换PPTP客户端调用 ID字段,NAT确保了对每个PPTP隧道和每个PPTP客户端使用一个唯一的调用 ID

 

PPTP控制连接维持

为了维持PPTP控制连接,PPTP客户端每隔60秒发送一条PPTP Echo Request(回送请求)消息,不管PPTP客户端和服务器之间是否正在发送GRE封装的数据。在接收到PPTP Echo Request消息时,PPTP服务器将发送一条PPTP Echo Reply(回送应答)消息。PPTP Echo Request消息包含一个Identifier字段,该字段的值将在PPTP Echo Reply消息中回显,以便PPTP客户端能够将PPTP Echo Request与其应答相匹配。

PPTP控制连接终止

为了终止PPTP连接,PPP连接、PPTP协议连接和TCP连接必须全部终止。 PPTP客户端终止PPTP连接时,将会交换如下数据包:

1.

PPTP客户端发送一条PPTP Set-Link-Info消息来指定链路的PPP参数。

2.

PPTP客户端发送一条Link Control Protocol (LCP) Terminate-Request消息来终止PPP连接。 LCPPPP协议族中的一种协议,它管理逻辑PPP连接的配置和维护。

3.

PPTP服务器发送一条PPTP Set-Link-Info消息来指定链路的PPP参数。

4.

PPTP服务器发送LCP Terminate-Ack消息来响应LCP Terminate-Request消息,从而终止PPP连接。

5.

PPTP客户端发送一条PPTP Clear-Call-Request消息,向PPTP服务器表示PPTP控制连接即将终止。

6.

PPTP服务器使用一条PPTP Call-Disconnected-Notify消息进行响应。

7.

PPTP客户端发送一条PPTP Stop-Control-Connection-Request消息来终止PPTP控制连接。

8.

PPTP服务器使用一条PPTP Stop-Control-Connection-Reply消息进行响应。

9.

TCP连接终止。

如果PPTP服务器要终止连接,所交换的消息是相同的,只要将上述过程中的PPTP客户端替换成了PPTP服务器即可(反之亦然)。

阅读(4657) | 评论(0) | 转发(1) |
0

上一篇:Linux PPP 数据收发流程

下一篇:PPTP

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