菜单

网络

相关源文件

本文档提供了 Shadowsocks Windows 客户端中网络架构的技术概述。它涵盖了核心网络组件、连接流程和代理机制,这些机制使得流量能够通过 Shadowsocks 服务器进行隧道传输。有关代理自动配置的信息,请参阅PAC 系统,有关服务器管理的信息,请参阅服务器管理

核心网络架构

Shadowsocks Windows 客户端充当本地代理服务器,接受来自客户端应用程序的连接,并通过远程 Shadowsocks 服务器进行隧道传输。其核心网络系统围绕几个关键组件构建,这些组件协同工作以处理不同类型的连接和协议。

来源

监听器系统

Listener 类是 Shadowsocks 中所有网络连接的入口点。它绑定到一个本地端口并接受来自客户端应用程序的传入连接,然后根据协议将它们分派到相应的服务。

Listener 类实现了 TCP 和 UDP 连接的套接字管理

  1. 它根据配置的设置(IPv4/IPv6、本地/局域网)创建套接字
  2. 对于 TCP,它监听配置的端口并异步接受连接
  3. 对于 UDP,它设置一个接收端点来处理传入的数据报
  4. 当连接或数据报到达时,它将它们传递给注册的服务进行处理

来源

代理服务

Shadowsocks 实现了三个主要服务,用于处理不同类型的连接

TCPRelay

TCPRelay 处理通过 TCP 的 SOCKS5 协议连接。它是网页浏览和大多数应用程序流量的主要服务。

TCPHandler 管理单个 TCP 连接并实现以下关键功能

  1. SOCKS5 协议处理和握手
  2. 从客户端读取目标地址
  3. 建立与 Shadowsocks 服务器的连接
  4. 设置双向数据管道进行加密通信
  5. 处理连接超时和清理

来源

UDPRelay

UDPRelay 处理通过 SOCKS5 协议的 UDP 流量,主要用于 DNS 查询和某些实时应用程序。

UDPRelay 的主要特点

  1. 维护不同端点的 UDP 处理程序缓存
  2. 处理 UDP 数据包的加密和解密
  3. 在客户端和 Shadowsocks 服务器之间转发数据包
  4. 使用 LRU(最近最少使用)缓存来管理 UDP 会话

来源

PortForwarder

PortForwarder 创建到指定本地端口的直接 TCP 隧道,用于需要与本地主机特定端口通信的应用程序。

PortForwarder 的主要方面

  1. 接受 TCP 连接并将其转发到指定的本地端口
  2. 在客户端和目标端口之间创建双向数据管道
  3. 管理连接生命周期和清理

来源

代理实现

Shadowsocks 使用代理抽象层来处理不同的连接方法。所有代理实现都实现了 IProxy 接口。

IProxy 接口

IProxy 接口定义了所有代理实现的契约,包含以下方法

  1. 连接到代理服务器 (BeginConnectProxy/EndConnectProxy)
  2. 通过代理连接到目标 (BeginConnectDest/EndConnectDest)
  3. 发送和接收数据
  4. 关闭连接

来源

直接连接

DirectConnect 类是 IProxy 的最简单实现,提供到目标的直接连接,无需中间代理服务器。它跳过了代理连接阶段,直接连接到目标。

来源

SOCKS5 代理

Socks5Proxy 类实现了 SOCKS5 协议,用于通过外部 SOCKS5 代理服务器连接。它处理

  1. SOCKS5 协议握手
  2. 认证(如果已配置)
  3. 地址解析和到目标的连接
  4. 在客户端和目标之间转发数据

来源

连接管理和数据流

Shadowsocks Windows 客户端采用复杂的连接管理系统来处理连接生命周期和数据流。

连接生命周期

Shadowsocks 中的连接生命周期遵循以下阶段

  1. 初始化:当客户端连接时,Listener 接受连接并将其传递给相应的服务。

  2. 握手:对于 TCP 连接,TCPHandler 与客户端执行 SOCKS5 握手。

  3. 地址读取:处理程序从客户端请求中读取目标地址。

  4. 服务器选择:系统根据配置的策略选择合适的 Shadowsocks 服务器。

  5. 连接建立:处理程序建立与 Shadowsocks 服务器的连接,可以直接连接或通过配置的前置代理。

  6. 数据传输:建立双向数据管道以进行加密通信

    • 客户端到服务器:数据在发送到 Shadowsocks 服务器之前进行加密
    • 服务器到客户端:来自服务器的加密数据在转发到客户端之前进行解密
  7. 清理:当连接关闭(由客户端、服务器或由于错误)时,资源被释放,连接从跟踪集合中移除。

来源

超时管理

Shadowsocks 客户端实现了超时管理来处理停滞的连接

  1. 连接超时:连接代理或 Shadowsocks 服务器时,计时器监控连接过程,如果时间过长则中止。

  2. 非活动超时:已建立的连接会受到活动监控,非活动连接会定期清理。

  3. 超时通知:当服务器连接超时时,会向控制器报告,以便更新服务器统计信息。

来源

错误处理和恢复

网络组件包含全面的错误处理机制

  1. 套接字异常:捕获并适当处理套接字相关异常,并清理连接。

  2. 加密错误:检测加密或解密期间的错误,并导致连接关闭。

  3. 连接失败:将服务器连接失败报告给控制器,以便更新服务器统计信息并可能切换到备用服务器。

  4. 资源管理:系统确保即使发生错误也能正确清理资源,防止资源泄漏。

来源

总结

Shadowsocks Windows 的网络子系统是一个强大、事件驱动的架构,处理多种协议和连接方法。主要方面包括

组件职责
监听器接受传入连接并分派给服务
TCPRelay处理通过 TCP 的 SOCKS5 连接
UDPRelay通过 SOCKS5 处理 UDP 流量
PortForwarder创建到本地端口的直接隧道
IProxy 实现提供不同的连接方法

这种架构使 Shadowsocks Windows 客户端能够高效地通过 Shadowsocks 服务器代理流量,支持各种连接方法,并为安全通信提供灵活、可扩展的基础。