通用会话层代理 · TCP/UDP ASSOCIATE · 全平台通用本地入站中枢
由 IETF 于 1996 年标准化的通用会话层中继协议(RFC 1928)[1]。 支持 TCP 全双工透传与 UDP ASSOCIATE 数据报转发,并支持由代理远端代为解析域名。 在现代翻墙体系中,SOCKS5 从不直接暴露于公网,而是作为全平台翻墙客户端在本机开放的标准入站端口, 充当浏览器、开发环境与翻墙内核之间的唯一互联纽带[2]。
David Koblas 为 MIPS 公司内网跨防火墙访问公网设计了极简的 SOCKS v4 TCP 代理协议。
IETF 发布 RFC 1928,全面扩展认证协商、UDP 转发(UDP ASSOCIATE)与远端域名解析支持。
Shadowsocks 开源,确立了“本地 SOCKS5 入站 + 远端专有加密协议出站”的现代科学上网分工架构。
编写口径:所有时间节点严格以 IETF RFC 官方文献与主流代理软件源码库为权威依据。
在互联网早期,内网主机跨越企业安全网关与防火墙访问公网是一大痛点。 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 就是你在浏览器和终端中必须填入的那道本地大门。
0x01 (CONNECT)、0x02 (BIND) 或 0x03 (UDP ASSOCIATE), 并附带目标地址类型(0x01 IPv4、0x03 域名、0x04 IPv6)与端口。服务端完成目标连接后返回状态码 0x00 (成功)。0x05 0x01 0x00(SOCKS5、支持 1 种方法、无需密码);服务端回显 0x05 0x00 确认。0x05 0x01 0x00 0x03 [域名长度] [域名字节] [端口],指令服务端代为解析并建连。0x05 0x00 0x00 ...,双方即刻进入零拷贝双向透明流转发。SOCKS5 的首包以极其固定的 0x05 开头,且目标域名与传输内容完全为纯明文。 一旦有用户试图在海外服务器直接搭建公网 SOCKS5 服务,GFW 的深度包检测设备可以在第一个握手包中清晰读取目标域名, 并瞬间下发 TCP RST 进行阻断,因此必须包裹在安全隧道内部使用。
以下时间线记录了 SOCKS5 从 1990 年代早期起源、IETF 标准化定稿到科学上网时代成为全平台本地入站中枢的完整历程:
在 MIPS Computer Systems 任职期间为穿越企业防火墙设计 SOCKS v4,仅支持 IPv4 与明文 TCP 代理。
SOCKS 协议早期历史文献标准化 SOCKS5 协议,引入双向方法协商、UDP 转发(UDP ASSOCIATE)以及用户名/密码认证机制。
IETF RFC 1928 官方标准clowwindy 在 Shadowsocks 中采用“本地提供标准 SOCKS5 服务,公网采用对称加密隧道”的模块化架构,成为全行业规范。
Shadowsocks 官方历史记录客户端在本地开放 SOCKS5 端口并通过 PAC 规则或 TUN 虚拟网卡实现按域名/IP 的国内外精准分流。
Surge 官方手册与代理分流规范单端口自动嗅探首字节:HTTP 请求按 HTTP 代理处理,二进制握手包按 SOCKS5 处理,大幅简化用户配置。
Mihomo 官方文档:混合端口作为互联网基础协议,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 访问控制与审计日志。 |
本地客户端入站中转: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 欺骗与流量劫持。
词条事实与技术定义均以 IETF RFC 官方文献与工业实现标准为准: