一、协议概述
SOCKS5是工作在OSI会话层的代理协议,标准定义于RFC 1928。核心特点是不解析应用层数据,透明转发任意TCP/UDP流量,支持多种认证方式,协议简洁通用。 完整通信过程分为方法协商、认证、请求响应、数据转发四个阶段,每个阶段都有严格的报文格式规范。
二、完整握手阶段详解
2.1 方法协商阶段
客户端与代理建立TCP连接后,首先发送问候报文,声明协议版本与支持的认证方法列表。
- 客户端报文:包含版本号(固定为
0x05)、支持的认证方法数量、方法列表。 常见认证方法:0x00无认证、0x02用户名密码认证。 - 服务端响应:选中一种认证方法返回;若无可接受方法,返回
0xFF并关闭连接。
2.2 认证阶段
若选择需要认证的方法,进入认证子流程。以最常用的用户名密码认证(RFC 1929)为例:
- 客户端发送认证报文,包含用户名、密码及对应长度字段;
- 服务端校验凭据,返回认证结果:
0x00代表成功,其他值代表失败。 认证失败通常会直接关闭连接。报文格式不匹配、特殊字符处理不当是常见失败原因。
2.3 请求与响应阶段
认证成功后,客户端发送代理请求,指定目标地址、端口与命令类型。
- 核心命令类型
CONNECT:建立TCP连接,最常用;UDP ASSOCIATE:建立UDP中继,转发UDP数据;BIND:反向连接,用于主动模式FTP等场景。
- 地址类型:支持IPv4、域名、IPv6三种地址格式。
- 服务端响应:返回状态码、绑定地址与端口。状态码
0x00代表成功,其他值对应不同错误类型。
2.4 数据转发阶段
连接建立成功后,进入透明转发模式。
- TCP场景:客户端与代理、代理与目标各有一条TCP连接,代理双向原样转发字节流;
- UDP场景:代理分配UDP中继端口,客户端发送带目标地址头的UDP报文,代理解包转发,响应则反向封装返回。
三、核心技术特性
3.1 协议通用性
支持任意基于TCP/UDP的应用层协议,适用范围远超HTTP代理,可承载网页、文件传输、游戏、实时通信等各类流量。
3.2 透明转发特性
不修改应用层数据,不引入代理头部标识,匿名性优于应用层代理,不易被目标平台识别。
3.3 双协议支持
原生支持TCP和UDP两种传输层协议,是HTTP代理不具备的能力,适配游戏、VoIP、DNS查询等UDP场景。
四、服务选型评估维度
- 协议合规性:是否完整支持标准命令,错误码返回准确,认证处理规范;
- UDP支持能力:UDP中继的稳定性、丢包率、并发能力,涉及UDP业务需重点考察;
- 并发性能:单节点并发连接数、握手处理速度、数据吞吐量;
- 安全性:是否支持TLS封装、日志策略、出口IP匿名性。
五、常见故障排查
- 协商阶段返回0xFF/直接断连:客户端支持的认证方法与服务端要求不匹配,或协议版本错误;
- 认证失败:凭据错误,或用户名密码长度字段处理异常;
- CONNECT失败:目标不可达、端口被限制,或网络不通;
- UDP不通:代理未实现UDP ASSOCIATE,或防火墙拦截中继端口。
