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 必须在用户态模拟部分内核协议栈逻辑:
- 分包处理:原始包由于 MTU 限制可能被拆分为多个片段。
- 乱序重排:利用序列号(SEQ)在内存中维护缓冲区,处理乱序到达的包。
- 重传过滤:识别并计算重传率,但避免重复数据送入 L7 解析。
3.2 深度网络指标
由于能看到每个物理包的交互,AF_PACKET 可以计算出极高精度的网络指标:
- RTT:三次握手的往返时延。
- Retransmission:重传比例,用于判断链路质量。
4. 协议解析深度:Transaction (事务) 概念
DeepFlow 借鉴了类似 Suricata 的 Transaction 概念,在内部称为 L7FlowLog 或 Session。
4.1 SQL 与 HTTP 的全量分析
- 事务关联:利用 TCP 序列号或应用层 ID(如 gRPC Stream ID),将“请求-响应”精准配对。
- 字段提取:全量解析 SQL 语句、HTTP URL、响应码(Status Code)以及错误信息。
- 截断机制 (Truncation):
- 为了平衡性能,DeepFlow 默认采集载荷的前 1024 字节。
- 影响:超长 SQL 的末尾会被截断,但响应时间、成功率、受影响行数等关键指标依然保持准确。
5. 自动降级与混合采集逻辑
- 环境探测:Agent 启动时优先加载 eBPF。若内核不支持或权限不足,自动平滑回退到
AF_PACKET。 - 混合模式 (Hybrid):在现代环境下,DeepFlow 往往同时利用两者:
- eBPF 提供 L7 内容和 HTTPS 明文。
- AF_PACKET 提供 L4 丢包和重传指标。
- 数据融合: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 的 established、close、reset 等关键状态迁移,从而补全以下指标:
- RTT (往返时延):利用内核自带的
srtt(平滑往返时间)数据,直接从tcp_sock结构体中读取。 - 异常断连:精准区分是应用主动关闭(FIN)还是异常重置(RST)。
7. 安全场景识别:DDoS 与端口扫描
基于 L4/L7 的全栈观测,DeepFlow 可以有效识别网络攻击行为:
7.1 端口扫描 (Port Scanning)
- 特征识别:短时间内出现大量
SYN_SENT且匹配RST或TIMEOUT的流记录。 - 内网横向探测:由于 Agent 部署在每台主机上,DeepFlow 能发现传统边界防火墙无法看到的内网机器间的横向扫描行为。
7.2 DDoS 攻击识别
- SYN Flood:监控 L4 指标中的“半连接建立成功率”及 SYN 包占比。
- 应用层 DoS (HTTP Flood):监控 QPS 暴涨、响应时延飙升及 5xx 错误率。
- 慢速攻击 (Slowloris):通过 eBPF 监控 TCP 窗口大小(Window Size),识别那些长期占用连接但不发送完整请求的异常连接。
报告生成时间: 2026-03-08 由 Gemini CLI 分析生成