socks5代理原理

socks5代理要从网络协议说起,SOCKS协议建立在OSI 7层模型的会话层。

网络七层协议

SOCKS5协议

SOCKS协议是internet跟踪协议标准,作用于网络防火墙,是会话层与会话层间的安全服务方案,将内部网络与外部网络进行隔离。

SOCKS协议建立在OSI 7层模型的第5层,对应用层进行过滤,第7层应用程序协议的变化,不会影响SOCKS。

SOCKS协议参见rfc1928

Shadowsocks工作原理

Shadowsocks客户端与应用程序间使用socks5建立连接,在配置浏览器代理时,选择socks5协议。

浏览器使用socks5格式将数据发送给shadowsocks本地客户端。

Shadowsocks本地客户端(ss-local)将数据加密,发送给远程Shadowsocks服务(ss-remote)。

Shadowsocks服务端(ss-remote)接收数据并解密,将数据转发给目标服务。

Ss-remote接收来自目标服务器的回复,加密并回传给ss-local。

Ss-local解密数据并传给浏览器。

Shadowsocks客户端(ss-local)在发送加密数据流中,以目标服务器地址开始。

Shadowsocks服务端(ss-remote)以此与目标服务器建立tcp连接,并将有效数据转发给目标服务器。

Shadowsocks客户端与服务端数据传输格式:

[target address][payload]

Shadowsocks基于socks5安全拆分代理,整个交互过程如下:

client <---> ss-local <--[encrypted]--> ss-remote <---> target

Shadowsocks地址数据格式

[1-byte type][variable-length host][2-byte port]一

type:长度1字节,用于说明host数据类型;

0x01:表示4字节的IPv4地址;

0x03:表示host是1~255字节变长域名;

0x04: 表示host是一个16字节的IPv6地址;

port是个两字节的端口号。

以上是tcp方式的数据传递,udp基本相似,ss-local将包含目标地址和有效负载的加密数据包发送到ss-remote。

[target address][payload]

收到加密数据包后,ss-remote解密并解析目标地址,将有效数据包发送给目标服务。

ss-remote从目标接收数据包,并在每个数据包的有效数据前面加上目标地址,将加密数据包回传给ss-local。

[target address][payload]

本质上,ss-remote是为ss-local作网络地址转换。