VPN基础知识

来源:互联网 发布:vb数据库控件 编辑:程序博客网 时间:2024/05/17 04:31

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://lenky.info/archives/2014/01/10/2384 或 http://lenky.info/?p=2384

0 0
原创粉丝点击