====== Управление исходящим трафиком через обратную связь ====== Механизм обратной связи — дополнение к [[dpi:dpi_options:opt_bandwidth_mgmt:bandwidth_conf|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 из раздела [[dpi:dpi_options:opt_bandwidth_mgmt:bandwidth_conf|]]: тариф 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'' корневых классов: [[dpi:dpi_options:opt_shaping:shaping_settings|]].