在线咨询
在线客服

工作日:9:00-24:00

商务合作

15366085265

QQ联系方式

1872421339

大客户经理

宋经理

客户经理
专业客户经理,解答您的疑问

SOCKS5 协议流程:从握手、认证到 TCP/UDP 转发的完整深度解析

发布日期

一、SOCKS5 的定位:它解决了什么问题?

SOCKS5 是一种通用、透明、底层的代理协议,与 HTTP 代理不同,SOCKS5 不解析上层协议内容,而是直接中继 TCP 与 UDP 数据。

它可以代理:浏览器、游戏、数据库、SSH、QUIC、DNS 等几乎所有应用协议,因此成为现代代理系统的基础组件。

二、SOCKS5 协议全流程概览

完整的 SOCKS5 流程包括以下四个阶段:

1. 握手(Hello) —— 客户端告知支持的认证方式
2. 认证 —— 服务器选择并执行认证(如用户名密码)
3. 请求阶段 —— 指明目标地址与端口,CONNECT/UDP
4. 数据转发 —— TCP/UDP 中继正式建立

三、步骤 1:握手(Hello)阶段

客户端首先发起 Hello,告诉服务器自己支持哪些认证方式。

+----+----------+----------+
|VER | NMETHODS | METHODS  |
+----+----------+----------+
| 1  |    1     | 1~255    |

示例:客户端支持“无认证”和“用户名密码”。

05 02 00 02

服务器响应:

+----+--------+
|VER | METHOD |
+----+--------+

05 00   (表示选择无认证)

四、步骤 2:认证阶段(如果服务器要求)

若服务器选择 METHOD = 0x02(用户名密码),客户端需发送:

+----+------+----------+------+----------+
|VER | ULEN | UNAME    | PLEN | PASSWD   |
+----+------+----------+------+----------+

示例:用户名 test、密码 passwo

01 04 74657374 06 70617373776f

服务器返回认证结果:

+----+--------+
|VER | STATUS |
+----+--------+

STATUS = 0 表示认证成功。

五、步骤 3:请求阶段(CONNECT / UDP ASSOCIATE)

客户端在认证通过后发送代理请求,格式如下:

+----+-----+-------+------+----------+----------+
|VER | CMD | RSV   | ATYP | DST.ADDR | DST.PORT |
+----+-----+-------+------+----------+----------+

字段意义:

VER = 0x05(版本号)
CMD = 01 CONNECT,03 UDP
ATYP = 01 IPv4,03 域名,04 IPv6

示例:通过域名连接到 www.google.com:443

05 01 00 03 0E 7777772E676F6F676C652E636F6D 01BB

服务器响应连接建立结果:

+----+-----+-------+------+----------+----------+
|VER | REP | RSV   | ATYP | BND.ADDR | BND.PORT |
+----+-----+-------+------+----------+----------+

REP = 00 表示成功。

六、步骤 4:数据转发(TCP / UDP)

6.1 TCP CONNECT 模式

客户端与目标服务器之间的所有 TCP 数据由代理服务器中继,代理不关心具体内容,透明转发。

客户端 <==TCP==> 代理服务器 <==TCP==> 目标服务器

6.2 UDP ASSOCIATE 模式

CMD=03 时,客户端请求建立 UDP 转发通道。代理服务器会返回:UDP 中继地址 & 端口。

客户端发送的 UDP 包必须加 SOCKS5 UDP Header:

+----+------+------+----------+----------+----------+
|RSV | FRAG | ATYP | DST.ADDR | DST.PORT |   DATA   |
+----+------+------+----------+----------+----------+

DATA 是原始 UDP 负载。代理服务器解析头部后再转发给目标服务器。

七、完整 SOCKS5(TCP CONNECT)流程示意图

客户端                                    代理服务器
--------------------------------------------------------------
Hello                    →     VER=05, METHODS=[00,02]
←   Select Method              METHOD=00 (No Auth)

CONNECT 请求             →     CMD=01, DST.ADDR, DST.PORT
←   连接建立成功                REP=00

TCP 数据包双向转发       ↔     原样透传,不修改上层协议
--------------------------------------------------------------

八、完整 SOCKS5(UDP)流程示意图

客户端                                   代理服务器
--------------------------------------------------------------
Hello                   →
← Select Method

UDP Associate          → CMD=03
← UDP Relay 信息

UDP 数据(封装)        →   SOCKS5 UDP Header + DATA
← 封装后的返回包
--------------------------------------------------------------

九、常见误区与关键点

1)多数 SOCKS5 代理并不支持 UDP(或实现不完整)
—— 导致 QUIC、DNS、游戏协议无法通过

2)浏览器启用 SOCKS5 后会默认禁用 QUIC(HTTP/3 自动降级为 HTTP/2)

3)UDP ASSOCIATE 不等于“直接发 UDP 就行”
—— 必须添加 SOCKS5 UDP Header

4)SOCKS5 本身不加密 —— 数据在网络中是明文
—— 因此很多代理系统会在外层加入 TLS 或自定义加密

十、总结:SOCKS5 为什么仍然是当今最通用的代理协议?

原因包括:

· 协议简单、透明
· 支持 TCP/UDP
· 支持多认证方式
· 支持 IPv4/IPv6/域名
· 适配通用性极强

SOCKS5 是现代代理技术的基石之一,无论是浏览器代理、游戏代理还是企业网络流量中继,它都有不可替代的作用。