简介
之前一直是用vpn科学上网的,前几天买了个国外VPS搭建了Shadowsocks。都是翻墙的工具,就想了解了解其中不同的地方,看到了这篇文章:Socks5与VPN在原理上的异同,很有收获,转了过来,很感谢作者。
Socks5原理介绍
Socket套接字介绍
Socket套接字实际上是基于TCP/IP的一组应用程序接口,应用层的程序通过调用Socket套接字来实现网络间的进程通信。
Socks5原理介绍
Socks5是一个代理协议,位于传输层(TCP/UDP等)与应用层之间。Socks软件包组成为如下结构:
Socks库:安装于客户端。为Socket库的替代品,所有使用Socks的程序都必须将Socket库函数调用更改为Socks库函数调用。需要注意的是,Socks库函数仍然需要调用Socket库函数,Socks仅仅是在其上做了安全验证。
Sockd守护程序:安装于服务器,接收并处理来自客户端的CONNECT
,BIND
及UDP associate
请求。以CONNECT
请求为例,其工作流程为:
- 客户端向代理服务器发出请求信息,用以协商版本和认证方法
- 代理服务器应答,将选择的方法发送给客户端
- 客户和代理服务器进入由选定认证方法所决定的子协商过程
- 子协商过程结束后,客户端发送请求信息,其中明了目标服务器的IP地址和端口
- 代理服务器验证客户端身份,验证通过后会与目标服务器连接
- 代理服务器向客户端返回连接信息
- 若连接完成,则代理服务器开始作为中转站中转数据
Socks5协议同时支持TCP及UDP代理,它主要工作与会话层,因此与上层的协议无关。但是,它无法做到全局代理。
VPN原理介绍
VPN,Virtual Private Network(虚拟专用网络),被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接,是一条穿过公用网络的安全、稳定的隧道。VPN有很多种实现方式,常见的有PPTP,L2TP ,L2TP over IPSEC等等。
以OSI 模型参照标准,不同的VPN术可以在不同的OSI协议层实现。如下表:
1 | VPN在OSI中的层次 VPN实现技术 |
隧道技术
隧道技术的基本过程是在源局域网与公网的接口处将数据(可以是OSI七层模型中的数据链路层或网络层数据)作为负载封装在一种可以在公网上传输的数据格式中,在目的局域网与公网的接口处将数据解封装,取出负载。被封装的数据包在互联网上传递时所经过的逻辑路径被称为“隧道”。
PPTP VPN技术
PPTP(点到点隧道协议)是由PPTP论坛开发的点到点的安全隧道协议,为使用电话上网的用户提供安全VPN业务,1996年成为IETF草案。PPTP是PPP协议的一种扩展,提供了在IP网上建立多协议的安全VPN的通信方式,远端用户能够通过任何支持PPTP的ISP访问企业的专用网络。
PPTP使用一个TCP连接对隧道进行维护,使用通用路由封装(GRE)技术把数据封装成PPP数据桢通过隧道传送。可以对封装PPP桢中的负载数据进行加密或压缩。
下边简单描述PPTP 过程中涉及的封装和解封步骤。
封装:
1.数据封装于 IP (或 IPX 和 NetBEUI )封包中。
2.该 IP (或 IPX 和 NetBEUI )封包封装在 PPP 帧中。
3.该 PPP 帧封装在 GRE 帧中(并加密)。
4.该 GRE 帧封装在 IP 封包中。
解封:
1.移除IP 包头。
2.移除GRE 包头(解密过程)。GRE负载中是一个PPP帧。
3.移除PPP 包头。
4.将该IP(或IPX和NetBEUI)封包路由到其最终的目的地。
MPPE将通过由MS-CHAP、MS-CHAP v2或EAP-TLS身份验证过程所生成的加密密钥对PPP帧进行加密。为对PPP帧中所包含的有效数据进行加密,虚拟专用网络客户端必须使用MS-CHAP、MS-CHAP v2或EAP-TLS身份验证协议。PPTP将利用底层PPP加密功能并直接对原先经过加密的PPP帧进行封装。
PPTP协议将控制包与数据包分开,控制包采用TCP控制,客户端连接到VPN服务器TCP1723端口,用于控制和管理VPN隧道的功能;数据包部分先封装在PPP协议中,然后封装到GRE V2协议中,最后封装到IP协议中传送。
可以看出来,VPN技术主要应用于IP层及以下,因此不依赖与具体的应用,所以可以实现全局代理。
总结
虽然这篇博客说得有点简单了,但是重要的点都点出来了,也说得很清楚,很感谢作者。