「SOCKS」- Socket Secure

  CREATED BY JENKINSBOT

Socket Secure(SOCKS)是一个Internet协议,通过代理服务器在客户端和服务器之间交换网络数据包。SOCKS5额外提供身份验证,因此只有授权用户才能访问服务器。实际上,SOCKS服务器代理可以连接到任意IP地址的TCP连接,并提供UDP数据包转发的方式。

SOCKS在OSI模型的第5层(会话层,表示层和传输层之间的中间层)执行。SOCKS服务器接受TCP端口1080上的传入客户端连接。

原理简述

要讲SOCKS的原理就不得不提一提传统的网络交互模式和GFW。

以前我们是这么访问网络的。。。

这个时候我可能还没有出生,我们访问各种网站都是简单而直接的,用户的请求通过路由(Router)发送到服务提供方,服务返回数据。

后来出现一个东西,它叫GFW。。。

GFW可以理解为Router的升级。它有很多的功能,比如数据包内容检查。每当用户需要获取信息,都经过了GFW的审查,GFW将它不喜欢的内容统统过滤掉。于是客户的数据包内容触发GFW的过滤规则的时候,就会收到Connection Reset这样的响应内容,而无法接收到正常的内容。

再后来出现了一个东西。。。

后来出现了一个协议,它叫做SOCKS协议。由于发送给GFW的数据加密了,所以GFW也发现不了数据包的内容,也就没有办法触发GFW的过滤规则。

后来GFW发现SSH的发送的数据包的内容虽然是加密的,但是SSH发送的数据包有某些特征,然后GFW就对其进行了干扰,导致SSH很不稳定。

再后来,Shadowsocks出现了,SOCKS升级了

于是clowwindy同学分享并开源了他的解决方案。简单理解的话,shadowsocks是将原来ssh创建的Socks5协议拆开成server端和client端,所以Shadowsocks基本上与ssh tunnel的原理大致类似。ss-local和ss-server 两端通过多种可选的加密方法进行通讯,经过GFW的数据包是加密的,因此GFW也无法对通讯数据进行解密,而且最重要的是数据包没有明显的特征码,对于GFW来说是常规的TCP包,没有办法审查内容。

后来,作者喝茶了,因为技术上很难封杀Shadowsocks。

相关链接

如何检测 Socks 协议:
Socks5 代理协议详解-云社区-华为云
Testing the Status of a SOCKS5 Proxy in Python

参考文献

Wikipedia/SOCKS
SOCKS Protocol Version 5
道高一尺,牆高一丈:互聯網封鎖是如何升級的
Shadowsocks 原理简介及安装指南
ShadowSocks 的翻墙原理(两篇)
ssh建隧道简单介绍:科学上网、本地服务穿透到外网
shadowsocks实现原理
Shadowsocks原理和搭建(学习)
Shadowsocks 原理详解