2016-01-26 2 views
10

Я настраиваю доказательство концепции душить входящий трафик на терминальном конце (клиент):Что представляет собой отдельный поток в Linux fq_codel?

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

У меня есть 2 источника для IP-адресов конкретной программы Я хочу задушить. Эта программа открывает кучу tcp-подключений (загружает, таким образом, проникает дроссель), и я бы хотел, чтобы оба ограничивали общую пропускную способность, которую он использует (выполнял), и имеют справедливое планирование между соединениями с одним и тем же IP-адресом (этот вопрос).

В конце есть 1 ведро со ставкой и 1 fq_codel экземпляр.

У меня он работает, но у меня есть несколько вопросов:

  • безусловно codel имеет отдельную очередь на протокол (TCP против УДП)?
  • Есть ли в кодере отдельные очереди на источник ip?
  • Кодировка имеет отдельную очередь на соединение tcp?
  • Должен ли я вручную отделять/тегировать потоки?

В течение интернет-исследования идентификатор потока «хэш 5-кортежей», вопрос в том, какие элементы пакета являются частями 5-кортежей? Включены ли исходные и целевые порты?

+0

P.S. Я ищу лучший/более авторитетный ответ, чем мой собственный –

ответ

0

Per http://mdh.diva-portal.org/smash/get/diva2:754020/FULLTEXT01.pdf (чей-то кандидатская диссертация):

потоки разделены хеширование значения 5-кортежей из пакета (по умолчанию src/dest port/ip и protocol) вместе со случайным номером

Помимо по умолчанию бит, это ясно.

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)