PPTP协议

  PPTP(Point-to-Point Tunneling Protocol)点对点隧道协议是PPP协议的一种扩展,它将PPP帧封装进IP包中,通过IP网络进行传输。它通过PPTP控制连接来创建、维护、终止一条隧道,同时使用通用路由封装GRE(Generic Routing Encapsulation)对PPP帧进行封装用来传输数据。
  PPTP协议假定在PPTP客户机和服务器之间有连通且可用的IP网络,因此如果PPTP客户机还没有接入网络,则首先需要建立从客户机到服务器的IP网络(可以通过拨号连接或者dhcp)。

PPTP控制连接过程和隧道维护

  PPTP控制连接建立在PPTP客户机IP地址和PPTP服务器IP地址之间,PPTP客户机使用动态分配的TCP端口号,PPTP服务器使用固定端口号1723,。在连接建立之后,客户机和服务器之间会周期性的发送回送请求和应答消息,以期检测出客户机与服务器之间可能出现的连接中断。PPTP控制连接的数据包格式如下所示:

Data-link Header IP Header Tcp Header PPTP Control Message Data link Trailer
 

PPTP的控制连接过程可以分为如下几步:
(1)建立TCP连接

三次握手建立TCP连接

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

建立控制连接,同时分配CallID,该ID可以唯一标识一条隧道

(3)PPP协议的LCP协商

配置链路层参数,以及认证方法(比如MS-CHAP, MS-CHAP v2)

(4)PPP协议的身份认证

认证身份,可以通过LCP协商好的认证方法

(5)PPP协议的NCP协商

配置网络层参数,如分配IP地址,miniport信息

(6)PPP协议的CCP协商

双方协商加密协议(确定是否使用加密),MPPE加密的加密位数

如果LCP过程中确定了认证方法(比如MS-CHAP, MS-CHAP v2),同时CCP协商好要加密,则双方需要协商MPPE的 RC4 算法的密钥。

PPTP数据隧道传输

  PPTP客户端和服务器之间通过连接过程建立隧道之后,就可以通过隧道传输数据。
(1)用户的IP包经过PPP协议封装成为PPP包;
(2)PPTP对PPP帧的有效载荷进行加密(MPPE)、压缩(MPPC),加密和压缩都是可选的;
(3)PPTP使用通用路由封装协议GRE协议对PPP帧进行封装;
(4)将GRE帧放入IP报文中,通过IP网络发送给PPTP服务器
PPTP数据报文格式如下:


MPPE将通过由MS-CHAP、MS-CHAP v2或EAP-TLS身份验证过程所生成的加密密钥对PPP帧进行加密。PPTP将利用底层PPP加密功能并直接对原先经过加密的PPP帧进行封装。

MPPE (Microsoft Point-to-Point Encryption) 是一种将点到点协议(PPP)包用加密形式表示的方法,通常用来实现PPTP 中的加密。 MPPE 的加密算法是固定的,只能使用RC4 算法。

PPTP数据包的封装过程
(1)应用层数据封装成IP包
(2)将IP包发送到VPN的虚拟接口
(3)VPN的虚拟接口将IP数据包压缩和加密(压缩和加密可选),并增加PPP头。对于加密了的PPP包,其PPP类型是0x00FD
(4)VPN的虚拟接口将PPP帧发送给PPTP协议驱动程序
(5)PPTP协议驱动程序在PPP帧外加GRE报头
(6)PPTP协议驱动程序将GRE报头提交给TCP/IP协议驱动程序
(7)TCP/IP协议驱动程序为GRE添加IP头
(8)为IP数据包进行数据链路层封装后通过物理网卡发出

PPTP协议的更多相关文章

  1. [网络技术][转]PPTP协议解析

    PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control Connection Protol 控制层连接是基于T ...

  2. VPN column: PPTP(2)--PPTP协议解析

    zhu_hit原创,如需转载请注明出处.Thanks. PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control ...

  3. PPTP协议握手流程分析

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

  4. mac下进行连接pptp协议

    环境:mac系统 软件:shimo 协议:pptp协议 说明: mac 自带vpn已经不支持 pptp协议的vpn,可以下载shimo连接. mac下进行vpn连接pptp协议操作方法: 下载: 链接 ...

  5. PPTP协议握手流程分析--转载

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

  6. pptp协议的工作原理

    我的工作机是A,通信网卡是Aeth0, Appp0: 然后我的云主机是B, 通信的网卡是Beth0, Bppp0: 在网卡Bppp0上会不断地很清晰的数据包: 16:40:39.522917 IP 6 ...

  7. MacOS开启PPTP协议

    ​ 开启PPTP协议: Mac OS X 系统默认开启了完整性保护(System Intregrity Protection,SIP),所以即使是root帐户也无法修改系统目录中的文件.如果需要修改受 ...

  8. 「Shimo使用指南」mac支持pptp协议的小软件

    Mac的好多小伙伴在访问网络设备时觉得远程连接不方便,例如ssh,***登陆都不是很方便,后来又安装了open*** forMac.ISSH等客户端,使用后发现不是很稳定,断线后很久都无法连接等缺点, ...

  9. PPTP(Point to Point Tunneling Protocol),即点对点隧道协议。

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

随机推荐

  1. 客户端使用java,服务端使用c++的corba编程环境搭建

    我们先用c++实现服务端和客户端,然后再用java编写客户端. 1. 首先安装omniORB,omniORB提供 omniidl命令,以及一些头文件和库. omniORB一般是需要你自己进行编译. 2 ...

  2. 【原创】如何在Android Studio下调试原生安卓Framework层面的源代码

    1. Open Existing Android Studio Project. 2. 打开后, Projects -> Android 里面是空的. 这时候,需要选到 Projects-> ...

  3. MS CRM 2013 Plugin 注册工具登录后空白

    解决办法 把en-us, zh-CN 目录随便改个名字就好了

  4. 报表控件NCreport教程:子查询系统设计

    数据报表中经常需要用到主从数据关系,比如发票.订单等一类的特殊文件,在报表控件NCreport中也不例外.数据报表至少有一个表头和一个通过 主键和外键关联的相关细节数据集.子查询系统则是通过父数据源驱 ...

  5. 爱挑剔的acm程序员 acmer

    2015-9-2 acmer敢于承认自己的错误,并积极改进.自信.有些酷爱运动,各个方面都很优秀:有些则认为出去“玩”就不是玩,有自己的小世界,玩电脑才是最爱. 2015-9-1 acmer都很聪明, ...

  6. EF简单的添加修改删除基本语法

    using ( androidhiveEntities db = new androidhiveEntities() )                {                    #re ...

  7. js定义对象的几种容易犯的错误

    //js定义对象的几种容易犯的错误function Person() { getName = function (){ console.info(1); }; return this;}//Perso ...

  8. 2D空间中判断一点是否在三角形内

    要注意如果是XY坐标轴的2D空间,要取差乘分量z而不是y. 实现原理是,将三角形ABC三个边(AB,BC,CA)分别与比较点判断差乘,如果这3个差乘结果表示的方向一致,说明就在三角形内. 效果: 代码 ...

  9. Asp.Net Core 项目从 1.0.1 升级到 1.1.0 的小补丁

    还有 25 天就要交期末作业了,虽然还有好些功能没完成,但是前端同学还是建议先放到云上跑一跑,于是我轻车熟路的用 VS 2017 搞起了 FTP 发布,然而,发布失败了,错误信息如下: "D ...

  10. C扩展python的module和Type

    有许多理由给CPython写扩展,比如 1.性能低 2.重复用别人的C/C++代码 3.在自己的程序中定制python 4.为了方便 等等. 写这种扩展其实都是套路,不过最好要有对CPython源码有 ...