linux 流量控制

一、概念

Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,比如,数据包的接收速率、发送速率、多个数据包的发送顺序等。

Traffic Control的作用包括以下几种:

  • 调整(Shaping): 通过推迟数据包发送来控制发送速率,只用于网络出方向(egress)
  • 时序(Scheduling):调度不同类型数据包发送顺序,比如在交互流量和批量下载类型数据包之间进行发送顺序的调整。只用于网络出方向(egress)
  • 监督(Policing): 根据到达速率决策接收还是丢弃数据包,用于网络入方向(ingress)
  • 丢弃(Dropping): 根据带宽丢弃数据包,可以用于出入两个方向

二、基本原理

tc由qdiscfitlerclass三部分组成:

1、qdisc:

要实现流量控制,需要通过队列将数据包缓存起来,用来控制网络收发的速度。在Linux实现中,把这种包括数据结构和算法实现的控制机制抽象为结构队列规程:Queuing discipline,简称为qdiscqdisc对外暴露两个回调接口enqueuedequeue分别用于数据包入队和数据包出队,而具体的排队算法实现则在qdisc内部隐藏。

实际上,每个网卡都有一个关联的qdisc。它包括以下几种:

  • 无分类qdisc(只能应用于root队列)
    • [p|b]fifo:简单先进先出
    • pfifo_fast:根据数据包的tos将队列划分到3个band,每个band内部先进先出
    • redRandom Early Detection,带带宽接近限制时随机丢包,适合高带宽应用
    • sfqStochastic Fairness Queueing,按照会话对流量排序并循环发送每个会话的数据包
    • tbfToken Bucket Filter,只允许以不超过事先设定的速率到来的数据包通过 , 但可能允许短暂突发流量朝过设定值
  • 有分类qdisc(可以包括多个队列)
    • cbqClass Based Queueing,借助EWMA(exponential weighted moving average, 指数加权移动均值 ) 算法确认链路的闲置时间足够长 , 以达到降低链路实际带宽的目的。如果发生越限 ,CBQ 就会禁止发包一段时间。
    • htbHierarchy Token Bucket,在tbf的基础上增加了分层
    • prio:分类优先算法并不进行整形 , 它仅仅根据你配置的过滤器把流量进一步细分。缺省会自动创建三个FIFO类。

2、filter:

用来将数据包划分到具体的控制策略中

  • u32:根据协议、IP、端口等过滤数据包
  • fwmark:根据iptables MARK来过滤数据包
  • tos:根据tos字段过滤数据包

3、class:

用来表示具体的控制策略,只用于有分类的qdisc上。每个class要么包含多个子类,要么只包含一个子qdisc。当然,每个class还包括一些列的filter,控制数据包流向不同的子类,或者是直接丢掉。

基于qdiscclassfilter种三元素可以构建出非常复杂的树形qdisc结构,极大扩展流量控制的能力。

ref:

Linux Traffic Control | Houmin

流量控制 · GitBook

TC - Linux 流量控制工具 | Life is magic. Coding is art.

linux tc流量控制(一):classless qdisc - 知乎

https://tldp.org/HOWTO/Traffic-Control-HOWTO/

Linux流量控制(Traffic Control)介绍 | Just For Coding

TC 流量控制工具

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值