Linux 网络数据包处理 — 知识地图

本笔记为 MOC(Map of Content)

Linux 内核从网卡收包到用户态进程接收,中间经历了一条完整的协议栈路径。Netfilter 框架在这条路径上插入了 Hook 点,iptables 和 IPVS 则是在这些 Hook 点上注册的不同处理逻辑。本 MOC 组织相关的原子笔记。

数据包处理全景

网卡收包 ─→ 驱动层 ─→ 内核协议栈
                         │
                    ┌────▼────┐
                    │PREROUTING│  ← netfilter Hook
                    └────┬────┘
                         │
                    ┌────▼────┐
                    │ 路由判定 │
                    └────┬────┘
                    ┌────┴────┐
               ┌────────┐  ┌────────────┐
               │本机    │  │非本机      │
               │LOCAL_IN│  │FORWARD     │
               │  ↕     │  │            │
               │ IPVS   │  │ Linux-IP   │
               │ 截获   │  │ 转发与路由 │
               │ 并分发 │  └─────┬──────┘
               └───┬────┘        │
                    │     ┌────▼───────┐
                    │     │POSTROUTING  │
                    │     └────┬───────┘
               ┌────▼──┐      │
               │转发给RS│    出网卡
               └──┬────┘
                  │
        ┌─────────┼─────────┐
        ▼         ▼         ▼
      Real     Real     Real
      Server 1 Server 2 Server 3

图中展示了 IPVS 在 LOCAL_IN 点截获目标为 VIP 的流量,按调度算法分发给 Real Server。iptables 则在各 Hook 点配置过滤/NAT 规则。

核心组件速览

组件层次定位核心笔记
Netfilter内核包处理框架——定义 Hook 点,提供注册机制netfilter框架详解
iptables用户态防火墙策略工具——包过滤、NAT、包修改iptables详解
Conntrack内核连接跟踪子系统——跟踪连接状态,为 NAT 和状态防火墙提供基础Linux-连接跟踪-conntrack详解
IPVS内核四层负载均衡器——按调度算法分发请求到 Real ServerIPVS-IP虚拟服务器详解
Director & RS概念IPVS 架构中的调度器与真实服务器的角色划分与关系IPVS-Director与Real-Server
ipvsadm用户态IPVS 管理命令——增删查改虚拟服务和 Real Serveripvsadm命令详解
七层负载均衡(用户态)用户态七层负载均衡器——解析 HTTP 协议,按内容路由/SSL 卸载分发四层与七层负载均衡对比

数据流场景

场景一:iptables 防火墙过滤

包进入 → PREROUTING → 路由判定 → FORWARD/INPUT → 匹配 filter 表规则 → ACCEPT/DROP
                                                                   ↑
                                                           iptables 在此配置规则

场景二:iptables NAT(端口转发)

包进入 → PREROUTING(nat表DNAT) → 路由判定 → FORWARD → POSTROUTING(nat表SNAT/MASQUERADE)
                                                              ↑
                                                     [[iptables端口转发]]

场景三:IPVS 负载均衡(NAT 模式)

包进入 → PREROUTING → 路由判定(目标=VIP) → IPVS HOOK → 选 RS → 改目标IP
                                                          ↓
                                                  FORWARD → POSTROUTING → RS

场景四:IPVS 负载均衡(DR 模式)

包进入 → PREROUTING → 路由判定(目标=VIP) → IPVS HOOK → 选 RS → 改MAC地址
                                                          ↓
                    包直接二层转发 → RS(lo 接口上绑定的 VIP 接收)

关键对比

iptables vs IPVS

对比维度iptablesIPVS
用途防火墙 + NAT四层负载均衡
工作位置全部 5 个 Hook 点LOCAL_IN(优先级高于 iptables)
规则复杂度五表五链,线性/树形匹配两层结构:VS → RS
性能中等(规则越多越慢)高(哈希查找 O(1))
调度算法无,纯条件匹配10 种调度算法
K8s 模式kube-proxy iptables 模式kube-proxy IPVS 模式

IPVS 三种模式

特性NATDRTUN
修改内容IP:PortMAC 地址外层 IP 头封装
响应路径经 Director直返客户端直返客户端
性能中等最高
端口映射
跨网段❌ 需同子网❌ 需同二层✅ 跨机房
RS 配置改网关lo 绑定 VIP + ARP 抑制支持 IPIP 隧道

详见 二、三种工作模式

四层 vs 七层 负载均衡

对比维度L4 四层(内核态)L7 七层(用户态)
OSI 层级传输层(TCP/UDP)应用层(HTTP/HTTPS/gRPC)
决策依据五元组 IP:PortURL、Header、Cookie
典型实现IPVS、Nginx Stream、HAProxy TCPNginx HTTP、HAProxy HTTP、Envoy
性能⭐⭐⭐⭐⭐(内核态 O(1))⭐⭐⭐(用户态解包封包)
内容路由✅ 路径/域名/Header 路由
SSL 卸载✅ TLS termination
协议范围TCP/UDP 全部HTTP/HTTPS/gRPC 等

选型原则

能用 L4 就不用 L7,L7 仅在需要应用层决策时引入。大型架构常见前端 L4(IPVS/NLB)做流量入口 + 后端 L7(Nginx/Envoy)做精细路由的分层架构

详见 四层与七层负载均衡对比

依赖关系

┌──────────────────────────────────┐
│          Netfilter 框架           │ ← 底层基础设施
│  定义 5 个 Hook 点 + 注册机制     │
└───────┬────────────────┬────────┘
        │                │
   ┌────▼────┐     ┌────▼────┐
   │ Conntrack│     │  IPVS   │
   │ 连接跟踪 │     │ 负载均衡 │ ← IPVS 有独立连接跟踪
   └────┬─────┘     └─────────┘
        │
   ┌────▼────┐
   │ iptables │     ← 依赖 conntrack 做状态匹配
   │ 防火墙   │
   │ NAT      │
   └────┬─────┘
        │
   ┌────▼────┐
   │iptables │     ← 用户空间管理工具
   │ 命令    │
   └─────────┘

一句话理解关系:Netfilter 是”高速公路上的检查站”,conntrack 是”记录车辆信息的摄像头”,iptables 是”交警(拦车检查/放行)“,IPVS 是”调度中心(把车引导到不同出口)“。

基础协议层(网络层)

内核协议栈之上的网络层基础协议:地址结构决定路由判定依据,ARP 提供帧封装所需的目标 MAC,RIP/BGP 自动生成路由表。

主题核心笔记
IPv4 地址分类与子网掩码IPv4地址分类与子网掩码
IP 包接力与路由表IP包接力与路由表
ARP:IP → MAC 解析ARP协议-IP到MAC的解析
RIP 与 BGP:路由表自动生成RIP与BGP-路由表的自动生成

与内核处理路径的衔接

上方流程图中的**「路由判定」**一步,依据就是 IP包接力与路由表 描述的路由表匹配规则(最长前缀匹配 + 默认路由)。 判定完成后要把 IP 包封装成帧发送时,需要目标 MAC 地址 —— 由 ARP协议-IP到MAC的解析 提供。 而路由表本身的来源,则可能是静态配置(Linux-IP转发与路由)或路由协议(RIP与BGP-路由表的自动生成)。

相关原子笔记

TABLE
  file.tags as "标签"
FROM "10-Topics"
WHERE file.name IN ["netfilter框架详解", "iptables详解", "iptables端口转发", "iptables-扩展匹配模块", "IPVS-IP虚拟服务器详解", "IPVS-Director与Real-Server", "ipvsadm命令详解", "Linux-连接跟踪-conntrack详解", "Linux-IP转发与路由", "K8s-NodePort流量流转", "IPv4地址分类与子网掩码", "IP包接力与路由表", "ARP协议-IP到MAC的解析", "RIP与BGP-路由表的自动生成"]
SORT file.name ASC

外部关联

面试要点

  • Netfilter → iptables / IPVS 的关系:Netfilter 是框架(机制),iptables 和 IPVS 是具体实现(策略)。netfilter框架详解
  • Conntrack 是状态防火墙和 NAT 的基础:它跟踪连接状态(NEW/ESTABLISHED/RELATED/INVALID),在优先级 -200 处注册,先于所有其他处理。Linux-连接跟踪-conntrack详解
  • iptables “四表五链” → 实际”五表五链”:security 表是后来加入的。1.1 五张表(Tables)
  • IPVS 三种模式选型:NAT 配置最简单但性能有瓶颈;DR 性能最高但需同二层;TUN 可跨机房但配置复杂。二、三种工作模式
  • IPVS vs iptables 性能差异:IPVS 使用哈希查找 O(1),iptables 规则链随规则数增长性能下降。五、IPVS-vs-iptables
  • keepalived + IPVS 高可用方案:keepalived 负责 VIP 漂移和健康检查,自动管理 IPVS 规则。6.2 健康检查配合(keepalived)
  • K8s 中 iptables 模式 vs IPVS 模式:大规模 Service 场景下 IPVS 模式性能更优。五、IPVS-vs-iptables
  • Director 与 RS 的职责划分:Director 负责调度,RS 负责处理,不同模式下两者的交互路径不同。IPVS-Director与Real-Server
  • RS 的健康检查与权重:通过 keepalived 监控 RS 状态,权重为 0 时 RS 被摘除。2.4 RS 的健康检查