基于BPF的流量控制分类器
1. 流量控制概述
流量控制(Traffic Control)是内核数据包调度子系统架构,它由各种机制和排队系统组成,能够决定数据包的流向和接收方式。其常见用例包括但不限于以下方面:
- 对特定类型的数据包进行优先级排序
- 丢弃特定类型的数据包
- 进行带宽分配
通常,在需要重新分配系统中的网络资源时,流量控制是一个有效的解决方案。为了充分发挥其作用,应根据要运行的应用程序类型部署特定的流量控制配置。
流量控制提供了一个可编程的分类器cls_bpf,它可以介入调度操作的不同层级,读取和更新套接字缓冲区及数据包元数据,从而实现流量整形、跟踪、预处理等功能。自内核 4.1 版本起,cls_bpf开始支持 eBPF,这意味着此类程序可以访问 eBPF 映射、支持尾调用、访问 IPv4/IPv6 隧道元数据,并且可以使用 eBPF 提供的辅助工具和实用程序。
与流量控制相关的网络配置交互工具是iproute2套件的一部分,其中包含ip和tc,分别用于操作网络接口和流量控制配置。
2. 术语解释
由于流量控制和 BPF 程序之间存在交互点,因此需要了解一些流量控制的概念。以下是一些关键术语:
2.1 排队规则(Queueing disciplines,qdisc)
排队规则定义了用于将数据包排入接口的调度对象,这些对象可以是无类(classless)或有类(