本文由 Gemini 总结,ChatGPT 修正,如有错误望斧正
通俗版(为了通俗性牺牲了一些专业性,专业版在一楼):
一、 底层架构与工作原理分级
在理解区别之前,必须先将它们分为两个流派:内核态 NAT 与 用户态代理。
| 层级 | 工具代表 | 工作机制 | 关键特征 |
|---|---|---|---|
| 内核态 (Kernel Space) | iptables / nftables | Layer 3/4 NAT (Netfilter) | 流量不经过用户进程,直接在内核协议栈修改 IP/端口头。无 TCP 握手,无上下文切换。 |
| 用户态 (User Space) - 异步IO | Realm | Raw Forwarding (Splice/Zero-copy) | 极简设计。利用 splice 系统调用实现零拷贝,数据在内核缓冲区直接流转,极少进入用户内存。 |
| 用户态 (User Space) - 托管运行时 | 𝕏𝕣𝕒𝕪 / Gost | TCP/UDP Termination (Go Runtime) | 完整的双边连接(Full Proxy)。数据会读取到用户态内存 -> 业务逻辑处理(路由/封装) -> 再写入内核。 |
| 用户态 (User Space) - 进程级 | Socat | Forking Model | 每建立一个连接就派生一个新进程(或线程)。传统 UNIX 管道设计,开销大。 |
二、 核心指标对比矩阵
| 维度 | iptables / nftables | Realm | 𝕏𝕣𝕒𝕪 (任意门) | Gost | Socat |
|---|---|---|---|---|---|
| 吞吐量性能 | ⭐⭐⭐⭐⭐ (物理极限) | ⭐⭐⭐⭐⭐ (接近极限) | ⭐⭐⭐⭐ (优秀) | ⭐⭐⭐⭐ (优秀) | ⭐⭐ (一般) |
| 延迟表现 | 极低 (无缓冲) | 极低 (零拷贝) | 低 (有微小缓冲) | 低 (有微小缓冲) | 中 (上下文切换多) |
| 抗丢包能力 | ❌ (依赖两端 TCP) | ✅ (可吃 BBR) | ✅ (可吃 BBR) | ✅ (可吃 BBR) | ✅ (可吃 BBR) |
| 资源消耗 (CPU/Mem) | 极低 (忽略不计) | 极低 (<10MB) | 中 (20-50MB+ GC) | 中 (20-50MB+ GC) | 高 (随连接数暴涨) |
| 功能灵活性 | ❌ (仅 IP) | ❌ (仅转发) | ⭐⭐⭐⭐⭐ (路由/分流) | ⭐⭐⭐⭐⭐ (隧道/多级) | ⭐⭐⭐ (格式转换) |
| 运维复杂度 | 高 (命令繁琐) | 低 (简单配置) | 中 (JSON 配置) | 低 (命令行一把梭) | 低 (命令行) |
三、 不同应用场景下的最佳选择 (Decision Tree)
1. 场景:网络环境恶劣(高丢包、跨境公网)
- 核心痛点: 丢包导致 TCP 窗口骤减,速度跑不起来。
- 最佳方案: Gost 或 Realm 或 𝕏𝕣𝕒𝕪。
- 理由: 必须使用“用户态代理”模式,利用中转机(Relay Node)的 BBR 拥塞控制算法 来接管中转机到落地机的连接。iptables 在此场景下无能为力,因为它是透明的,无法介入 TCP 拥塞控制。
2. 场景:极致低延迟 / 游戏加速 / 专线中转
- 核心痛点: 每一毫秒都很重要,且主要流量可能为 UDP。
- 最佳方案: iptables / nftables。
- 次选: Realm。
- 理由: iptables 直接在内核层转发,没有用户态的 buffer 积压,没有 GC(垃圾回收)造成的微小抖动(Jitter)。对于游戏这种对延迟敏感但对带宽不敏感的业务,iptables 是神。
3. 场景:资源极度受限(128M/256M 内存小鸡)
- 核心痛点: 内存稍微多占一点就 OOM(内存溢出)死机。
- 最佳方案: Realm 或 iptables。
- 理由: Realm 是 Rust 编写,无 GC,内存占用是静态可控的;iptables 几乎不占用户态内存。Gost 和 𝕏𝕣𝕒𝕪 (Go 语言) 在高并发下内存占用会有波动。
4. 场景:需要高级路由(分流)或 域名转发
- 核心痛点: 目标 IP 经常变(DDNS),或者需要根据域名判断走哪个出口。
- 最佳方案: 𝕏𝕣𝕒𝕪 (dokodemo-door)。
- 理由: 𝕏𝕣𝕒𝕪 内置强大的路由引擎(Routing)和 DNS 模块,支持嗅探(Sniffing)流量特征进行智能分流。iptables 只能填死 IP,Realm 只能无脑转。
5. 场景:搭建多级跳板 / 隧道封装
- 核心痛点: 需要 A -> B -> C -> D 的复杂链路,或者把 TCP 封装成 WSS 穿透防火墙。
- 最佳方案: Gost。
- 理由: Gost 支持动态转发链和多种隧道协议的相互转换,配置极其灵活,是构建复杂网络拓扑的首选。
6. 场景:临时运维 / IPv4 与 IPv6 互转
- 核心痛点: 临时测一下通不通,或者机器只有 IPv6 要访问 IPv4。
- 最佳方案: Socat。
- 理由: 也是 Linux 发行版仓库自带工具,安装方便,命令行参数直观,专门解决协议族转换(4转6)的痛点。
四、 总结
- 追求“稳”和“快”的平衡(通用推荐): 首选 Realm。它在极低的资源占用下提供了能吃到 BBR 红利的性能,是目前性价比最高的纯转发工具。
- 追求“功能”和“全”(已有梯子环境): 直接用 𝕏𝕣𝕒𝕪。复用现有的二进制文件,统一管理,减少运维负担。
- 追求“物理极限”(特殊网络): 用 iptables/nftables。但前提是你要能忍受复杂的配置,且目标 IP 必须固定。
- 网络极客与架构师: 手里常备 Gost,它是处理复杂网络流转的瑞士军刀。
再提一嘴:
不要为了 1ms 的延迟去死磕 iptables,除非你是做游戏加速器的;在公网环境下,“抗丢包(BBR)”的收益通常远大于“零拷贝(Zero-copy)”的收益,所以 Realm/Gost/𝕏𝕣𝕒𝕪 这类用户态工具通常是更优解。
专业版:
一、 底层架构与工作原理分级
为了准确理解区别,我们需要从数据包的处理深度,将它们分为 NAT 转发(不终止连接) 与 全量代理(终止连接)。
splice系统调用,数据在内核缓冲区直接流转,不复制到用户态内存,仅控制路径在用户态。属于极简的 TCP Split。二、 核心指标对比矩阵
三、 不同应用场景下的最佳选择 (Decision Tree)
1. 场景:网络环境恶劣(高丢包、跨境公网)
2. 场景:极致低延迟 / 游戏加速 / 专线中转
3. 场景:资源极度受限(128M/256M 内存小鸡)
4. 场景:需要高级路由(分流)或 域名转发
5. 场景:搭建多级跳板 / 隧道封装
6. 场景:临时运维 / IPv4 与 IPv6 互转
四、 专业总结
splice实现了近似内核转发的效率,同时拥有用户态工具的 TCP Split 能力(能吃 BBR 抗丢包),是目前性价比最优的纯 TCP/UDP 中转工具。技术修正心法:
在公网环境下,“拥塞控制域的拆分(TCP Termination/Split)”带来的收益,通常远大于“零拷贝(Zero-copy)”带来的收益。 这就是为什么 Realm/Gost/Xray 往往比 iptables 跑得更快的原因。
省流
赞
任意门和gost吃bbr
iptables不吃bbr
很好的科普,无脑选择realm
realm
收藏
一直都没用转发,伪装云厂服务,藏木于林,慢慢找吧
没看懂拥塞控制对比的意义何在。
BBR 或者其他拥塞控制算法本来就是端到端的情况,理论情况下一边支持就可以,中间设备透明转发就行了……
现在中间设备还得处理 TCP 层的东西……?