Linux fq_codel中的单独流程是什么?

时间:2016-01-26 09:37:22

标签: linux networking routing throttling bandwidth-throttling

我设置了一个概念验证来限制终端(客户端)的入口流量:

eth0 -> ifb0 -> htb -> filter by ip -> htb rate -> fq_codel+ecn

我有2个源ips用于我想要限制的特定程序。有问题的程序打开了一堆tcp连接(下载,因此入口节流),我想限制它使用(完成)的总入口带宽,并在连接到相同IP地址之间进行公平调度(这个问题)。

最后有1个带附加费率的存储桶和1个fq_codel实例。

我有它的工作,但我有一些问题:

  • 当然,codel每个协议都有单独的队列(tcp vs udp)?
  • codel每个源ip都有单独的队列吗?
  • 每个tcp连接的codel都有单独的队列吗?
  • 我是否必须手动分离/标记流程?

每个互联网研究流程ID是" 5元组"的哈希,问题是,数据包的哪些元素是5元组的一部分?是否包括源端口和目标端口?

2 个答案:

答案 0 :(得分:1)

似乎包括源端口和目标端口,至少在默认情况下是这样:

http://lxr.free-electrons.com/source/net/core/flow_dissector.c#L655

655 /**
656  * __skb_get_hash: calculate a flow hash
657  * @skb: sk_buff to calculate flow hash from
658  *
659  * This function calculates a flow hash based on src/dst addresses
660  * and src/dst port numbers.  Sets hash in skb to non-zero hash value
661  * on success, zero indicates no valid hash.  Also, sets l4_hash in skb
662  * if hash is a canonical 4-tuple hash over transport ports.
663  */
664 void __skb_get_hash(struct sk_buff *skb)

答案 1 :(得分:0)

Per http://mdh.diva-portal.org/smash/get/diva2:754020/FULLTEXT01.pdf(某人的博士论文):

  

通过从数据包中散列5元组值来分隔流   (默认是src / dest port / ip和protocol)以及随机   编号

默认位外,很清楚。