代理技术全栈手册

从一根 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一个请求穿过代理的一生:连接生命周期全景✅

第二篇 · 协议详解

章标题状态
04HTTP 代理协议:绝对 URI、CONNECT 隧道、转发头与连接池✅
05HTTPS 与 TLS 代理:终止 / 透传 / MITM / SNI / mTLS✅
06SOCKS 协议:SOCKS4/4a/5 与 UDP ASSOCIATE 报文级解析✅
07HTTP/2、gRPC 与 HTTP/3(QUIC) 代理的挑战✅
08代理自动配置:PAC / WPAD / 系统代理 / NO_PROXY✅

第三篇 · 网络层级与转发原理

章标题状态
09L4 代理:TCP/UDP 转发与连接级负载均衡✅
10L7 代理:协议感知与基于内容的路由✅
11透明代理:iptables REDIRECT/DNAT、TPROXY 与 eBPF 劫持✅
12数据搬运的艺术:splice / sendfile / 零拷贝 / io_uring✅

第四篇 · 主流组件横评(每个都给最小可跑配置)

章标题状态
13Nginx / OpenResty:反向代理、upstream 与 Lua 可编程✅
14HAProxy:L4/L7、ACL、健康检查与 stick table✅
15Envoy:xDS 动态配置与 filter chain,为何是云原生数据面✅
16Traefik / Caddy:自动服务发现与自动 HTTPS✅
17Squid 与正向/缓存代理:企业出网、缓存与审计✅
18mitmproxy:抓包、改包、脚本化调试✅
19内网穿透与隧道:frp / gost / SSH 隧道 / ngrok✅
20科学上网生态的技术原理:SS / V2Ray / Clash / sing-box(技术中立)✅

第五篇 · 各语言手写代理(从零实现,理解灵活性)

章标题状态
21Go:100 行手写 HTTP/CONNECT + SOCKS5 代理✅
22Rust:基于 tokio 的高性能 TCP 代理✅
23Python:asyncio 实现,适合调试与脚本✅
24C:epoll 裸写与零拷贝,及语言选型对比✅

第六篇 · 容器与 Kubernetes 中的代理

章标题状态
25Docker 里的代理:HTTP_PROXY、build/pull 走代理、daemon 配置✅
26Sidecar 与流量劫持:Istio init-container 的 iptables 原理✅
27Ingress 与南北流量:Ingress-nginx / Gateway API✅
28Egress 与出网治理:出口网关、registry mirror、审计✅
29Service Mesh 数据面:Envoy Sidecar 全链路✅

第七篇 · 灵活性、性能、排错与安全

章标题状态
30可编程代理:Lua / Wasm / eBPF / xDS,代理的"软件定义"✅
31性能调优:并发模型、连接池、超时与重试、压测✅
32排错决策树:502 / 504 / 握手失败 / 环路 / 连接泄漏✅
33代理安全:开放代理、SSRF、凭证泄漏与攻击面✅

第八篇 · 底层机制(深挖)

把"代理在压力下怎么活下来"讲透——这一篇是面向"真懂底层原理"的进阶读者。

章标题状态
34代理的背压与流控:一个代理最难的部分✅
35socket 与 TCP 状态机:半关闭、超时、连接生命周期✅
36HTTP/2 帧、流控与 HPACK:h2 代理的内部机制✅
37负载均衡算法推导与韧性状态机✅
38Capstone:把玩具代理改造成生产级骨架✅

第九篇 · 综合实战(企业多跳转发)

把全书拉进一个真实企业拓扑:边缘 nginx → K8s Ingress → 容器,把 web-vscode / SSH / WebSocket / SSE / 原始 TCP / 长连接全部代理通。

章标题状态
39企业多跳转发链:拓扑、协议矩阵与贯穿性难题✅
40端到端实战:把 6 类流量全代理通✅
41更刁钻的流量:gRPC / 长轮询 / WebRTC / 大文件 / 双向流✅
42可落地完整参考实现:一套能跑的多协议转发栈✅

附录

编号标题状态
A代理协议报文速查(HTTP / SOCKS / PAC)✅
B组件选型决策树✅
C抓包与命令速查✅

与本站其它手册的关系

代理处在网络与应用架构的交叉口,本手册只讲"代理"这条主线,与代理相关的底层和上层,交给对应的专册,避免重复:

一句话分工: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 章:代理是什么——正向/反向/透明/隧道的统一模型