本文档提供了 Shadowsocks Windows 客户端中网络架构的技术概述。它涵盖了核心网络组件、连接流程和代理机制,这些机制使得流量能够通过 Shadowsocks 服务器进行隧道传输。有关代理自动配置的信息,请参阅PAC 系统,有关服务器管理的信息,请参阅服务器管理。
Shadowsocks Windows 客户端充当本地代理服务器,接受来自客户端应用程序的连接,并通过远程 Shadowsocks 服务器进行隧道传输。其核心网络系统围绕几个关键组件构建,这些组件协同工作以处理不同类型的连接和协议。
来源
Listener 类是 Shadowsocks 中所有网络连接的入口点。它绑定到一个本地端口并接受来自客户端应用程序的传入连接,然后根据协议将它们分派到相应的服务。
Listener 类实现了 TCP 和 UDP 连接的套接字管理
来源
Shadowsocks 实现了三个主要服务,用于处理不同类型的连接
TCPRelay 处理通过 TCP 的 SOCKS5 协议连接。它是网页浏览和大多数应用程序流量的主要服务。
TCPHandler 管理单个 TCP 连接并实现以下关键功能
来源
UDPRelay 处理通过 SOCKS5 协议的 UDP 流量,主要用于 DNS 查询和某些实时应用程序。
UDPRelay 的主要特点
来源
PortForwarder 创建到指定本地端口的直接 TCP 隧道,用于需要与本地主机特定端口通信的应用程序。
PortForwarder 的主要方面
来源
Shadowsocks 使用代理抽象层来处理不同的连接方法。所有代理实现都实现了 IProxy 接口。
IProxy 接口定义了所有代理实现的契约,包含以下方法
BeginConnectProxy/EndConnectProxy)BeginConnectDest/EndConnectDest)来源
DirectConnect 类是 IProxy 的最简单实现,提供到目标的直接连接,无需中间代理服务器。它跳过了代理连接阶段,直接连接到目标。
来源
Socks5Proxy 类实现了 SOCKS5 协议,用于通过外部 SOCKS5 代理服务器连接。它处理
来源
Shadowsocks Windows 客户端采用复杂的连接管理系统来处理连接生命周期和数据流。
Shadowsocks 中的连接生命周期遵循以下阶段
初始化:当客户端连接时,Listener 接受连接并将其传递给相应的服务。
握手:对于 TCP 连接,TCPHandler 与客户端执行 SOCKS5 握手。
地址读取:处理程序从客户端请求中读取目标地址。
服务器选择:系统根据配置的策略选择合适的 Shadowsocks 服务器。
连接建立:处理程序建立与 Shadowsocks 服务器的连接,可以直接连接或通过配置的前置代理。
数据传输:建立双向数据管道以进行加密通信
清理:当连接关闭(由客户端、服务器或由于错误)时,资源被释放,连接从跟踪集合中移除。
来源
Shadowsocks 客户端实现了超时管理来处理停滞的连接
连接超时:连接代理或 Shadowsocks 服务器时,计时器监控连接过程,如果时间过长则中止。
非活动超时:已建立的连接会受到活动监控,非活动连接会定期清理。
超时通知:当服务器连接超时时,会向控制器报告,以便更新服务器统计信息。
来源
网络组件包含全面的错误处理机制
套接字异常:捕获并适当处理套接字相关异常,并清理连接。
加密错误:检测加密或解密期间的错误,并导致连接关闭。
连接失败:将服务器连接失败报告给控制器,以便更新服务器统计信息并可能切换到备用服务器。
资源管理:系统确保即使发生错误也能正确清理资源,防止资源泄漏。
来源
Shadowsocks Windows 的网络子系统是一个强大、事件驱动的架构,处理多种协议和连接方法。主要方面包括
| 组件 | 职责 |
|---|---|
| 监听器 | 接受传入连接并分派给服务 |
| TCPRelay | 处理通过 TCP 的 SOCKS5 连接 |
| UDPRelay | 通过 SOCKS5 处理 UDP 流量 |
| PortForwarder | 创建到本地端口的直接隧道 |
| IProxy 实现 | 提供不同的连接方法 |
这种架构使 Shadowsocks Windows 客户端能够高效地通过 Shadowsocks 服务器代理流量,支持各种连接方法,并为安全通信提供灵活、可扩展的基础。