LVS基于Netfilter在INPUT链实现零拷贝高速转发,仅修改报文关键字段、查内存哈希表调度RS,绕过协议栈与用户态,微秒级延迟。需禁用iptables NAT、ARP响应等干扰机制。

LVS 利用 Netfilter 实现高速转发,关键在于绕过常规协议栈处理路径,直接在内核网络层做轻量级包修改与分发,不进入用户态、不重建连接、不拷贝完整数据包。
工作位置:精准卡在 INPUT 链上
IPVS 模块注册在 Netfilter 的 INPUT hook 点,只处理目标地址是本机 VIP(虚拟 IP)的入向流量。一旦匹配到已配置的集群服务(如 192.168.10.100:80),就立即截获该数据包,跳过本机上层协议栈(如 socket 接收队列),直接查表选择 Real Server 并改写报文头,再送入 POSTROUTING 链发出。
这种设计避免了传统代理(如 Nginx)需完整解析 TCP/HTTP、建立新连接、缓冲数据等开销,单核即可支撑数万并发连接。
转发动作:仅改写关键字段,不重传不重组
NAT、DR、TUN 三种模式虽行为不同,但都只做最小必要修改:
- NAT 模式:改写目的 IP + 目的端口(转发时),再改写源 IP + 源端口(响应返回时)
- DR 模式:只改写二层目标 MAC 地址,IP 层完全不变,Real Server 用本地环回绑定 VIP 响应
- TUN 模式:在外层封装一个新的 IP 头(源为 Director,目的为 RS),原始包作为载荷透传
所有操作均在内核内存中完成,无需分配新 skb,也不触发路由查找或 conntrack 全流程,延迟控制在微秒级。
调度核心:内存哈希表 + 零拷贝查表
IPVS 维护一张运行在内存中的连接哈希表(connection hash table),记录每个活跃连接的四元组(client IP:port → VIP:port → RS IP:port)映射关系。新连接按调度算法(如 wlc、rr)选 RS 后立即建表项;后续同连接的包直接查表转发,无需重复计算。
这张表支持百万级条目,查询复杂度接近 O(1),且与 netfilter 的其他模块(如 iptables)隔离——IPVS 规则独立管理,不依赖 conntrack 或 nat 表,避免锁竞争和规则遍历开销。
协同前提:关闭干扰机制,保障路径纯净
要发挥 Netfilter 层面的极致性能,必须规避其他模块的干预:
- 禁用或绕过 iptables 的 NAT 表(尤其是 POSTROUTING 中的 MASQUERADE),防止重复 DNAT/SNAT
- Real Server 上关闭 ARP 响应(DR 模式下),避免 VIP 地址冲突
- 启用内核参数 net.ipv4.ip_forward=1(NAT/TUN 必须),但不开启不必要的 netfilter 日志或调试功能
- 避免在同一主机混用 ipvsadm 和 firewalld,规则冲突会导致包被 DROP 或误转发










