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

一、 Control Connection Protol

控制层连接是基于TCP建立的,PPTP Server监听TCP1723端口,等待Client的连接请求。

控制层的主要功能包括:

1. 彼此交换基本信息;

2. 负责创建、维护、删除Session;

3. 负责创建、维护、删除Tunnel;

4. 更新通信参数;(Set-Link-Info)

5. 维护控制层自身的连接状态。(Echo-Request、Echo-Reply)

其中需要注意的是控制层自身的状态维护。PPTP连接双方在一段时间内(60秒)如果没有收到任何控制层信息,就会发Echo-Request查询控制层连接状态,接收方会应答Echo-Reply。如果发送方在60秒内还没有收到应答就会断开控制层连接。

其实控制层真的是没什么好说的,看上去挺多东西,其实本身很简单。如果要了解控制层的工作过程,请参照上一篇:PPTP(1)--连接过程。

二、 Tunnel Protol

看了上面的叙述不难发现,控制层本身不负责传输有效载荷。那么真正的应用层数据是怎么传输的呢?答案是Tunnel。

RFC里给出的Tunnel的定义是这样的"A tunnel is defined by a PNS-PAC pair"。简单说就是一对CS就是一个tunnel。那么tunnel到底是怎么工作的呢?

在发送端,要把一个数据包发出去,需要首先把packet发到VPN的虚拟网卡,虚拟网卡把它变成GRE frame,然后发往IP层再次进行路由。数据包这次会被发往物理网络,并最终抵达PPTP Server端。

在接收端,从物理网卡上收到frame之后交给IP层,IP对其解包之后转发给VPN虚拟网卡,虚拟网卡再解包把它变成普通IP packet再次发往IP层,这次IP层知道是VPN对端发来的数据,直接交给TCP/UDP并最终抵达应用层。

通 过上面的过程你就可以理解为什么叫tunnel了。在应用层看来,Server和Client是直接点对点连接的,他们之间的媒介就是GRE。而这个 GRE的底层并不是真正的点对点连接,而是建立在物理网络上的一个Tunnel,保护其中传输的数据,所以称之为隧道。与控制层相比,tunnel的结构 要复杂得多。我们来看一下数据在tunnel的传输过程。

上图描述了数据在发送端的处理过程,下面解释一下每一个step在干什么。(接收端的处理过程完全相反)

1. 应用层调用TCP/UDP发送message;

2. TCP/UDP调用IP发送packets;

3. packets被路由到VPN的miniport;

4. Miniport调用PPP协议发包;

5. packets被封装成PPP包;

6. PPP包被发往PPTP;

7. PPP包被封装成GRE包;

8. GRE调用IP协议发送packets;

9. 新的packets被路由到物理网卡;

10. 调用网卡驱动发frame。

怎么样,挺乱的吧。其实际过程还要更乱一些。需要特别注意的是,最终从网卡上发 出去的数据包被IP层封装过两次。第一次封装是在PPTP虚拟网络之上的,第二次封装是在物理网络之上的。注意看下面的图,在黄色部分已经有一次网络层的 封装了,然后在GRE外围还会有一次网络层封装。

看到这里你可能会有一大堆问题,我最希望你能想到这几个问题:

1. 为什么要经过两次网络层?

2. 同一个数据包为什么两次经过网络层被路由到了不同的地方?

3. 为什么连上VPN之后很多网页都不能正常访问了?

这些都是比较本质的问题,要搞清楚这几个问题,我们需要深入到操作系统和协议栈的底层去好好研究一下VPN的本质,请参照一下篇:PPTP(3)--PPTP的路由。

另外,pptp tunnel还实现了一大堆别的东西,其中最复杂的就是滑动窗口协议。其中实现了,超时、确认、重传、流量控制、拥塞控制。这些东西虽然复杂,但并不是最关键的东西,不需要过多地注意。

[网络技术][转]PPTP协议解析的更多相关文章

  1. [网络技术][转]PPTP连接过程

    转自:http://blog.csdn.net/zhu_hit/article/details/5698958 在未来几天会总结一下PPTP的工作过程,分为以下3篇讲述. 1. PPTP连接过程: 2 ...

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

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

  3. Android基础总结(9)——网络技术

    这里主要讲的是如何在手机端使用HTTP协议和服务器端进行网络交互,并对服务器返回的数据进行解析,这也是Android最常使用到的网络技术了. 1.WebView的用法 Android提供的WebVie ...

  4. PPTP协议握手流程分析

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

  5. Android学习之基础知识十二 — 第一讲:网络技术的使用

    这一节主要讲如何在手机端使用HTTP协议和服务器端进行网络交互,并对服务器返回的数据进行解析,这也是Android中最常用的网络技术. 一.WebView的用法 有时候我们可能会碰到比较特殊的需求,比 ...

  6. 《软件定义网络:SDN与OpenFlow解析》

    <软件定义网络:SDN与OpenFlow解析> 基本信息 原书名:SDN: Software Defined Networks 原出版社: O'Reilly Media 作者: (美)Th ...

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

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

  8. 视音频数据处理入门:UDP-RTP协议解析

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

  9. [转]netty对http协议解析原理

    本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...

随机推荐

  1. 出现 could not open jvm.cfg 的解决办法

    出现该的原因很可能是由于卸载 jdk 不干净而引起的(就算是使用工具也一样),在oracle的官方上也是让我们卸载了重装一次.可是重装真的能解决问题吗?  以下方法经过本人的验证,绝对可行! (一定要 ...

  2. wampserver2.5安装 redis缓存,igbinary, phalcon框架

    wampserver2.5安装 redis缓存,igbinary, phalcon框架 根据phalconphp说明文件,先将dll文件拖入到:安装盘:\wamp\bin\php\php5.5.12\ ...

  3. 经验解决Fragment被Replace后仍旧可见的问题

    经验解决Fragment被Replace后仍旧可见的问题 网上问的问题,大多会提到替换了Fragment而发现之前被替换的仍旧显示在那里.我个人使用android 2.3 +support 开发包,在 ...

  4. 自定义 密码是否可见 的EditView 右侧带个小眼睛

    package com.qyk.douban.widget; import android.content.Context; import android.text.Editable; import ...

  5. java多线程下载网络图片

    import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader ...

  6. 20145218 《Java程序设计》第10周学习总结

    20145218 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 程序员所作的事情就是把数据发送到指定的位 ...

  7. python 练习 28

    ython pass是空语句,是为了保持程序结构的完整性. pass 不做任何事情,一般用做占位语句. Python 语言 pass 语句语法格式如下: pass 实例: #!/usr/bin/pyt ...

  8. VI编辑器学习笔记

    VIM的使用 VI是Linux系统中的一种编辑器,它的使用方法和界面与Unix平台十分相似,掌握了VIM的特殊,你可以感觉到它强大的功能与高效.Vim 相对来说较小,无论你使用任何Linux系统,你总 ...

  9. OC 类别(分类)Categroy

    Categroy类别,又称为扩展类,在类的原基础上扩展方法,且不可添加变量,如果扩展的方法与原始类中的方法相同,则会隐藏原始方法,且不可在扩展方法中通过super调用原始方法,这里与继承不同. 定义: ...

  10. Android中 在显示ImageView时图片上面和下面都出现一段空白区间的解决办法

    开始的时候是在ScrollView中显示ImageView的时候出现这样的问题,以为是要对ScrollView进行设置的,后来发现单独显示一个ImageView的时候也会出现这样的问题,由此才知道是应 ...