源码导读入口
简介
本文是 Xray-core 和 REALITY 源码分析的入口,包含完整的项目覆盖清单、入口递归追踪表和模块学习卡片。
本文在项目中的位置
本文是源码分析层的根文档。读完本文后应能了解代码整体组织,并知道每个模块应该读哪篇文档。
适合读者
准备阅读或修改源码的开发者。
前置知识
Go 语言开发基础,了解 Xray-core 的核心概念。
文章理解难度
中等(信息量大,但以索引为主)。
上级文档和相关文档
源码阅读顺序
推荐按以下顺序阅读源码:
- 入口和初始化:
main/main.go→main/commands/base/→core/xray.go - 配置解析:
infra/conf/→main/confloader/ - 功能注册:
features/→app/proxyman/ - 分发和路由:
app/dispatcher/→app/router/ - 代理协议:
proxy/vless/→proxy/vmess/→ ... - 传输层:
transport/internet/ - REALITY:
transport/internet/reality/→REALITY/
项目覆盖清单
xray-core
| 路径 | 类型 | 作用 | 覆盖文档 | 覆盖深度 |
|---|---|---|---|---|
main/main.go | 入口 | 应用主入口 | 01-entrypoints.md | 深入源码分析 |
main/commands/ | 命令 | CLI 子命令 | 01-entrypoints.md | 流程级说明 |
main/confloader/ | 配置加载 | 多格式配置加载器 | 01-entrypoints.md | 流程级说明 |
main/distro/ | 功能注册 | import 方式注册所有功能模块 | 02-features.md | 流程级说明 |
main/json/ | 格式 | JSON 配置格式支持 | 01-entrypoints.md | 结构级说明 |
main/toml/ | 格式 | TOML 配置格式支持 | 01-entrypoints.md | 结构级说明 |
main/yaml/ | 格式 | YAML 配置格式支持 | 01-entrypoints.md | 结构级说明 |
core/xray.go | 核心框架 | Instance 和功能注册 | 01-entrypoints.md | 深入源码分析 |
features/ | 接口 | 功能模块接口定义 | 02-features.md | 结构级说明 |
app/dispatcher/ | 分发器 | 请求路由和分发 | 03-dispatcher.md | 深入源码分析 |
app/proxyman/ | 代理管理 | 入站/出站管理器 | 04-proxyman.md | 深入源码分析 |
app/router/ | 路由 | 路由规则决策 | 05-router.md | 深入源码分析 |
app/dns/ | DNS | DNS 解析和分流 | 06-dns.md | 深入源码分析 |
app/policy/ | 策略 | 连接策略管理 | 02-features.md | 结构级说明 |
app/stats/ | 统计 | 流量统计 | 02-features.md | 结构级说明 |
app/log/ | 日志 | 日志管理 | 02-features.md | 结构级说明 |
app/reverse/ | 反向代理 | 反向代理桥接 | 02-features.md | 结构级说明 |
app/commander/ | 命令 | API 命令处理 | 02-features.md | 结构级说明 |
app/observatory/ | 观测 | 连接观测 | 02-features.md | 结构级说明 |
app/geodata/ | 地理数据 | geoip/geosite 数据加载 | 06-dns.md | 流程级说明 |
app/version/ | 版本 | 版本信息 | 01-entrypoints.md | 索引级说明 |
app/metrics/ | 指标 | 性能指标收集 | 待补充 | 索引级说明 |
proxy/vless/ | 代理协议 | VLESS 协议实现 | ../protocols/vless.md | 深入源码分析 |
proxy/vmess/ | 代理协议 | VMess 协议实现 | ../protocols/vmess.md | 深入源码分析 |
proxy/trojan/ | 代理协议 | Trojan 协议实现 | ../protocols/trojan.md | 流程级说明 |
proxy/shadowsocks/ | 代理协议 | Shadowsocks 协议 | ../protocols/shadowsocks.md | 流程级说明 |
proxy/shadowsocks_2022/ | 代理协议 | Shadowsocks 2022 协议 | ../protocols/shadowsocks.md | 流程级说明 |
proxy/http/ | 代理协议 | HTTP 代理 | ../background/proxy-protocols.md | 流程级说明 |
proxy/socks/ | 代理协议 | SOCKS5 代理 | ../background/proxy-protocols.md | 流程级说明 |
proxy/dokodemo/ | 代理协议 | 端口转发 | 待补充 | 索引级说明 |
proxy/freedom/ | 出站 | 直连出站 | 04-proxyman.md | 流程级说明 |
proxy/blackhole/ | 出站 | 黑洞出站(丢弃流量) | 04-proxyman.md | 流程级说明 |
proxy/dns/ | 出站 | DNS 出站 | 06-dns.md | 流程级说明 |
proxy/loopback/ | 代理 | 回环代理 | 待补充 | 索引级说明 |
proxy/tun/ | VPN | TUN 设备入站 | 11-common.md | 流程级说明 |
proxy/wireguard/ | VPN | WireGuard 协议 | ../background/proxy-protocols.md | 流程级说明 |
proxy/hysteria/ | 代理协议 | Hysteria 协议 | 待补充 | 索引级说明 |
transport/internet/ | 传输框架 | 传输层基类 | 07-transport.md | 深入源码分析 |
transport/internet/tcp/ | 传输 | TCP 传输 | 07-transport.md | 流程级说明 |
transport/internet/udp/ | 传输 | UDP 传输 | 07-transport.md | 流程级说明 |
transport/internet/websocket/ | 传输 | WebSocket 传输 | 07-transport.md | 流程级说明 |
transport/internet/grpc/ | 传输 | gRPC 传输 | 07-transport.md | 流程级说明 |
transport/internet/httpupgrade/ | 传输 | HTTP Upgrade 传输 | 07-transport.md | 流程级说明 |
transport/internet/splithttp/ | 传输 | SplitHTTP 传输 | 07-transport.md | 流程级说明 |
transport/internet/kcp/ | 传输 | KCP 传输 | 07-transport.md | 流程级说明 |
transport/internet/reality/ | 安全传输 | REALITY 客户端/服务端 | 08-reality-client.md | 深入源码分析 |
transport/internet/tls/ | 安全传输 | TLS 传输安全 | 10-tls.md | 深入源码分析 |
transport/internet/finalmask/ | 伪装 | 流量伪装头 | 待补充 | 索引级说明 |
transport/internet/hysteria/ | 拥塞 | Hysteria 拥塞控制 | 待补充 | 索引级说明 |
transport/internet/headers/ | HTTP头 | HTTP 请求头伪装 | 待补充 | 索引级说明 |
transport/internet/browser_dialer/ | 拨号 | 浏览器拨号(用于爬虫) | 08-reality-client.md | 流程级说明 |
transport/pipe/ | 连接 | 内存管道传输 | 合理跳过 | 测试用内部传输 |
common/ | 公共库 | 工具函数和数据原语 | 11-common.md | 结构级说明 |
infra/conf/ | 配置 | JSON 配置解析和验证 | 01-entrypoints.md | 流程级说明 |
infra/vformat/ | 格式化 | 变量格式化 | 合理跳过 | 工具代码 |
infra/vprotogen/ | 代码生成 | Protobuf 代码生成 | 合理跳过 | 构建工具 |
testing/ | 测试 | 测试框架和场景 | 待补充 | 结构级说明 |
REALITY(TLS fork)
| 路径 | 类型 | 作用 | 覆盖文档 | 覆盖深度 |
|---|---|---|---|---|
REALITY/common.go | TLS 核心 | TLS 常量、Config、证书选择 | ../protocols/reality.md | 深入源码分析 |
REALITY/conn.go | TLS 连接 | TLS 连接读写实现 | ../protocols/reality.md | 流程级说明 |
REALITY/handshake_client.go | 客户端握手 | TLS 客户端握手 | ../protocols/reality.md | 深入源码分析 |
REALITY/handshake_client_tls13.go | 客户端握手 | TLS 1.3 客户端握手 | ../protocols/reality.md | 深入源码分析 |
REALITY/handshake_server.go | 服务端握手 | TLS 服务端握手(REALITY 修改) | ../protocols/reality.md | 深入源码分析 |
REALITY/handshake_server_tls13.go | 服务端握手 | TLS 1.3 服务端握手 | ../protocols/reality.md | 深入源码分析 |
REALITY/handshake_messages.go | 握手消息 | 握手消息序列化/反序列化 | ../protocols/reality.md | 流程级说明 |
REALITY/auth.go | 签名验证 | 握手签名验证 | ../protocols/reality.md | 流程级说明 |
REALITY/generate_cert.go | 证书 | 临时证书生成 | ../protocols/reality.md | 流程级说明 |
REALITY/ech.go | ECH 支持 | Encrypted Client Hello | ../background/ech.md | 流程级说明 |
REALITY/quic.go | QUIC | QUIC 传输参数处理 | ../background/quic.md | 流程级说明 |
REALITY/key_agreement.go | 密钥交换 | ECDHE, ML-KEM | ../protocols/reality.md | 流程级说明 |
REALITY/key_schedule.go | 密钥调度 | TLS 1.3 密钥派生 | ../protocols/reality.md | 结构级说明 |
REALITY/cipher_suites.go | 密码套件 | 密码套件定义 | ../protocols/reality.md | 结构级说明 |
REALITY/ticket.go | 会话票据 | 会话票据管理 | 合理跳过 | 标准 TLS 功能 |
REALITY/alert.go | Alert | TLS Alert 处理 | 合理跳过 | 标准 TLS 功能 |
REALITY/cache.go | 缓存 | 会话缓存 | 合理跳过 | 标准 TLS 功能 |
REALITY/tls.go | API | Server/Client/Dial 等高层 API | ../protocols/reality.md | 流程级说明 |
REALITY/record_detect.go | 记录检测 | TLS 记录层检测 | 待补充 | 结构级说明 |
REALITY/prf.go | PRF | 伪随机函数 | 合理跳过 | Go 标准库代码 |
REALITY/defaults.go | 默认值 | 密码套件等默认值 | 合理跳过 | 标准 TLS 配置 |
REALITY/hpke/ | HPKE | Hybrid Public Key Encryption | ../background/ech.md | 结构级说明 |
REALITY/tls12/ | TLS 1.2 | TLS 1.2 特定逻辑 | 合理跳过 | 非 REALITY 核心 |
REALITY/tls13/ | TLS 1.3 | TLS 1.3 特定逻辑 | ../protocols/reality.md | 结构级说明 |
REALITY/fips140tls/ | FIPS | FIPS 140-3 合规 | 合理跳过 | 合规性代码 |
入口递归追踪表
| 入口 | 入口类型 | 第一跳 | 继续追踪 | 对应文档 |
|---|---|---|---|---|
main/main.go:main() | 应用入口 | 命令行解析 → cmdRun | core.New() → initInstanceWithConfig() → 各功能模块 | 01-entrypoints.md |
core.New(config) | API 入口 | 配置解析 → 功能创建 | app/*, proxy/*, transport/* | 01-entrypoints.md |
transport/internet/reality.UClient() | 客户端连接 | uTLS 握手 | REALITY 认证验证 | 08-reality-client.md |
transport/internet/reality.Server() | 服务端连接 | REALITY TLS 握手 | 认证 → VLESS Inbound | 09-reality-server.md |
proxy/vless/inbound/inbound.go | VLESS 入站 | 用户验证 → 请求解析 | Dispatcher → Outbound | ../protocols/vless.md |
核心对象识别证据
| 对象 | README/文档证据 | 配置/API 证据 | 源码目录证据 | 为什么是核心对象 |
|---|---|---|---|---|
| VLESS | README 多处推荐 | 入站/出站协议 | proxy/vless/ | 项目主要代理协议,与 REALITY/XTLS 紧密集成 |
| REALITY | 在 README 中重点介绍 | security: "reality" | transport/internet/reality/ + REALITY/ | 核心安全传输创新,消除 TLS 指纹 |
| XTLS Vision | README 配置中必含 flow | flow: "xtls-rprx-vision" | proxy/vless/encoding/ | 消除 TLS-in-TLS 特征的关键技术 |
| VMess | 兼容旧协议 | 入站/出站协议 | proxy/vmess/ | 重要的兼容协议,V2Ray 遗产 |
| Trojan | 轻量 TLS 伪装协议 | 入站/出站协议 | proxy/trojan/ | 广泛使用的 TLS 伪装协议 |
| Shadowsocks | 经典反审查协议 | 入站/出站协议 | proxy/shadowsocks/ | 长期存在的反审查协议 |
| Transport | README 中 streamSettings | network, security | transport/internet/ | 传输层决定了链路的伪装方式 |
核心对象覆盖清单
| 对象 | 类型 | 为什么重要 | 覆盖文档 | 覆盖深度 |
|---|---|---|---|---|
| REALITY | 安全传输协议 | 核心安全创新,项目旗舰特性 | ../protocols/reality.md | 深入源码分析 |
| VLESS | 代理协议 | 默认推荐的代理协议 | ../protocols/vless.md | 深入源码分析 |
| XTLS Vision | 流控机制 | 消除 TLS-in-TLS 特征 | ../protocols/xtls.md | 流程级说明 |
| VMess | 代理协议 | 重要的兼容协议 | ../protocols/vmess.md | 流程级说明 |
| Trojan | 代理协议 | TLS 伪装代理协议 | ../protocols/trojan.md | 流程级说明 |
| Shadowsocks | 代理协议 | 经典反审查协议 | ../protocols/shadowsocks.md | 流程级说明 |
领域机制覆盖清单
| 机制 | 类型 | 用户可见入口 | 影响链路 | 相关对象 | 覆盖文档 | 覆盖深度 |
|---|---|---|---|---|---|---|
| REALITY TLS 握手 | 安全/加密 | security: "reality" | 客户端→服务端 TLS 层 | REALITY | ../protocols/reality.md | 深入源码分析 |
| XTLS 分流 | 流控 | flow: "xtls-rprx-vision" | 入站→出站数据传输 | VLESS, XTLS | ../protocols/xtls.md | 流程级说明 |
| Fallback 回落 | 安全 | fallbacks 配置 | 入站→回退目标 | VLESS, REALITY | ../mechanisms/fallback.md | 待补充 |
| 路由决策 | 分发 | routing 配置 | 入站→出站 | Router | ../source/05-router.md | 待补充 |
| DNS 分流 | DNS | dns 配置 | DNS 查询 | DNS Client | ../source/06-dns.md | 待补充 |
| TLS 指纹模拟 | 传输 | fingerprint 配置 | 客户端→服务端 | uTLS, REALITY | ../background/tls-fingerprinting.md | 流程级说明 |
| 流量嗅探 | 检测 | sniffing 配置 | 入站→路由 | Sniffing | 待补充 | 待补充 |
| 爬虫模式 | 伪装 | spiderX/Y | MITM 响应 | REALITY Client | ../background/mitm-attacks.md | 流程级说明 |
未覆盖与待补充清单
| 项 | 类型 | 影响 | 当前状态 | 需要补充 |
|---|---|---|---|---|
| VMess 协议详细分析 | 协议文档 | 协议理解不完整 | 需要编写 | docs/protocols/vmess.md |
| Trojan 协议详细分析 | 协议文档 | 协议理解不完整 | 需要编写 | docs/protocols/trojan.md |
| Shadowsocks 协议详细分析 | 协议文档 | 协议理解不完整 | 需要编写 | docs/protocols/shadowsocks.md |
| XTLS 流控机制详细分析 | 机制文档 | 机制理解不完整 | 需要编写 | docs/protocols/xtls.md |
| 路由模块源码分析 | 源码分析 | 路由逻辑理解不完整 | 需要编写 | docs/source/05-router.md |
| DNS 模块源码分析 | 源码分析 | DNS 理解不完整 | 需要编写 | docs/source/06-dns.md |
| 传输层源码详细分析 | 源码分析 | 传输层理解不完整 | 需要编写 | docs/source/07-transport.md |
| Hysteria 协议 | 协议文档 | 新协议未覆盖 | 需要编写 | docs/protocols/hysteria.md |
| 配置完整参考 | 参考文档 | 配置查询不方便 | 需要编写 | docs/reference/config.md |
| 部署指南 | 运维文档 | 缺少运维指导 | 需要编写 | docs/runbooks/deployment.md |
| 问题排查手册 | 运维文档 | 缺少排障指导 | 需要编写 | docs/runbooks/troubleshooting.md |
| Geedge Networks TSG 网关 | 背景知识 | 用户要求覆盖 | 已完成 | docs/background/geedge-tsg.md |
| 密码学基础 | 背景知识 | 前置知识不完整 | 需要编写 | 在 background/ 中补充密码学文档 |
模块学习卡片
模块:proxy/vless/encoding/
| 问题 | 说明 |
|---|---|
| 解决什么问题 | VLESS 的 XTLS 流控编解码,实现 TLS 流量识别和分流 |
| 在项目中的位置 | VLESS 协议的核心流控层 |
| 被谁调用 | VLESS Inbound/Outbound Handler |
| 依赖谁 | common/buf, common/net |
| 核心文件 | encoding.go |
| 关键函数 | NewVisionReader, NewVisionWriter |
| 覆盖深度 | 流程级说明 |
模块:proxy/vmess/encoding/
| 问题 | 说明 |
|---|---|
| 解决什么问题 | VMess 消息的编解码、AEAD 加密和认证 |
| 在项目中的位置 | VMess 协议的编解码层 |
| 被谁调用 | VMess Inbound/Outbound Handler |
| 依赖谁 | proxy/vmess/aead/ |
| 核心文件 | client.go, server.go, encoding.go |
| 覆盖深度 | 流程级说明 |
模块:transport/internet/reality/
| 问题 | 说明 |
|---|---|
| 解决什么问题 | REALITY 客户端和服务端的 TLS 握手实现 |
| 在项目中的位置 | 传输安全层,连接 REALITY TLS fork 和上层代理协议 |
| 被谁调用 | 入站/出站连接建立时 |
| 依赖谁 | github.com/xtls/reality, github.com/refraction-networking/utls |
| 核心文件 | reality.go |
| 覆盖深度 | 深入源码分析 |
外部参考资料
资料:Xray-core 源码仓库 类型:源码 链接:https://github.com/XTLS/Xray-core 可信度:A
资料:REALITY 源码仓库 类型:源码 链接:https://github.com/XTLS/REALITY 可信度:A