首页 > 数据泄露, 网络安全 > VPN基础知识

VPN基础知识

2014年1月10日 发表评论 阅读评论 12,236 次浏览

VPN,Virtual Private Network,虚拟专用网络,名字里直观的突出了两个概念,即虚拟与专用。
虚拟意味着该网络的“任意两个节点之间的连接并没有传统专网所需的端到端的物理链路,而是架构在公用网络服务商所提供的网络平台,如Internet、ATM(异步传输模式)、Frame Relay(帧中继)等之上的逻辑网络,用户数据在逻辑链路中传输。”;
而专用意味着该虚拟网络从逻辑上来讲是隔离的,在上面传输的数据是不会被第三方窃听和篡改,且能够安全送达最终目的地。

VPN的最简单且具有代表性的实现是隧道,而隧道的基础在于OSI分层模型。

从理论上讲,分层模型使得任意层数据可以作为有效载荷承载在其他的任意层或当前层次之上,因此有了众多的XX over YY的网络模型。例如:PPPoE(Point-to-Point over Ethernet)、VoIP(Voice over IP)、TDM over IP等等。

Over模型按照数据承载层次关系可以分为三类:
第一类:下层承载上层,通常的TCP/IP模型属于此类,它按OSI分层模型依次承载,即上层全部内容作为下一层有效载荷数据。
第二类:同层承载,属于此类的最佳例子就是PPPoE。PPP协议作为数据链路层的协议,其设计目的主要是用来通过拨号或专线方式建立点对点连接发送数据,通过链路建立、维护、拆除、上层协议协商、认证等一整套方案来确保接收的数据分组确实来自于发送者,具备安全性特征,但是却缺乏多点通信和寻址能力。另一方面,Ethernet主要用于局域网组网传输,而且性价比十分低廉,但是却缺乏认证机制。于是,利用Ethernet将大量主机组成网络,并通过一个远端接入设备调制解调器,使用PPP协议拨号连入因特网的同层承载构建方式就这样自然而然的出现了。
第三类:上层承载下层。一般而言,越往上层越复杂,但实现也越灵活,让上层承载下层是可行的,比如在安全套接层协议SSL里封装IP数据包。但是,我们知道,在OSI分层模型里,数据的流向是单向的,发送数据时,数据从上往下依层次封装,过了IP层,再往下就直接发送出去了,那如何才能获取IP数据包来进行SSL加密封装呢?最直观的想法也就是在IP层做数据包截获,直接把数据包抓取上来,放到SSL层做封装:

抓包不是什么技术难题,关键的问题在于如何以最小的代价实现?比如,涉及修改协议栈的方案都得抛弃,这不现实的,代价太大。代理是一种可行的办法,但是不透明,并且无法做连接控制。因此,一种较好的实现方案就是采用虚拟网卡。在计算机系统上,虚拟的东西并不少见,比如虚拟光驱,虚拟硬盘,虚拟打印机等等。

我们知道,当用户在Office Word文档里点击打印操作进行物理打印时,word.exe程序会将数据发送到物理打印机,物理打印机再运作各种物理组件(送纸,布电,曝光,显像,转印等等)完成打印工作。然而,与物理设备有一点不同,所有这些虚拟设备都有一个共同点,那就是与它们进行交互的两端可以都是应用程序,而不一定需要是物理硬件。

正因为虚拟设备有这么一个优势,那么很多便利就来了,比如下图:

TinyPDF作为虚拟打印机,可以获取到caj文件的内容(打印时选择TinyPDF即可),然后再输出位pdf格式,从而可以完成caj到pdf的格式转换。
与此类似,虚拟网卡运作于IP层(或IP层下),同样可以获取到IP数据包,再转发到另外一个应用程序(比如OpenVPN)在SSL层做加密封装,再通过物理网卡发送出去:

这会要走两次协议栈,性能有所损耗,但可以看到,它不失为一种简单有效的办法,虚拟网卡技术并不复杂,各个操作系统平台都有支持,额外所需要做的,无非就是路由的配置了。

转载请保留地址:http://www.lenky.info/archives/2014/01/2384http://lenky.info/?p=2384


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

分类: 数据泄露, 网络安全 标签: ,
  1. adasd
    2014年1月10日11:34 | #1

    楼主我有几个问题向你请教一下:
    1、linux中cpu最小执行单元是线程还是进程?
    2、在linux中线程能否像进程一样,每个线程绑定到一个cpu上?
    3、linux中,一个进程创建了多个进程,linux如何给被创建的这些进程如何分配cpu时间片?
    4、linux中,一个进程创建了多个线程,linux如何给被创建的这些线程如何分配cpu时间片?

  2. 2014年1月10日09:47 | #2

    买了个vps,用pptpd搭了个vpn翻墙,被迫学习了下vpn的知识

  1. 本文目前尚无任何 trackbacks 和 pingbacks.