一  PPTP概述

 

PPTP(Point to Point Tunneling Protocol),即点对点隧道协议。该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网,可以通过密码验证协议,可扩展认证协议等方法增强安全性。远程用户可以通过ISP、直接连接Internet或者其他网络安全地访问企业网;

它能够将PPP(点到点协议)帧封装成IP数据包,以便能够在基于IP的互联网上进行传输。PPTP使用TCP是实现隧道的创建、维护与终止,并使用GRE(通用路由封装)将PPP帧封装成隧道数据。被封装后的PPP帧的有效载荷可以被加密或压缩;

PPTP通信过程中需要建立两种连接,一种是控制连接,另一种是数据连接。控制连接用来协商通信过程中的参数和进行数据连接的维护。而真正的数据通信部分则交由PPTP数据连接完成。以下两个章节分别介绍PPTP的控制连接和数据连接

二  PPTP控制连接的建立流程分析

 

PPTP控制连接建立过程可以分为以下几步:

1、  建立TCP连接

2、  PPTP控制连接和GRE隧道建立

3、  PPP协议的LCP协商

4、  PPP协议的身份验证

5、  PPP协议的NCP协商

6、  PPP协议的CCP协商

以下以抓包的方式分析上述几个步骤,

pptp client     :      192.168.163.56

pptp server    :      192.168.162.196

2.1  建立TCP连接

 

PPTP控制层协议是建立在TCP协议的基础上,所以刚开始即使普通的TCP三次握手

图2-1  TCP三次握数据包

 

图2-2  TCP三次握手时序图

 

1、  Client端向Server的1723端口发TCPSYN包,请求建立TCP连接。

2、  Server接收TCP连接请求,回SYN ACK。

3、  Client端向Server发送确认包ACK

2.2  PPTP控制连接和隧道的建立

 

在此过程,完成PPTP控制层连接和Gre隧道建立的工作

图2-3 PPTP控制层连接建立过程

 

图2-4 PPTP控制层连接时序图

 

1、  Client向Server发送Start-Control-Connection-Request,请求建立控制连接

2、  Server向Client发送Start-Control-Connecton-Reply,应答客户端的请求

3、  Client向Server发送Outgoing-Call-Request,请求建立PPTP隧道,该消息包含GRE报头中的Callid,该id可唯一地标识一条隧道

4、  Server向Client发送Outgoing-Call-Reply,应答客户端的建立PPTP隧道请求

5、  有Client或者Server任意一方发出Set-Link-info,设置PPP协商的选项

2.3 PPP协议的LCP协商

 

LCP是PPP协议的链路控制协议,负责建立、拆除和监控数据链路。协商链路参数,如认证方法,压缩方法,是否回叫等。

图2-5  PPP协议的LCP协商过程

 

图2-6  PPP协议的LCP协商时序图

 

1、  Client发送一个Configuration Request,把自己的配置参数发送给Server

2、  Server发送一个Configuration Request,把自己的配置参数发送给Client

3、  Server发送一个Configuration Reject,将自己不能识别的参数告知Client,让Client进行修正

4、  Client发送一个Configuration Ack,表示所有配置参数全部认识且可以接受,应答Server

5、  Client修改配置项后再次发送Configuration Request

6、  Server发送一个Configuration Ack,标示所有配置参数全部认识且可以接受,应答Client

2.4  PPP协议的身份认证

 

LCP协商完成后,PPP协议的Server端会对Client端进行身份验证,在LCP协商中已经协商好身份验证协议,本文以MS-CHAP-2为例说明

图2-7  PPP协议的Chap身份认证过程

 

图2-8  PPP协议的Chap身份认证时序图

 

1、  Server向Client发送Challenge,其中包括一个Challenge string(value字段)和Server Name(pptpd)

2、  Client向Server发送Response,其中用户名使用明文发送,密码(syberos)和Challenge字段混合hash后以密文(value字段)形式发送

3、  Server读取密码文件,对用户身份进行验证,验证成功,向Client发送Success,表示身份验证成功

2.5  PPP协议的NCP协商

 

NCP协议是PPP协议的网络控制协议,主要用来协商双方网络层接口参数,配置虚拟端口,分配IP,DNS等信息。图中的IPCP是NCP基于TCP/IP的接口协商协议。Server和Client都要把自己的Miniport信息发送给对方

图2-9  PPP协议的NCP协商过程

 

图2-10  PPP协议的NCP协商时序图

 

1、  Server把自己的Miniport信息通过Configuration Request发送给Client

2、  Client接收Server的接口配置,向Server发送Configuration ACK,应答上一步骤的Request

3、  Client把自己的Miniport信息(无效数据,等待Server分配)通过Configuration Request发送给Server

4、  Server发现Client的配置是无效的,则给Client发送一条有效的配置信息,使用Configuration Nak发送,其中主要是给Client分配ip

5、  Client根据Server端发送过来的配置,修改自己的Miniport的接口,再次发送Configuration Request

6、  Server接受Client的配置,发送Configuration Ack应答Request

2.6  PPP协议的CCP协商

 

CCP协议协商PPP通讯中数据加密的协议

图2-11  PPP协议的NCP协商过程

 

图2-12  PPP协议的NCP协商时序图

 

1、  Server向Client发送Configuration Request,标识服务端支持的加密协议

2、  Client向Server发送Configuration Request,标识客户端支持的加密协议

3、  Client向Server发送Configuration ack,标识接受服务端的加密协议

4、  Server向Client发送Configuration ack,标识接受客户端的加密协议

三  PPTP数据连接的分析

 
    PPTP数据隧道化过程采用多层封装的方法,下图显示了封装后在网络上传输的数据包格式

图3-1 PPTP数据包格式

 

我们以应用层使用HTTP连接为例说明PPTP数据包的封装和解析过程;

3.1  PPTP数据包封装过程

 

图3-2 PPTP数据包封装过程

 

封装过程:

1、  应用层数据封装成IP数据包

2、  将IP数据包发送到VPN的虚拟接口

3、  VPN的虚拟接口将IP数据包压缩和加密,并增加PPP头

4、  VPN的虚拟接口将PPP帧发送给PPTP协议驱动程序

5、  PPTP协议驱动程序在PPP帧外添加GRE报头

6、  PPTP协议驱动程序将GRE报头提交给TCP/IP协议驱动程序

7、  TCP/IP协议驱动程序为GRE驱动添加IP头部

8、  为IP数据包进行数据链路层封装后通过物理网卡发送出去

 

3.2  PPTP数据包解析过程

 

图3-2 PPTP数据包解析过程

 

解析过程:

1、物理thernet帧

2、剥掉Ethernet帧后交给TCP/IP协议驱动程序

3、TCP/IP协议解析剥掉IP头部

4、IP协议解析剥掉GRE头部

5、将PPP帧发送给VPN虚拟网卡

6、VPN虚拟网卡剥掉PPP头并对PPP有效负载进行解密或者解压缩

7、解密或者解压缩完成后将数据提交给上层应用

8、上层应用对数据进行处理

从应用层看,Service和Client是直接点对点连接的,他们之间的媒介就是GRE。而这个GRE的底层并不是真正的点对点连接,

而是建立在物理网络上的一个隧道,保护传输的数据;

PPTP协议握手流程分析--转载的更多相关文章

  1. PPTP协议握手流程分析

    一  PPTP概述 PPTP(Point to Point Tunneling Protocol),即点对点隧道协议.该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网,可 ...

  2. http协议请求流程分析

    http协议请求流程分析 用户输入URL(地址链接)(http://www.baidu.com:80/tools.html)客户端获取到端口及主机名后,客户端利用DNS解析域名,首先客户端的浏览器会先 ...

  3. Uboot启动流程分析(转载)

    最近一段时间一直在做uboot移植相关的工作,需要将uboot-2016-7移植到单位设计的ARMv7的处理器上.正好元旦放假三天闲来无事,有段完整的时间来整理下最近的工作成果.之前在学习uboot时 ...

  4. Android wpa_supplicant 四次握手 流程分析

    记录wpa_supplicant四次握手的过程. 相关log:https://www.cnblogs.com/helloworldtoyou/p/9633603.html 接收到第一次握手,会设置一个 ...

  5. TCP/IP协议三次握手与四次握手流程解析(转载及总结)

    原文地址:http://www.2cto.com/net/201310/251896.html,转载请注明出处: TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式  TCP/IP协议的详 ...

  6. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  7. Android bluetooth介绍(四): a2dp connect流程分析

    关键词:蓝牙blueZ  A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_ ...

  8. Android之 MTP框架和流程分析

    概要 本文的目的是介绍Android系统中MTP的一些相关知识.主要的内容包括:第1部分 MTP简介            对Mtp协议进行简单的介绍.第2部分 MTP框架            介绍 ...

  9. boost.asio源码剖析(三) ---- 流程分析

    * 常见流程分析之一(Tcp异步连接) 我们用一个简单的demo分析Tcp异步连接的流程: #include <iostream> #include <boost/asio.hpp& ...

随机推荐

  1. linq与lambda 常用查询语句写法对比

    LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量中被查询的值 [group by 条件] Lambda ...

  2. cp命令详解

    基础命令学习目录首页 http://man.linuxde.net/cp 如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏.此命令中所有参数既可以是绝对路径名,也 ...

  3. Set up classpath in Eclipse

    On Eclipse main window Right click on .java file-> Run As -> Run Configurations... On Run Conf ...

  4. 自定义UIView怎么注册销毁NSNotification通知

    问题描述:在使用天猫tangram框架后.部分组件自定义后会用到通知,但是在iOS 8 系统中,会崩溃? 原因分析:当对象挂掉后,要对应移除注册的通知. 否则当你重复执行发送通知的时候,在iOS8 系 ...

  5. 校友聊NABCD需求分析

    校友聊 NABCD需求分析 N:内网用户流量不够使用 A:基于局域网进行通讯 B:通讯不花费外网流量 C:目前学校还没有使用 D:将软件放在校园网,可以下载使用

  6. 第三次作业---excel导入数据库及显示

    好吧首先承认这次作业失败了,而且我并不知道原因.另外,我也没有采用PowerDesigner 设计所需要的数据库,代码就用了全部的时间.感觉自己就像一个刚学会爬着走路的小孩去参加一百一十米跨栏,能不能 ...

  7. Week-2-作业1

    第一章 概论 1.什么是程序? 答:在学习软件工程导论前,我们已经学习了一些计算机语言和数据结构这样的课程,并深刻的知道“程序=数据结构+算法”,但在学习中还是会产生如书中1.1讲所提到的那些疑问,二 ...

  8. Daily target小队介绍(刘畅,陈杰,杨有存,唐祎琳,王晓哲,邵汝佳)

    一.团队介绍 1.团队构成: 2.队名: Daily target,我们的口号是Target your day! 3.团队项目描述: 我们计划写一个用于老师发布任务,学生接受任务的安卓app.教师安排 ...

  9. typedef struct bit0 : 1

    这句话定义了一个位域,bit0是该位域的域名,而且bit0只占用一个位.位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.为了节省存储空间,并使处理简便,C语言提供了一种 ...

  10. 学习jenv

    背景 生活不只是眼前的苟且, 还有诗和远方. 上个月工作需要启动了一个小项目, 按最初的计划会用JDK8. 但当计划报上去后, 运维部门出于后续升级维护的考虑, 不允许使用已经出来4年多的JDK8了, ...