代理技术全栈手册
从一根 TCP 连接讲到 Service Mesh 数据面——把"代理"这件事,从底层原理、协议细节、网络层级、多语言实现,一路讲到 Docker/K8s 里的真实落地。
这本手册解决什么
"代理"这个词被用得太泛了:浏览器里的 HTTP 代理、Nginx 反向代理、K8s 里的 kube-proxy、Istio 的 Sidecar、科学上网的 Clash——它们都叫"代理",但工作在不同的网络层级、说着不同的协议、解决着完全不同的问题。
大多数资料只讲其中一个切面,于是你会反复遇到这些困惑:
- 正向代理和反向代理到底差在哪?透明代理又是什么?
HTTP CONNECT和SOCKS5都能做隧道,区别在哪?什么时候该用谁?- 代理是工作在第几层?L4 和 L7 代理的本质差异是什么?
- 为什么 Istio 能"零侵入"接管 Pod 的所有流量?iptables 在背后做了什么?
- 同样是代理,Nginx、HAProxy、Envoy、Squid、mitmproxy、Clash 凭什么共存?
- 我想自己写一个代理,Go / Rust / Python / C 各自适合写哪种?
这本手册的目标,是给你一套统一的代理心智模型:看到任何一个"代理",你都能立刻说清它在第几层、说什么协议、是哪种类型、灵活性来自哪里、在容器/K8s 里怎么落地。
你将获得
- 统一模型:用一张图把正向/反向/透明/隧道四类代理收进同一个框架
- 协议级理解:HTTP CONNECT、SOCKS4/5、TLS 终止/透传/MITM、PAC/WPAD 的报文级细节
- 层级穿透:L3/L4/L5/L7 各层代理的截流点,透明代理的 iptables/TPROXY/eBPF 三种劫持法
- 组件横评:Nginx / HAProxy / Envoy / Traefik / Squid / mitmproxy / frp / Clash 的选型与最小可跑配置
- 多语言手写:用 Go / Rust / Python / C 从零实现 HTTP 与 SOCKS5 代理,理解"灵活性"从何而来
- 容器落地:Docker 的
HTTP_PROXY、Istio 的流量劫持、Ingress 南北向、Egress 出网治理、Service Mesh 数据面
适合人群
- 后端/平台工程师:想把散落各处的"代理"知识收敛成一套体系
- 云原生工程师:要搞懂 Sidecar、Ingress、Mesh 数据面背后的代理原理
- 运维/SRE:排查 502/504、握手失败、出网不通时需要协议级判断力
- 想自己造轮子的人:理解一个生产级代理需要处理哪些细节
学习路线图
✅ 全书 42 章 + 3 附录已全部完成,点击标题即可阅读。(第八篇"底层机制"深挖原理,第九篇"综合实战"打通企业多跳转发与各类刁钻协议)
第一篇 · 原理与心智模型
| 章 | 标题 | 状态 |
|---|---|---|
| 01 | 代理是什么:正向/反向/透明/隧道的统一模型 | ✅ |
| 02 | 代理与网络层级:L3/L4/L5/L7 在哪里截断流量 | ✅ |
| 03 | 一个请求穿过代理的一生:连接生命周期全景 | ✅ |
第二篇 · 协议详解
第三篇 · 网络层级与转发原理
| 章 | 标题 | 状态 |
|---|---|---|
| 09 | L4 代理:TCP/UDP 转发与连接级负载均衡 | ✅ |
| 10 | L7 代理:协议感知与基于内容的路由 | ✅ |
| 11 | 透明代理:iptables REDIRECT/DNAT、TPROXY 与 eBPF 劫持 | ✅ |
| 12 | 数据搬运的艺术:splice / sendfile / 零拷贝 / io_uring | ✅ |
第四篇 · 主流组件横评(每个都给最小可跑配置)
第五篇 · 各语言手写代理(从零实现,理解灵活性)
| 章 | 标题 | 状态 |
|---|---|---|
| 21 | Go:100 行手写 HTTP/CONNECT + SOCKS5 代理 | ✅ |
| 22 | Rust:基于 tokio 的高性能 TCP 代理 | ✅ |
| 23 | Python:asyncio 实现,适合调试与脚本 | ✅ |
| 24 | C:epoll 裸写与零拷贝,及语言选型对比 | ✅ |
第六篇 · 容器与 Kubernetes 中的代理
第七篇 · 灵活性、性能、排错与安全
| 章 | 标题 | 状态 |
|---|---|---|
| 30 | 可编程代理:Lua / Wasm / eBPF / xDS,代理的"软件定义" | ✅ |
| 31 | 性能调优:并发模型、连接池、超时与重试、压测 | ✅ |
| 32 | 排错决策树:502 / 504 / 握手失败 / 环路 / 连接泄漏 | ✅ |
| 33 | 代理安全:开放代理、SSRF、凭证泄漏与攻击面 | ✅ |
第八篇 · 底层机制(深挖)
把"代理在压力下怎么活下来"讲透——这一篇是面向"真懂底层原理"的进阶读者。
| 章 | 标题 | 状态 |
|---|---|---|
| 34 | 代理的背压与流控:一个代理最难的部分 | ✅ |
| 35 | socket 与 TCP 状态机:半关闭、超时、连接生命周期 | ✅ |
| 36 | HTTP/2 帧、流控与 HPACK:h2 代理的内部机制 | ✅ |
| 37 | 负载均衡算法推导与韧性状态机 | ✅ |
| 38 | Capstone:把玩具代理改造成生产级骨架 | ✅ |
第九篇 · 综合实战(企业多跳转发)
把全书拉进一个真实企业拓扑:边缘 nginx → K8s Ingress → 容器,把 web-vscode / SSH / WebSocket / SSE / 原始 TCP / 长连接全部代理通。
| 章 | 标题 | 状态 |
|---|---|---|
| 39 | 企业多跳转发链:拓扑、协议矩阵与贯穿性难题 | ✅ |
| 40 | 端到端实战:把 6 类流量全代理通 | ✅ |
| 41 | 更刁钻的流量:gRPC / 长轮询 / WebRTC / 大文件 / 双向流 | ✅ |
| 42 | 可落地完整参考实现:一套能跑的多协议转发栈 | ✅ |
附录
| 编号 | 标题 | 状态 |
|---|---|---|
| A | 代理协议报文速查(HTTP / SOCKS / PAC) | ✅ |
| B | 组件选型决策树 | ✅ |
| C | 抓包与命令速查 | ✅ |
与本站其它手册的关系
代理处在网络与应用架构的交叉口,本手册只讲"代理"这条主线,与代理相关的底层和上层,交给对应的专册,避免重复:
- 底层网络原理(TCP/TLS 握手、iptables/Netfilter、namespace、eBPF)→ 见 网络架构师学习手册,本手册引用不重写
- 网关产品与服务治理(Kong、Istio 流量治理、灰度发布、熔断限流)→ 见 API 网关与服务治理手册,本手册讲"反向代理的原理",那里讲"网关作为产品怎么用"
- K8s 网络与 Ingress 实操 → 见 K8s 实操课 与 网络手册的 Kubernetes 网络篇
一句话分工:network 讲"包怎么走",apiGateway 讲"网关怎么治理",本手册讲"代理本身是什么、怎么实现、怎么落地"。
章节结构
每章尽量遵循统一的"六件套",让你不只懂概念,还能上手:
- 原理:核心机制、协议细节、为什么这样设计
- ️ 实现:数据结构、内核路径、关键代码
- 命令:常用工具、参数详解、真实输出解读
- 代码:可运行示例、详细注释、环境要求
- 实验:动手步骤、预期结果、抓包验证
- 排错:常见故障、排查清单、解决方案
环境准备
# 推荐:Ubuntu 22.04+ / Debian 12+(或 macOS + 一台 Linux 实验机)
# 贯穿全书的工具
sudo apt update
sudo apt install -y curl socat netcat-openbsd tcpdump nginx \
iproute2 iptables dnsutils mitmproxy
# 抓包看协议(贯穿全书的核心手段)
sudo tcpdump -i any -n -A 'tcp port 8080'
# 多语言手写篇需要
# Go 1.21+ / Rust 1.75+ / Python 3.11+ / gcc
学习建议
- 按序读前三篇:原理与协议是地基,跳过会导致后面"知其然不知其所以然"
- 每章必抓包:代理的一切最终都体现在 socket 上的字节流,
tcpdump/mitmproxy是你最好的老师 - 手写一遍:第五篇的代码请务必亲手敲、亲手跑,理解会指数级加深
- 问题导向:线上排查时可直接跳到第七篇的排错决策树
开始你的代理之旅 → 第 01 章:代理是什么——正向/反向/透明/隧道的统一模型