VPN column: PPTP(2)--PPTP协议解析
zhu_hit原创,如需转载请注明出处。Thanks.
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还实现了一大堆别的东西,其中最复杂的就是滑动窗口协议。其中实现了,超时、确认、重传、流量控制、拥塞控制。这些东西虽然复杂,但并不是最关键的东西,不需要过多地注意。
VPN column: PPTP(2)--PPTP协议解析的更多相关文章
- [网络技术][转]PPTP协议解析
PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control Connection Protol 控制层连接是基于T ...
- VPN column: PPTP(1)--connecting process
hu_hit原创,如需转载请注明出处.Thanks. 在未来几天会总结一下PPTP的工作过程,分为以下3篇讲述. 1. PPTP连接过程: 2. PPTP协议解析: 3. PPTP的路由. 由于我是工 ...
- ts 协议解析
pes : http://wenku.baidu.com/link?url=KjcA0qXqZ1bWVQTa8i1YOmygofldSQL7Pjj-zGRw1e_6_LFmVLo5DIWF0SNwVn ...
- [转]netty对http协议解析原理
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...
- twemproxyRedis协议解析探索——剖析twemproxy代码正编
这篇文章会对twemproxyRedis协议解析代码部分进行一番简单的分析,同时给出twemproxy目前支持的所有Redis命令.在这篇文章开始前,我想大家去简单地理解一下有限状态机,当然不理解也是 ...
- B/S 架构中,网络模型的分解与协议解析
前言 如果是C/S专业毕业的或者是学过计算机网络课程的童鞋们,相信大家都知道网络模型的划分,本文首先来聊一聊目前对于B/S结构中,网络模型分解的两种方式. 没错,相信大家看到这个图片的时候就已经明白了 ...
- 详解BLE 空中包格式—兼BLE Link layer协议解析
BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...
- netty对http协议解析原理解析
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...
- MODBUS协议解析中常用的转换帮助类(C#)
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
随机推荐
- linux笔记1
在root下创建用户 1.useradd abc //添加一个新用户 2. cat /etc/passwd //查看新用户是否存在 3.passwd abc 输入密码 (123456) ...
- jQuery 图片轮播的代码分离
以前遇到过jQuery实现列表自动滚动,这次的图片轮播在原理上与之相同,只有一些细微的差别,就是需要在图片的右下角显示当前图片的序号. html代码,以及对应的css代码: <div id=&q ...
- 关于location
---恢复内容开始--- window.location跳转+替换+刷新 一.最外层top跳转页面,适合用于iframe框架集 top.window.location.href("${pag ...
- ARCGIS 10中添加excel点字段生产点shp文件的工具
菜单栏中——文件——添加数据——添加XY数据——选择excel。 选择x,y和投影(注意这里投影应该是原数据的本身投影,不能直接选择你要转换的投影)完成。
- make问题:make[1] entering directory
执行make distclean命令.
- iOS 的UINavigationController详解与使用添加UIBarButtonItem
转发自:http://blog.csdn.net/totogo2010/article/details/7681879 分类: iOS开发入门2012-06-21 11:10 53077人阅读 评论( ...
- keystone命令与client接口学习
keystone学习 ------------------ Keystone(OpenStack Identity Service)是OpenStack框架中,负责身份验证.服务规则和服务令牌的功能, ...
- Unity3d之UGUI- Image拦截Button响应事件
在编辑UI的时候Image放在Button前面就会挡掉button的响应 这种情况只需要为Image添加CanvasGroup組件 按照这个属性配置就不会挡掉后面的事件了
- javascript高级编程笔记05(面向对象)
面向对象设计 es中有两种属性:数据属性和访问器属性 数据属性: 数据属性包含一个数据值的位置,在这个位置可以读取和写入值,数据属性有4个描述其行为的特性 [[Configurable]]:表示能否通 ...
- oc 中四种实例变量的范围类型@private@protected@public@package
To enforce the ability of an object to hide its data, the compiler limits the scope of instance vari ...