SOCKS5

关注
义项:网络代理协议
SOCKS5

SOCKS5 是 SOCKS 代理协议的第五个版本,由互联网工程任务组(IETF)以 RFC 1928 文档标准化,1996 年 3 月发布。它在客户端与目标服务器之间充当中介,代替客户端建立连接并双向转发数据,服务器端看到的是代理而非真实客户端[1]。与只支持 TCP 的第四版相比,SOCKS5 增加了 UDP 转发、身份验证机制以及对 IPv6 和域名的寻址支持,是当前广泛使用的版本[2]。SOCKS5 工作在协议栈的会话层,不解析上层应用协议,因此可用于各类网络应用的通用代理[3]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

SOCKS5 是一种通用的电路级代理协议,属于 SOCKS 协议族,规范文本为互联网工程任务组的 RFC 1928,1996 年 3 月发布。它允许位于防火墙一侧的主机与另一侧的主机在通过认证后相互通信,而无需在两者之间直接传递 IP 数据包[4]。SOCKS5 由客户端和服务器两个组件构成,客户端工作在应用层与传输层之间,服务器端则实现于应用层[4]。

SOCKS5 与 HTTP 代理的关键差异在于抽象层次。HTTP 代理能读取、修改和缓存 HTTP 流量,因为它使用相同的应用层协议通信;SOCKS5 在会话层转发 TCP 连接或 UDP 数据报,无需理解上层协议,因此对应用透明[5]。这一特性使任何支持配置 SOCKS 代理的应用程序都能通过它路由流量[5]。

原理

SOCKS5 的标准服务端口是 TCP 1080。客户端先与该端口建立 TCP 连接,随后进入认证方法协商阶段:客户端发送协议版本号和它支持的认证方法列表,服务器从中选定一种并回复。可选的认证方法包括无需认证(0x00)、GSSAPI(0x01)和用户名密码认证(0x02),其中 GSSAPI 是合规实现必须支持的方法。若服务器返回 0xFF,表示客户端列出的方法均不可接受,客户端必须关闭连接。

认证完成后客户端发送请求报文,其格式为:$VER \mid CMD \mid RSV \mid ATYP \mid DST.ADDR \mid DST.PORT$。CMD 字段定义 3 种命令:CONNECT(0x01)用于建立正向连接,BIND(0x02)用于需要客户端接受服务器连接的反向场景,UDP ASSOCIATE(0x03)用于建立 UDP 转发关联。ATYP 字段指定目标地址类型,支持 IPv4 地址(0x01)、域名(0x03)和 IPv6 地址(0x04)。服务器评估请求后返回应答,其结构为 $VER \mid REP \mid RSV \mid ATYP \mid BND.ADDR \mid BND.PORT$,其中 REP 字段报告成功或各类失败原因,如网络不可达、主机不可达、连接被拒等。

UDP 转发采用带外模型:为每个 UDP 数据连接建立一条 TCP 控制连接和一条 UDP 数据中继连接,认证与端口绑定经 TCP 控制连接完成[6]。客户端发出的 UDP 数据被封装在 SOCKS5 UDP 数据报中发送给服务器,服务器解出实际数据后转发给远端;反向数据则由服务器封装后发回客户端[6]。当承载 UDP ASSOCIATE 请求的 TCP 连接终止时,该 UDP 关联也随之结束[7]。

发展历程

SOCKS 协议最初由 David Koblas 于 1990 年开发,当时作为 MIPS 计算机系统公司的内部工具,用于在防火墙后代理 TCP 连接。1992 年,NEC 的 Ying-Da Lee 将其改进并发布为 SOCKS4,增加了对目标域名的解析支持。SOCKS4 仅支持 TCP,且不提供身份验证机制。

1996 年,SOCKS5 以 RFC 1928 文档形式发布并成为标准。它在 SOCKS4 的基础上扩大了功能范围:把 UDP 纳入转发能力,把协议框架扩展为支持通用强认证方案,并把寻址方案扩展到涵盖域名和 IPv6 地址[8]。RFC 1928 描述这一版本时明确指出,新协议相对于第四版模型的扩展正体现在这 3 个方向[8]。SOCKS5 至今仍是 SOCKS 协议族的现行版本[5]。

应用

SOCKS 服务器常被用作网络防火墙的一部分,让防火墙后的主机获得对互联网的访问能力,同时阻止外部未授权主机访问内部主机[9]。由于 SOCKS 服务器不识别传输请求所用的具体协议,它可以转发那些处于应用层、有专门代理无法处理的协议,例如 Telnet[9]。

SOCKS5 的协议无关性使其适用于浏览器之外的多种客户端。邮件客户端、点对点传输软件、游戏客户端、数据库连接、SSH 会话和自定义脚本都可以通过它路由流量,代理只需建立连接并转发数据[5]。在需要将特定应用流量经由指定 IP 地址转发以实现隐私或地域访问的场景中,SOCKS5 常被选用[5]。此外,SOCKS5 可在代理服务器端解析域名,这一机制用于避免 DNS 泄漏[5]。

局限

SOCKS5 协议本身不提供加密功能[2]。它只在客户端与代理之间转发数据,数据内容可被网络中的其他方观察,需要保密时应结合传输层安全等外部加密协议使用。此外,SOCKS5 工作在会话层,无法隧道传输低于该层的协议,也不提供网络层网关服务,例如转发 ICMP 消息,因此 ping 一类操作不能经 SOCKS5 代理完成[10]。

UDP 支持虽然写入了 SOCKS5 规范,但实际落地程度有限。规范只为出站 UDP 连接提供转发能力,不支持入站 UDP 连接[6]。现实中的多个客户端程序并未实现 SOCKS5 的 UDP 转发,例如 qBittorrent、Deluge 和 BiglyBT 都不支持经 SOCKS5 传输 UDP,部分浏览器也把经 SOCKS5 的连接限制在 TCP 上[11]。因此,能否使用 UDP 转发取决于客户端实现,而非协议规范本身[6]。

协议的协议无关性也带来能力上的取舍。由于 SOCKS5 只看到原始字节流,它无法像 HTTP 代理那样缓存内容或按 URL 过滤请求,对需要屏蔽特定网站的过滤型部署而言,HTTP 代理更为合适[5]。

参见

  • 代理服务器 —— SOCKS5 通过代理服务器在客户端与目标主机之间中继流量。

  • HTTP代理 —— 另一种常见代理形式,只处理应用层协议,与 SOCKS5 的抽象层次不同。

  • UDP —— SOCKS5 相对第四版新增支持的传输层协议。

  • IPv6 —— SOCKS5 寻址方案新增支持的地址类型。

  • 防火墙 —— SOCKS 代理常用于穿越防火墙并实施访问控制。

  • 传输层安全 —— 加密协议,可与不提供加密的 SOCKS5 配合使用。

参考资料

  1. 第 15 章 使用 SOCKS [引用日期2026-10-14]
  2. 维基百科,自由的百科全书 [引用日期2026-10-14]
  3. [MS-GRVHENC]: SOCKS Connections [引用日期2026-10-14]
  4. SOCKS [引用日期2026-10-14]
  5. SOCKS5 代理詳解:最通用的代理協議 [引用日期2026-10-14]
  6. Billy(PDF) [引用日期2026-10-14]
  7. SOCKS Protocol Version 5 [引用日期2026-10-14]
  8. rfc1928 [引用日期2026-10-14]
  9. 第 15 章 使用 SOCKS [引用日期2026-10-14]
  10. socks [引用日期2026-10-14]
  11. github.com 上的网页 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:3 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:46:48Z

历史版本

本条目引用的词条
代理服务器 HTTP代理 UDP IPv6 防火墙 传输层安全