DeepFlow 深度分析系列文章

DeepFlow 流量采集双引擎技术深度解析

1. 核心技术对比:eBPF vs. AF_PACKET

DeepFlow 采用双引擎设计,确保在任何 Linux 环境下都能实现全栈观测。

维度eBPF (现代内核模式)AF_PACKET (经典模式)
内核要求Linux 4.14+ (推荐 5.0+)Linux 2.6+ (全环境兼容)
数据源位置系统调用层 (read/write, send/recv)网卡驱动层 (原始以太网报文)
有序性天然有序:由内核协议栈处理重组原始无序:需在用户态进行 TCP 重组
HTTPS 观测支持:Hook TLS 库获取明文不支持:仅能看到加密后的流量
CPU 消耗极低:内核直接提供有序载荷较高:需消耗 CPU 处理乱序与重传
L4 网络指标较弱 (看不到原始序列号变化)最强:RTT、重传、丢包、零窗口
适用场景应用性能监控 (L7)、全链路追踪网络排障 (L4)、老旧系统兼容

2. eBPF 采集路径:应用层“外科医生”

2.1 工作原理

eBPF 通过 Hook 内核中的 Socket 相关系统调用,直接从进程的发送/接收缓冲区拷贝数据。

  • 白嫖内核:由于数据获得在进入 read/write 之前已经由内核 TCP 协议栈完成了乱序重排和分片重组,Agent 拿到的数据是 100% 有序的字节流。
  • 无需重组:Agent 接收到数据后,直接送入 L7 解析器,极大地降低了内存 and CPU 的开销。

2.2 HTTPS 解密 (TLS/SSL)

DeepFlow 利用 eBPF 的 uprobe 技术,Hook 用户态的加密库(如 OpenSSL, Go TLS)。在数据进入加密引擎之前或解密之后直接拦截明文 HTTP 内容,彻底解决了“加密黑盒”问题。


3. AF_PACKET 采集路径:网络层“全能修理工”

3.1 用户态 TCP 重组

AF_PACKET 路径下,Agent 必须在用户态模拟部分内核协议栈逻辑:

  1. 分包处理:原始包由于 MTU 限制可能被拆分为多个片段。
  2. 乱序重排:利用序列号(SEQ)在内存中维护缓冲区,处理乱序到达的包。
  3. 重传过滤:识别并计算重传率,但避免重复数据送入 L7 解析。

3.2 深度网络指标

由于能看到每个物理包的交互,AF_PACKET 可以计算出极高精度的网络指标:

  • RTT:三次握手的往返时延。
  • Retransmission:重传比例,用于判断链路质量。

4. 协议解析深度:Transaction (事务) 概念

DeepFlow 借鉴了类似 Suricata 的 Transaction 概念,在内部称为 L7FlowLogSession

4.1 SQL 与 HTTP 的全量分析

  • 事务关联:利用 TCP 序列号或应用层 ID(如 gRPC Stream ID),将“请求-响应”精准配对。
  • 字段提取:全量解析 SQL 语句、HTTP URL、响应码(Status Code)以及错误信息。
  • 截断机制 (Truncation)
    • 为了平衡性能,DeepFlow 默认采集载荷的前 1024 字节
    • 影响:超长 SQL 的末尾会被截断,但响应时间、成功率、受影响行数等关键指标依然保持准确。

5. 自动降级与混合采集逻辑

  1. 环境探测:Agent 启动时优先加载 eBPF。若内核不支持或权限不足,自动平滑回退AF_PACKET
  2. 混合模式 (Hybrid):在现代环境下,DeepFlow 往往同时利用两者:
    • eBPF 提供 L7 内容和 HTTPS 明文。
    • AF_PACKET 提供 L4 丢包和重传指标。
  3. 数据融合:Server 端通过五元组和时间戳,将两路数据合二为一,提供全栈视图。

6. eBPF 模式下的 L4 指标补全机制

在 eBPF 模式下,DeepFlow 并非只通过系统调用获取 L7 数据,它还通过以下机制“深度补全” L4 层的分析:

6.1 内核原生事件监控 (Kernel-Native Metrics)

  • 重传识别:不同于 AF_PACKET 通过序列号(SEQ)猜重传,eBPF 直接 Hook 内核函数 tcp_retransmit_skb。只要内核执行了重传动作,eBPF 立即记录,准确率 100%。
  • 丢包根因分析:通过 Hook kfree_skb(内核释放报文函数),DeepFlow 可以识别包是在哪里丢的。例如:是因为 iptables 规则(防火墙)连接跟踪表满(Conntrack Full) 还是 网卡缓冲区溢出

6.2 TCP 状态机深度追踪

即便不抓取原始包,eBPF 也会监控 TCP 的 establishedclosereset 等关键状态迁移,从而补全以下指标:

  • RTT (往返时延):利用内核自带的 srtt(平滑往返时间)数据,直接从 tcp_sock 结构体中读取。
  • 异常断连:精准区分是应用主动关闭(FIN)还是异常重置(RST)。

7. 安全场景识别:DDoS 与端口扫描

基于 L4/L7 的全栈观测,DeepFlow 可以有效识别网络攻击行为:

7.1 端口扫描 (Port Scanning)

  • 特征识别:短时间内出现大量 SYN_SENT 且匹配 RSTTIMEOUT 的流记录。
  • 内网横向探测:由于 Agent 部署在每台主机上,DeepFlow 能发现传统边界防火墙无法看到的内网机器间的横向扫描行为。

7.2 DDoS 攻击识别

  • SYN Flood:监控 L4 指标中的“半连接建立成功率”及 SYN 包占比。
  • 应用层 DoS (HTTP Flood):监控 QPS 暴涨、响应时延飙升及 5xx 错误率。
  • 慢速攻击 (Slowloris):通过 eBPF 监控 TCP 窗口大小(Window Size),识别那些长期占用连接但不发送完整请求的异常连接。

报告生成时间: 2026-03-08 由 Gemini CLI 分析生成


外部参考