Linux fq_codel中的独立流是什么?

10

我正在建立一个概念验证,以限制终端端(客户端)的入站流量:

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

我有两个特定程序的源IP地址需要限速。这些程序会打开大量的TCP连接进行下载,因此需要对流入带宽进行限制,并且希望每个IP地址之间的连接有公平调度。

最终设置了一个带有速率限制的桶和一个fq_codel实例。

虽然已经设置好并运行,但我还有一些疑问:

  • codel是否针对每个协议(TCP与UDP)分别设置队列?
  • codel是否针对每个源IP地址设置队列?
  • codel是否针对每个TCP连接设置队列?
  • 我是否需要手动区分/标记流量?

根据互联网研究,流ID是“五元组哈希”,问题在于数据包的哪些元素属于五元组?源端口和目标端口是否都包含在内?


PS:我正在寻找比我自己更好/更权威的答案。 - Dima Tisnek
2个回答

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)

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接