Назад | Перейти на главную страницу

Почему я не могу расставить приоритеты для TCP-трафика с помощью полей ToS?

Я пытаюсь установить приоритет TCP-трафика с помощью поля ToS в IP-заголовке. Я насыщаю интерфейс (ethernet), отправляя данные 1 ГБ через iperf с полем ToS, установленным на 0x10 (Minimize-Delay). Затем я запускаю другой TCP-клиент с ToS по умолчанию (0).

Ожидание: мой TCP-клиент не должен отправлять данные, пока iperf не завершит отправку своих данных.

Результат: данные от моего клиента отправляются, даже если iperf отправляет пакеты с более высоким приоритетом.

Я также попытался создать тот же сценарий, создав 2 отдельных клиента и назначив 0x10 и 0x08 ToS для соответствующих клиентов с помощью iptables. Я использовал: iptables -A PREROUTING -t mangle -p tcp --sport 5000 -j TOS --set-tos Minimize-Delay

Я все еще не могу отдавать предпочтение одному клиенту над другим.

Я использую Ubuntu (14.04) с iptables версии 1.4.21

Может ли кто-нибудь помочь мне решить проблему?

Спасибо Варун

Поле ToS указывает, как расставить приоритеты или направить пакет, теперь вам нужно указать политику, чтобы объяснить, что вы хотите делать с этими пакетами. Обратите внимание, что поле ToS будет полезно только в вашей локальной сети, провайдер обычно игнорирует или сбрасывает 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.