代理协议IETF RFC 1928 标准本地应用通信中枢

SOCKS5

通用会话层代理 · TCP/UDP ASSOCIATE · 全平台通用本地入站中枢

由 IETF 于 1996 年标准化的通用会话层中继协议(RFC 1928)[1]。 支持 TCP 全双工透传与 UDP ASSOCIATE 数据报转发,并支持由代理远端代为解析域名。 在现代翻墙体系中,SOCKS5 从不直接暴露于公网,而是作为全平台翻墙客户端在本机开放的标准入站端口, 充当浏览器、开发环境与翻墙内核之间的唯一互联纽带[2]。

标准化组织IETF AFT 工作组
RFC 定稿1996.03.01
核心指令CONNECT / BIND / UDP ASSOCIATE
生态定位现代翻墙客户端本机与浏览器通信的绝对中枢

日期辨析:1992 年 5 月 SOCKS v4 雏形 vs 1996 年 3 月 RFC 1928 SOCKS5 定稿

SOCKS v4 雏形公开1992.05.01

David Koblas 为 MIPS 公司内网跨防火墙访问公网设计了极简的 SOCKS v4 TCP 代理协议。

RFC 1928 SOCKS5 正式定稿1996.03.01

IETF 发布 RFC 1928,全面扩展认证协商、UDP 转发(UDP ASSOCIATE)与远端域名解析支持。

现代翻墙本地入站标准确立2012.04.20

Shadowsocks 开源,确立了“本地 SOCKS5 入站 + 远端专有加密协议出站”的现代科学上网分工架构。

编写口径:所有时间节点严格以 IETF RFC 官方文献与主流代理软件源码库为权威依据。

词条概览与核心定位

01

在互联网早期,内网主机跨越企业安全网关与防火墙访问公网是一大痛点。 David Koblas 于 1992 年设计了最初的 SOCKS v4,随后 Ying-Da Lee 扩展了域名远程解析能力(SOCKS v4A)。 最终在 1996 年,IETF 统一发布了经典的 RFC 1928 规范,正式确立了 SOCKS Protocol Version 5 国际标准[1]。

SOCKS5 的核心魅力在于其对应用层协议的“完全透明性”: 它不关心上层传输的是 HTTP、SSH、SMTP 还是自定义二进制协议, 仅在会话层帮助客户端在代理服务器上建立一条通往任意目标主机(IPv4、IPv6 或 FQDN 域名)的 TCP 或 UDP 管道。 因此,当 Shadowsocks、Clash、Mihomo 与 sing-box 崛起时, 全行业不约而同地选择将 SOCKS5 固化为本机监听的唯一标准入站协议[3]。

定位结论

SOCKS5 属于操作系统本地进程间通信的通用中转基石。 由于协议本身为全明文、无防探测混淆能力,严禁直接在跨国公网裸跑; 但只要你在本机运行任何翻墙软件,SOCKS5 就是你在浏览器和终端中必须填入的那道本地大门。

握手流程与 UDP ASSOCIATE 架构

02
1. 方法协商阶段 (Method Negotiation)客户端发起连接,告知其支持的认证方式列表(如 0x00 无需认证、0x02 用户名密码); 服务端评估后返回选定的单一方法代码,随后进入子协商流程[2]。
2. 请求与目标绑定 (Request & Address Resolution)客户端发送 0x01 (CONNECT)、0x02 (BIND) 或 0x03 (UDP ASSOCIATE), 并附带目标地址类型(0x01 IPv4、0x03 域名、0x04 IPv6)与端口。服务端完成目标连接后返回状态码 0x00 (成功)。
3. UDP ASSOCIATE 数据报通道绑定对于 DNS 查询或游戏语音等 UDP 流量,客户端通过 TCP 控制通道发起 UDP ASSOCIATE 指令, 服务端分配一个专门的 UDP 接收端口;后续所有 UDP 报文均在头部注入 4 字节 SOCKS5 目标信息后由该端口中继。

TCP CONNECT 握手标准状态流转

  1. 版本与方法协商包:客户端发送 0x05 0x01 0x00(SOCKS5、支持 1 种方法、无需密码);服务端回显 0x05 0x00 确认。
  2. 目标建立请求包:客户端发送 0x05 0x01 0x00 0x03 [域名长度] [域名字节] [端口],指令服务端代为解析并建连。
  3. 应答成功并进入全双工透传:服务端向目标建立 TCP 握手成功后,返回 0x05 0x00 0x00 ...,双方即刻进入零拷贝双向透明流转发。

公网裸奔危害与 GFW 秒级阻断

SOCKS5 的首包以极其固定的 0x05 开头,且目标域名与传输内容完全为纯明文。 一旦有用户试图在海外服务器直接搭建公网 SOCKS5 服务,GFW 的深度包检测设备可以在第一个握手包中清晰读取目标域名, 并瞬间下发 TCP RST 进行阻断,因此必须包裹在安全隧道内部使用。

版本演进时间线(共 7 个关键节点)

03

以下时间线记录了 SOCKS5 从 1990 年代早期起源、IETF 标准化定稿到科学上网时代成为全平台本地入站中枢的完整历程:

纪事

1992 年 - 1996 年:从企业防火墙到 IETF 国际标准

  • David Koblas 设计并发布 SOCKS v4

    在 MIPS Computer Systems 任职期间为穿越企业防火墙设计 SOCKS v4,仅支持 IPv4 与明文 TCP 代理。

    SOCKS 协议早期历史文献
  • Ying-Da Lee 提出 SOCKS v4A 扩展

    允许客户端将未解析的目标域名直接交给代理服务器解析,彻底解决了客户端本地无 DNS 解析能力的问题。

    SOCKS v4A 规范草案
  • IETF 正式发布 RFC 1928 与 RFC 1929

    标准化 SOCKS5 协议,引入双向方法协商、UDP 转发(UDP ASSOCIATE)以及用户名/密码认证机制。

    IETF RFC 1928 官方标准
纪事

2012 年 - 2018 年:科学上网时代的“本地协议”定位

  • Shadowsocks 将 SOCKS5 确立为本地标准接口

    clowwindy 在 Shadowsocks 中采用“本地提供标准 SOCKS5 服务,公网采用对称加密隧道”的模块化架构,成为全行业规范。

    Shadowsocks 官方历史记录
  • Surge 与客户端生态全面普及 Local SOCKS5 + PAC 分流

    客户端在本地开放 SOCKS5 端口并通过 PAC 规则或 TUN 虚拟网卡实现按域名/IP 的国内外精准分流。

    Surge 官方手册与代理分流规范
纪事

2020 年 - 2026 年:高性能混合端口与全协议中继

  • Clash / Mihomo 普及 HTTP/SOCKS5 混合自适应入站

    单端口自动嗅探首字节:HTTP 请求按 HTTP 代理处理,二进制握手包按 SOCKS5 处理,大幅简化用户配置。

    Mihomo 官方文档:混合端口
  • sing-box 推出超轻量零拷贝 SOCKS5 实现

    采用纯 Go 原生实现对 SOCKS5 的透明转发,完全剔除冗余内存缓冲,使本地 IPC 传输达到微秒级延迟。

    sing-box 官方源码库

生态实现与客户端兼容性

04

作为互联网基础协议,SOCKS5 在全平台软件、浏览器与开发工具链中获得了 100% 的原生支持。

软件 / 内核类型支持平台支持级别起始版本发布日期特性说明
Google Chrome / Firefox / Safari客户端全平台主流浏览器官方原生支持全版本内置2002.09.23全平台浏览器均原生支持通过系统代理设置或 SwitchyOmega 等插件将流量交由 SOCKS5 代理。
Curl / Git CLI客户端Linux, Windows, macOS官方原生支持7.10+1998.03.20命令行工具原生支持 socks5:// 与 socks5h://(带远程域名解析)协议前缀。
Mihomo (Clash Meta)核心内核全平台官方参考入站v1.0.0+2022.01.15提供高性能本地 SOCKS5 入站端口(默认 7890 混合端口),负责接管所有本机应用流量。
sing-box核心内核全平台官方参考入站v1.0.0+2022.07.18原生支持极低内存开销的 SOCKS5 入站与出站,完整支持 UDP ASSOCIATE 全功能。
Dante SOCKS Server核心内核Linux, BSD, Solaris成熟工业实现1.0.0+1998.09.01全球最老牌的企业级开源 SOCKS5 代理服务端,支持高度灵活的 ACL 访问控制与审计日志。

适用场景、网络边界与部署建议

05

最佳适用场景

本地客户端入站中转:Clash、Mihomo、sing-box 与 Xray 在本机监听(127.0.0.1:7890)接管所有系统应用流量; 开发工具链网络代理:为 Git、Curl、Docker、Pip、NPM 等命令行工具设置 ALL_PROXY=socks5://127.0.0.1:7890; 跨平台浏览器独立分流:配合 SwitchyOmega 或系统设置实现仅特定浏览器标签页走翻墙中转。

网络边界与安全注意事项

严禁公网裸跑:绝对不可在海外公网服务器上直接监听 0.0.0.0:1080 充当翻墙节点,会被防火墙秒级掐断; 区分 socks5 与 socks5h:在命令行中使用 socks5:// 会在本地执行 DNS 解析(可能遭遇污染),务必使用 socks5h:// 让远端代解; 无重放与抗注入保护:如果用于内网通信,需防范局域网内部 ARP 欺骗与流量劫持。

第一手文献与官方参考资料

06

词条事实与技术定义均以 IETF RFC 官方文献与工业实现标准为准:

  1. [1]RFC 1928: SOCKS Protocol Version 5 (IETF 官方标准规范)详述 SOCKS5 协议的三阶段协商模型:方法选择、指令请求(CONNECT/BIND/UDP)以及目标地址格式。https://www.rfc-editor.org/rfc/rfc1928
  2. [2]RFC 1929: Username/Password Authentication for SOCKS V5定义 SOCKS5 协议中子协商认证状态码与明文用户名密码校验流程的标准规范。https://www.rfc-editor.org/rfc/rfc1929
  3. [3]Shadowsocks Technical Architecture & SOCKS5 Integration剖析现代翻墙软件为何统一选择 SOCKS5 作为操作系统内进程间通信(IPC)的事实标准。https://shadowsocks.org/doc/architecture.html
  4. [4]Dante: The Open Source SOCKS5 Solution & Architectural Guidelines老牌开源工业级 SOCKS 服务端的设计文档,涵盖了多宿主主机绑定与网络安全隔离实践。https://www.inet.no/dante/