SOCKS5科学上网及路由器原理

以路由器解读局域网之间的数据传输,以Shadowsocks说明SOCKS5协议。

路由器原理

从功能上来说路由器(Router)把多个逻辑上分开的网络连接在一起,逻辑网络一般定义为一个单独的网络或一个子网,各个逻辑网络可以使用不同的硬件组网,但需要使用相同的网络层协议,异构网络互联一般都采用路由器来完成,连接光纤进行远程传输的路由器一般称之为远程路由器,相反则称之为本地路由器。

网络七层协议

路由器所要做工作,是为流经它的每个数据帧,寻找一个最佳传输路径,并把每帧数据有效地传送到目的地,因此选择最佳路由路径是路由器的核心所在,因此它需要根据过往的数据,进行学习自行调整路径,以达到选择最佳路径的目标,这就路径表(RoutingTable)概念,路径表可以由系统管理员进行设置,由系统动态修改,由路由器自动调整,还也可以由主机控制。

因此也就有了为静态路径表和动态(Dynamic)路径表之分,路由器除了对数据帧进行转发之外,还具有流量控制功能。

SOCKS5协议

SOCKS协议是一种Internet跟踪协议标准,作用于网络防火墙,是一个会话层与会话层间之间的安全服务方案,有效地将内部网络与外部网络进行隔离,因为需要对应用层进行过滤,所以,SOCKS协议建立在OSI模型第5层的会话层上,因此,改变OSI模型第7层的应用程序协议,不会对SOCKS协议产生影响。

SOCKS协议参见rfc1928

Shadowsocks工作原理

应用程序与Shadowsocks客户端之间的沟通,使用SOCKS5标准,因此为浏览器配置代理时,需要把协议指定为SOCKS5。

浏览器通过SOCKS5格式把数据发送给Shadowsocks本地客户端,Shadowsocks客户端(ss-local)把数据进行加密,然后把数据发送到远程服务器上的Shadowsocks服务(ss-remote)上,Shadowsocks服务端(ss-remote)接收到数据后进行解密,因为Shadowsocks客户端(ss-local)在发送的加密数据流中,是以目标地址开始,所以Shadowsocks服务端(ss-remote)能够正确的与目标服务器建立TCP连接,并将有效数据转发给目标服务器。

ss-remote接收来自目标服务器的回复,加密并将其转发回ss-local,直到ss-local断开连接。

Shadowsocks客户端与Shadowsocks服务端之间的数据格式:

[target address][payload]

Shadowsocks基于SOCKS5的安全拆分代理,整个交互过程:

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

以上是以TCP方式进行的数据传递,UDP方式基本相似:

ss-local将包含目标地址和有效负载的加密数据包发送到ss-remote。

[target address][payload]

收到加密数据包后,ss-remote解密并解析目标地址。然后,将仅包含有效负载的新数据包发送到目标。ss-remote从目标接收数据包,并在每个数据包的有效负载前面加上目标地址,然后将加密的数据包发送回ss-local。

[target address][payload]

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