Управление исходящим трафиком через обратную связь
Механизм обратной связи — дополнение к HTB-полисеру абонента. Он ограничивает входящий трафик абонента не напрямую, а через сокращение исходящего.
Зачем это нужно
Ограничивать входящий трафик напрямую неэффективно с точки зрения экономии полосы: к моменту отбрасывания пакеты уже получены из интернет-канала оператора. Отброшенные пакеты отправитель передаёт повторно, и это создаёт лишнюю нагрузку на канал. TCP и часть UDP-протоколов со своим механизмом congestion control со временем подстраиваются под ограничение, но лишний трафик по каналу всё равно проходит.
Большинство прикладных протоколов работают по принципу «запрос — ответ»: абонент отправляет запрос (исходящий трафик) и получает ответ (входящий). Если сокращать полосу для запросов, уменьшается и объём ответов. Такой подход позволяет дополнительно сэкономить до 10% полосы канала оператора по сравнению с обычным полисингом.
Как это работает
В HTB-профиль абонента добавляется параметр htb_inbound_bw:
htb_inbound_bw=rate <порог> ceil <максимум>
- Пока входящий трафик абонента ниже порога
htb_inbound_bw rate, исходящий трафик ограничен как обычно — значениемceilвhtb_root. - Когда входящий трафик превышает порог, верхняя граница исходящего трафика (
htb_root ceil) начинает уменьшаться. - Величина уменьшения пропорциональна превышению: процент превышения считается по интервалу между
htb_inbound_bw rateиhtb_inbound_bw ceil, и на тот же процент сокращается исходящий трафик. - Исходящий трафик никогда не ограничивается сильнее, чем
htb_root rate. - При уменьшении
htb_root ceilклассы трафика перераспределяют полосу между собой в соответствии со своимиrateиceil.
Пример: тариф 10 Мбит/с с обратной связью
За основу возьмём пример 1 из раздела Создание HTB, TBF полисера через файл с разметкой: тариф 10 Мбит/с, торренты выделены в класс cs7 и ограничены 3 Мбит/с.
Добавим параметр htb_inbound_bw и зададим для корневых классов rate и ceil:
# Обратная связь: порог 9 Мбит/с, максимум 10 Мбит/с входящего трафика htb_inbound_bw=rate 9mbit ceil 10mbit # Входящий трафик (к абоненту) htb_inbound_root=rate 2mbit ceil 10mbit htb_inbound_class0=rate 8bit ceil 10mbit htb_inbound_class1=rate 8bit ceil 10mbit htb_inbound_class2=rate 8bit ceil 10mbit htb_inbound_class3=rate 8bit ceil 10mbit htb_inbound_class4=rate 8bit ceil 10mbit htb_inbound_class5=rate 8bit ceil 10mbit htb_inbound_class6=rate 8bit ceil 10mbit htb_inbound_class7=rate 1mbit ceil 3mbit # Исходящий трафик (от абонента): ceil уменьшается до rate при превышении порога htb_root=rate 2mbit ceil 10mbit htb_class0=rate 8bit ceil 10mbit htb_class1=rate 8bit ceil 10mbit htb_class2=rate 8bit ceil 10mbit htb_class3=rate 8bit ceil 10mbit htb_class4=rate 8bit ceil 10mbit htb_class5=rate 8bit ceil 10mbit htb_class6=rate 8bit ceil 10mbit htb_class7=rate 1mbit ceil 3mbit
В этом примере:
- пока входящий трафик абонента не превышает 9 Мбит/с, исходящий может занимать до 10 Мбит/с;
- при входящем трафике от 9 до 10 Мбит/с верхняя граница исходящего пропорционально снижается;
- исходящий трафик не ограничивается сильнее, чем до 2 Мбит/с (
htb_root rate).
- Как и в любом HTB-профиле, необходимо описать все 8 классов.
- Сумма
rateпо классам должна быть меньшеrateкорневого класса.
Для полисинга общего и виртуального канала аналогичный механизм настраивается иначе, через ceil корневых классов: Полисинг Общего канала.
Была ли полезна эта информация?