Почему я не могу расставить приоритеты для трафика TCP с помощью полей ToS?
Я пытаюсь расставить приоритеты TCP-трафика, используя поле ToS в заголовке IP. Я насыщаю интерфейс (ethernet), отправляя данные 1 ГБ через iperf с полем ToS, установленным в 0x10 (минимальная задержка). Затем я запускаю другой TCP-клиент с ToS по умолчанию (0).
Ожидание: мой TCP-клиент не должен отправлять данные, пока iperf не завершит отправку своих данных.
Результат: данные от моего клиента отправляются, даже если iperf отправляет пакеты с более высоким приоритетом.
Я также попытался создать тот же сценарий, создав 2 отдельных клиента и выделив 0x10 и 0x08 ToS для соответствующих клиентов, используя iptables. Я использовал: iptables -A PREROUTING -t mangle -p tcp --sport 5000 -j TOS --set-tos Минимальная задержка
Я до сих пор не могу расставить приоритеты одного клиента над другим.
Я использую Ubuntu (14.04) с версией iptables 1.4.21
Может кто-нибудь любезно помочь мне решить проблему?
Спасибо Варун
1 ответ
Поле ToS указывает на то, как расставить приоритеты или направить пакет, теперь вам нужно указать политику, чтобы объяснить, что вы хотите делать с этими пакетами. Обратите внимание, что поле ToS будет полезно только в вашей локальной сети, ISP обычно игнорирует или сбрасывает ToS.
Так как вы работаете в Linux, вы должны взглянуть на tc (контроль трафика). (вот хорошее начало)
Если вам нужен строгий приоритет на основе ToS, вы должны установить планировщик pfifo_fast (у вас, вероятно, есть fq_codel по умолчанию).
tc qdisc add dev eth0 root pfifo_fast
Хотя, если вам нужна большая гибкость, вы можете попробовать hfsc или htb в качестве классного алгоритма, а затем fq_codel / pfifo / sfq в качестве конечного бесклассового алгоритма. Вы по-прежнему сможете сопоставить ToS с iptables или tc.