linux下qdisc的filter和block, chain有什么作用,有示例吗
时间: 2024-11-06 19:16:33 浏览: 20
在Linux内核的网络调度机制中,QDisc(Queueing Discipline)负责管理流入网络接口的数据流,包括分类(classification)、限制速率(rate limiting)、队列策略(queuing policies)等。Filter和Block/Chain是qdisc中用于实现这些功能的重要组件。
**Filter:**
Filter是qdisc中的一个重要部分,它负责根据某些条件对数据包进行筛选和分类。比如,在`classful qdisc`中,过滤器被用来决定每个数据包应该被送到哪个特定的类(class)。通过设置不同的过滤器规则,你可以定义不同类型的流量(如TCP/IP协议的不同优先级)应使用的处理方式。
**Block/Chain:**
Block和Chain通常与TC(Traffic Control)工具一起使用,它们构成了一种分层结构,允许在网络层级上创建复杂的调度策略。Block是流量控制的基本单位,可以设置带宽限制、丢弃策略等。链(chain)则是由多个Block串联起来,形成一个决策路径,数据包按照顺序依次经过这些Block,直到找到合适的处理方式。
在你的引用[2]中,可以看到一个`sfq`(Shortest Fair Queuing)qdisc实例,其下有三个子qdisc(bands):`prio`、`tbf`和`sfq`。其中,`prio` band使用priomap配置了四个优先级,对应于不同的band,表明数据包会被基于优先级进行调度。`tbf`用于带宽限制,`sfq`则实现了公平排队,保证各个类别的流量得到适当的份额。
**示例**:
```bash
# 安装tc工具
sudo apt-get install iproute2
# 创建一个自定义qdisc并添加过滤器
tc qdisc add dev eth0 root handle 1: htb default 0
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.0/24 flowid 1:1
# 这里1:1代表匹配过滤器的流量将被送往htb的band 1
# 设置带宽限制
tc qdisc add dev eth0 parent 1:1 tbf rate 5mbit latency 10ms burst 1000b
# 检查当前的qdisc结构
tc -s qdisc ls dev eth0
```
以上命令展示了如何使用TC创建一个包含过滤器和带宽限制的qdisc结构。在这个例子中,流量流向192.168.1.0/24的IP地址会被送入带宽受限的带宽。
阅读全文