Настройка QoS в Gargoyle

Вольный перевод статьи о QoS из Gargoyle wiki
Скриншоты и названия пунктов меню приведены на примере прошивки 1.10.0

Введение

Это не пошаговая инструкция по настройке QoS. Я не знаю, как написать такую инструкцию, поэтому напишу о принципах работы QoS. Надеюсь, что эта небольшая крупица знаний о QoS поможет вам решить поставленные задачи. Здесь много написано, потому что QoS довольно сложен. Ниже постараюсь изложить необходимый, на мой взгляд, минимум.

Самое простое, что можно сделать - использовать настройки QoS по умолчанию. QoS будет следить за тем, чтобы все устройства, подключенные к вашей локальной сети, использовали канал связи поровну. Эти настройки также установят повышенный приоритет просмотру веб-страниц, по сравнению с любой другой деятельностью в интернет (торренты, email, FTP и т.д.) Чтобы использовать настройки по умолчанию, вам необходимо измерить скорость вашего подключения к интернет. Это можно сделать при помощи Speedtest или Яндекс.Интернетометр, причем перед запуском теста убедитесь, что никто другой в данный момент не использует ваш интернет-канал и на своем компьютере выключите все программы, использующие интернет (Skype, uTorrent и т.д.). Лучше запустить тест дважды. Запишите полученные значения скорости входящего и исходящего соединения. Если запускали тест дважды, то запишите МИНИМАЛЬНОЕ полученное значение и для скорости входящего соединения, и для скорости исходящего соединения. Не перепутайте байты и биты, кило- и мегабиты.

Тепрь в веб-интерфейсе Gargoyle заходите во вкладку "Firewall", затем в "QoS (Upload)" и там ставите галку напротив "Enable Quality of Service (Upload Direction)"

QoS upload

Проматываем страницу вниз, в поле "Total (Upload) Bandwidth" вписываем 95% от полученного значения скорости исходящего соединения и жмем "Save Changes"

QoS upload

Теперь переходим во вкладку QoS (Download) и ставим галку напротив "Enable Quality of Service (Download Direction)"

QoS download

Проматываем страницу ниже и в поле "Total Download Bandwidth" вписываем скорость своего входящего соединения.
Мотаем в самый низ, ставим галку напротив "Enable active congestions control (Download Direction)" и жмем "Save Changes"

QoS download

Всё. На этом настройка QoS по умолчанию закончена. Ленивым дальше читать необязательно.

Ну а те, кто хочет узнать больше о том, как работает QoS и что можно с этим делать, читайте дальше.

QoS (Quality of Service - "качество обслуживания", если переводить дословно) - это всего лишь название технологии, определяющей очерёдность доступа к сети интернет, поэтому используя QoS не обманывайте себя, надеясь на то, что каждый получит высокое качество соединения с интернет.

Начнем с того, что попытаемся понять, когда QoS может быть нам полезен. Если вы и так довольны качеством интернет-соединения, то вам не нужно использовать QoS и читать дальше. Но, если вы играете в онлайн-игры или используете Skype, то знаете, что когда кто-то еще смотрит видео на YouTube, то у вас увеличиваются пинги и тайм-ауты или качество голоса в Skype резко снижается. Другой пример - если вы запустите torrent, то просматривать страницы в веб-браузере становится некомфортно. Или если вы раздаете интернет друзьям, то некоторые могут жаловаться на низкое качество интернета, в то время как у других будет все в порядке. Если несколько людей, устройств или программ используют один канал связи, то имеет смысл использовать QoS. QoS будет раздавать интернет строго по правилам, которые вы сами и установите.

За всё в этой жизни нужно платить. В случае с QoS платой будет являться уменьшенная скорость работы с интернет. Много усилий было потрачено на уменьшение потери пропускной способности и в данный момент потери составляют порядка 5% скорости. Если не хотите терять 5% скорости соединения - просто не используйте QoS. Но бывают случаи, когда вы спокойно пожертвуете 5% пропускной способности канала, ради получения приоритезированного доступа в интернет.

Попробую провести аналогию - возьмем, например, посадку в самолет. В данном случае сотрудник аэропорта, осуществляющий контроль пассажиров при посадке в самолет является QoS для пассажиров - сначала он пропускает на посадку инвалидов, затем пассажиров, летящих бизнес-классом и лишь потом пассажиров эконом-класса. В этом примере сотрудник аэропорта - маршрутизатор, пассажиры - пакеты данных, которые пытаются проникнуть в самолет - интернет. Когда пассажиры ожидают посадки на борт - такое состояние называется "загруженным", потому что контролер не может пропустить больше одного человека за раз. Из этого примера можно сделать вывод - если нет очереди на посадку, то совершенно не важно, каким классом вы летите - вы тут же пройдете контроль на посадку, т.е. если ваш канал в интернет не загружен, то настройки QoS не имеют никакого значения - пакеты тут же попадают в интернет.

Прежде чем мы расскажем о том, как настроить маршрутизатор, нам нужно обсудить концепцию пакетов, классов и правил. Данные в Ethernet передаются в пакетах. Каждый пакет содержит заголовок, который содержит информацию об источнике, месте назначения, типе и длине. При прохождении по QoS пакет никогда не разбивается - все байты передаются вместе. Пакеты имеют размер от 64 до, примерно, 1500 байт. Правила определяют пакет в какой-либо класс. Зачастую правила анализируют данные только в заголовке пакета, чтобы решить, в какой класс определить пакет. Классы - это то, где пакеты ожидают отправки в интернет. Как долго они будут ждать, зависит от загруженности канала связи и уровня обслуживания, который установлен для класса, к которому принадлежат пакеты. Когда канал связи освобождается, маршрутизатор сверяется с классами, чтобы определить, пакеты какого класса передавать первыми.

Если вы новичок в QoS, я рекомендую вам ввести исходящую и входящую скорость своей линии на вкладках "QoS (Download)" и "QoS (Upload)", остальные настройки оставить по умолчанию и просто поизучать, как это работает. Для этого зайдите во вкладку "Status - Connection List" и обратите внимание на столбец "QoS Up/Down" - здесь можно увидеть работают ли правила QoS или нет. В конфигурации по умолчанию существует правило для 80-го порта. Порт 80 - это порт, используемый веб-браузерами. Если вы откроете веб-браузер и перейдете на какой-нибудь сайт, то заметите, что появилось несколько новых подключений, у которых указан класс "Normal". Это показывает, что правило работает. При написании правил QoS используйте вышеописанный способ, чтобы убедиться, что правило работает так, как вы планировали. Наиболее распространенной ошибкой новичков, является неправильное написание правил и то, что они не проверяют, работают ли их правила надлежащим образом.

Теперь пара слов об отслеживании соединений. Когда ваш компьютер начинает общаться с другим компьютером в Интернете, то происходит отправка и получение большого количества пакетов. Если вы посмотрите на заголовки этих пакетов, то увидите, что они почти идентичны, поскольку тип исходящих и входящих пакетов одинаков. Этот поток пакетов называется "соединением". Соединение начинается, когда первый пакет отправляется, а заканчивается, когда пакеты больше не отправляются. Чтобы узнать больше о отслеживании соединений - погуглите. В интернете предостаточно информации по этой теме.

В правилах могут описываться следующие критерии совпадения пакетов: содержимое заголовка, количество байт, протокол приложения (Layer7). Написание правил является самой тяжелой частью QoS. К сожалению, способов, которыми мы наверняка можем классифицировать данные, не так уж много и часто вам будет не хватать этих способов.

Пример использования QoS

Начнем с примера, в котором мы хотим, чтобы определенный компьютер в вашей локальной сети имел более высокий приоритет доступа к Интернету, нежели остальные компьютеры в классе Normal. Во-первых, у нас есть только один способ определить конкретный компьютер, а именно его IP-адрес. Чтобы гарантировать, что этот компьютер всегда получает один и тот же IP-адрес, мы переходим во вкладку "Connection - DHCP" и присваиваем ему статический IP-адрес на основе MAC-адреса этого компьютера. Теперь каждый раз, когда этот компьютер будет запрашивать у маршрутизатора IP-адрес, маршрутизатор будет выдавать ему один и тот же IP-адрес. Теперь мы можем написать правило, используя IP-адрес, зная, что он будет неизменным у этого компьютера. Когда этот компьютер отправляет пакет в Интернет, IP-адресом источника (Source) будет этот IP-адрес. Когда ответ приходит из Интернета, то этот IP-адрес будет адресом назначения (Destination). Значит, на вкладке "Firewall - QoS Download" мы будем использовать этот IP как адрес назначения (Destination), а на вкладке "Firewall - QoS Upload" мы будем использовать этот IP как адрес источника (Source). Это очень важный момент и он часто является причиной ошибок в написании правил.

По такому же принципу можно создавать правила для определенных портов, которые являются еще одним способом классификации пакетов.

Совпадения

Совпадение IP-адреса

Этот случай был подробно описан выше. На вкладке "Firewall - QoS Download" обычно мы прописываем IP-адрес назначения (Destination), а на вкладке "Firewall - QoS Upload" - IP-адрес источника (Source). Использование IP-адреса источника (Source) на вкладке "Firewall - QoS Download" проблематично, потому что мы обычно не знаем адрес сервера, к которому мы обращаемся. IP-адреса могут быть указаны как по одному, так и подсетью (например, 192.168.1.8/30). Если хотите узнать о подсетях побольше, то снова предложу вам погуглить.

Совпадение номера порта

Если вы знаете номер порта, который использует приложение, то это можно эффективно использовать для написания правила. Чаще всего используют порты 80 и 443 - это порты, которые использует веб-браузер. К сожалению, многие программы используют диапазоны портов или вообще случайные порты. У некоторых приложений в настройках, можно назначить определенный порт. Тогда можно будет написать правило, прописав указанный порт. Но если у приложения нет таких настроек, то у вас не получится написать правило, указав номер порта. Можно указать диапазоны портов, разделяя минимальные и максимальные номера портов знаком "-" (например, 20000-21000).

Совпадение длины пакета

Можно писать правила, указывая длину пакета. Если вы укажете максимальную длину пакета (Maximum Packet Length), то под это правило будут попадать все пакеты, у которых длина меньше, указанной в правиле. Если вы укажете минимальную длину пакета (Minimum Packet Length), то под это правило будут попадать все пакеты, у которых длина больше, указанной в правиле.
Что в оригинале имелось в виду в предложении "One use of this would be match on 'ACK' packets. These packets are typically 64 bytes long and while other packets may also be 64 bytes long you can get pretty good selection in this manner" я так и не понял. Далее по тексту курсивом будут выделены части статьи, которые я не смог перевести. Если кто-нибудь окажет помощь в данном вопросе - буду премного благодарен.

Совпадение протокола

Пакеты вашей локальной сети могут принадлежать к ICMP, TCP или UDP протоколу. Часто онлайн-игры используют UDP-пакеты для уменьшения задержек. Этим можно воспользоваться, чтоб дать онлайн-игре приоритет над другими программами.

Совпадение пакетов только если определенное количество байт было передано через определенное соединение (connection-bytes)

Можно изменить класс пакета, как только соединение, к которому принадлежит этот пакет, накопило определенное количество переданных байт. В данном случае мы присваиваем класс не по длине отдельных пакетов, а смотрим на общее количество переданных байт в одном соединении. Например, если пользователь просматривал видео, количество байт в соединении быстро накапливается, даже если каждый пакет имеет размер всего 1500 байт. Установив определенный порог, вы можете изменить класс данных, проходящих через соединение. Например, в загруженной локальной сети пользователь сможет быстро загрузить первую часть видео до того, как маршрутизатор изменит класс соединения, и скорость этого пользователя будет снижена. Этот способ называется "Speedboost", и его нередко используют интернет-провайдеры. "Speedboost" в этом случае является типом QoS, реализованным интернет-провайдером.

Можно предположить, что "connection-bytes" будет хорошим способом выделить в отдельный класс торренты, но используя этот способ необходимо быть осторожным - администраторы сетей пытаются поделить полосу пропускания между всеми клиентами поровну, а авторы программ пытаются обойти ограничения пропускной способности и блоки портов, чтобы их программы работали быстрее. Поэтому, если производительность соединения сильно ухудшается, то приложение просто закрывает это соединение и открывает новое. Возможно, получится улучшить работу сети, используя "connection-bytes", но только если не сильно снижать скорость торрентов.

Совпадение протокола приложения (Layer7)

В данном случае просматриваются данные (а не только заголовок) первых нескольких пакетов, передаваемых через соединение. Просматривая эти данные, можно определить какое именно приложение отправило эти данные и отнести их к нужному классу. Проблема в том, что приложения постоянно меняют типы отправленных данных, что затрудняет сопоставление шаблонов. Вдобавок постоянно увеличивается количество зашифрованных данных проходящих через маршрутизатор и становится понятно, что практически не имеет смысла использовать этот способ. Я не рекомендую этот способ и в будущем, возможно, он будет удален из Gargoyle.

Выше мы рассмотрели все способы, которыми можно определить пакеты к классам. Gargoyle позволяет использовать одновременно несколько способов, чтобы создать более сложные правила. Мы можем выбрать несколько способов для одного правила. Пакет должен соответствовать всем выбранным критериям, чтоб попасть в класс. Можно написать несколько правил. Они читаются маршрутизатором в том порядке, в котором они расположены в списке, сверху вниз. Как только пакет удовлетворяет всем требованиям правила, он тут же определяется в класс. Если пакет не удовлетворил условиям ни одного из правил, то он попадает в класс по умолчанию. В любом случае каждый пакет должен быть определен в класс. Снова напомню, насколько важно проверять написанные правила, просматривать список соединений, чтобы убедиться, что правила работают так, как было запланировано. Вы можете написать любое количество правил - ограничением может стать только производительность вашего маршрутизатора, которая зависит от объема ОЗУ и производительности CPU.

Классы

Как только пакет попал в маршрутизатор, правила QoS решают, что с ним делать. Правила не хранят пакеты, они анализируют их и отправляют в соответствующий класс. А вот классы содержат очередь пакетов, в которой пакет ждет, пока не наступит время его отправки в интернет. Если пакеты с разных IP-адресов попали в один класс, то они все имеют равный приоритет при доступе к интернет.

Процентная доля полосы пропускания (BW)

Это процентная доля пропускной способности канала, которую получит класс, когда канал связи загружен, и в классах находятся пакеты, ожидающие передачи. Когда я использую слово "загружен", это означает, что канал связи полностью занят, и пакеты находятся в очереди в ожидании передачи. Этот принцип работает и для входящей, и для исходящей линии связи. Если канал связи не загружен, то пакет сразу же отправляется без всяких задержек. Таким образом, ограничение ширина полосы пропускания для класса действует только тогда, когда канал загружен. Чтобы узнать, что происходит, когда канал загружен, но не во всех классах есть пакеты, ожидающие отправки, смотрите ниже FAQ 1. Если вы создали классы таким образом, что сумма процентов ширины пропускания всех классов не равна 100%, то Gargoyle пропорционально откорректирует эти значения так, чтобы сумма процентов всех классов равнялась 100%. Процент ширины полосы пропускания класса вводится при редактировании параметров класса (в таблице "Service Classes" кнопка "Edit", справа от названия класса) в поле "Percent Bandwidth At Capacity". Ниже приведены несколько примеров использования регулировки ширины полосы пропускания.

Пример 1 - Интернет соседям

Вы провели себе Интернет, но решили поделиться им с двумя соседями, когда канал связи не загружен. Для этого нам нужно создать два класса - один с 1% BW, другой с 99% BW. Теперь мы используем IP-адреса компьютеров соседей, чтобы направлять их трафик в класс 1%, а трафик с IP-адреса своего компьютера направляем в класс 99%. В этом случае, когда канал связи загружен, вы получите 99% пропускной способности канала, а каждый из двух соседей получит по половине от 1%. Если вы не используете Интернет, но канал связи все еще загружен, то каждый из соседей будет получать по 50% пропускной способности канала, поскольку Gargoyle будет распределять всю доступную пропускную способность канала равномерно между всеми IP-адресами одного класса. Если канал связи не загружен, то все получают столько, сколько им необходимо, потому что общего количества пакетов недостаточно для полной загрузки канала. Если захотите, то можете увеличить BW класса соседей с 1% до величины, которую считаете разумной и приемлемой.

Пример 2 - Всем поровну

В этом примере интернетом пользуются только члены вашей семьи. Платите за него только вы, но когда канал занят, то он распределяется всем поровну. Это простой случай. Необходим только один класс, поскольку Gargoyle и так распределяет пропускную способность поровну между IP-адресами в одном классе. Таким образом, один класс получает 100% BW, а пропускная способность распределяется поровну между всеми активными пользователями. Добиться этого можно просто включив настройку QoS по умолчанию, как было описано в самом начале этой статьи.

Минимальная полоса пропускания (Minimum Bandwidth)

Это полоса пропускания, которая гарантированно будет предоставлена классу. И это не совсем то же самое, что процентная доля пропускной способности канала. При использовании QoS в Gargoyle зачастую необходимо использовать ACC. Эта технология следит за состоянием канала - измеряет скорость и делает корректировки QoS, если провайдер снизил вам скорость. Более подробно об ACC будет написано ниже, на данный момент достаточно сказать, что ACC необходимо использовать, когда какому-нибудь приложению необходима определенная скорость соединения с интернет. Три наиболее распространенных случая, которые мне известны - это онлайн-игры, Skype и потоковое видео (например, YouTube). Если вы используете какие-нибудь из вышеперечисленных или подобных приложений, то необходимо определить потребности этих приложений. Сначала создайте для них правило и класс, используя любые параметры, а затем понаблюдайте за ними в процессе использования - какая скорость им необходима. Затем добавьте к полученному значению небольшой запас (около 10%) и пропишите его в качестве значения минимальной полосы пропускания (в таблице "Service Classes" кнопка "Edit", справа от названия класса) в поле "Bandwidth Minimum". Gargoyle сначала выделяет полосу пропускания для всех классов, у которых указана минимальная полоса пропускания, а потом уже оставшуюся полосу пропускания делит между классами, у которых указана ширина полосы пропускания в процентах, поэтому используйте этот параметр осмысленно. When Gargoyle calculates the percentage bandwidth it includes whatever service it included under the minimum requirement in that calculation. Если канал не загружен, то установка минимальной полосы пропускания никак не повлияет на работу приложения. Если сумма значений минимальной полосы пропускания всех активных классов (которые в данный момент принимают или отправляют пакеты) больше, чем доступная полоса пропускания, то очевидно, что классы не получат минимальной полосы пропускания, прописанной в параметрах класса, а получат пропорционально меньше. Очень желательно избегать таких ситуаций и устанавливать минимальную полосу пропускания только тем приложениям, которым это действительно необходимо.

Максимальная полоса пропускания (Maximum Bandwidth)

Этот параметр устанавливает максимально доступную полосу пропускания для класса, даже если канал абсолютно свободен. This is the only class parameter which is not affected by link saturation.

Уменьшение пинга (Minimize RTT) (присутствует в современных версиях прошивки начиная с v1.5.4)

Этот параметр доступен только на вкладке "QoS Download" и работает только при включенном ACC.

Качество работы некоторых приложений сильно зависит от времени отправки-приема пакета (ping или если быть точным, то - RTT). RTT могут достигать значений в 2-3 секунды при загруженном канале, что является серьезной проблемой, если необходима работа в режиме реального времени. Допустим, вы разговариваете с кем-то по Skype, и потребуется 2 секунды, чтобы собеседник услышал вас и еще 2 секунды, чтобы вы услышали ответ. Поверьте, общаться в таком режиме будет очень неприятно. Gargoyle обеспечивает низкий уровень RTT для активных классов даже при большой загрузке канала. Если включен ACC, пинги будут в районе 150 мс. Если этого достаточно для комфортной работы вашего приложения, то включать параметр "Minimize RTT (ping times) when active" НЕ надо. Если вы включите этот параметр, то пинги уменьшатся примерно до 75 мс, но скорость канала упадет процентов на 25.

Пример 3 - YouTube, онлайн-игры и все остальное

Возьмем среднестатистическую семью - мама смотрит YouTube, в это же время папа с сыном играют в онлайн-игры, а сестра залипает в соцсетях. Для онлайн-игры мы создаем класс с необходимой минимальной полосой пропускания, предварительно посмотрев, какая скорость необходима данной игре. Так же онлайн-играм требуется минимальное значение пинга, поэтому создаем класс "Gaming", для которого устанавливаем минимальную полосу пропускания и включаем параметр "Minimize RTT (ping times) when active". После чего смотрим, какая полоса пропускания нужна маме для просмотра видео на YouTube. Мама огорчается, если ее фильм тормозит, а когда огорчается мама, то плохо становится всей семье, но мы-то знаем, что для просмотра YouTube пинги не имеет никакого значения, поэтому создаем еще один класс "YouTube" с установленной минимальной полосой пропускания, но с выключенным параметром "Minimize RTT (ping times) when active" - теперь мама будет счастлива. Мы написали правила чтоб направить трафик из онлайн-игр и YouTube в соответствующие классы, а весь оставшийся трафик направляем в класс Normal.

Скорость входящего и исходящего соединений (Total Bandwidth)

В самом начале статьи уже был рассмотрен данный вопрос, сейчас хочу сделать пару уточнений.

Иногда провайдер снижает вам скорость исходящего соединения, поэтому приходится заново производить замеры скорости и корректировать значение "Total Upload Bandwidth" во вкладке "QoS (Upload)". Если это будет происходить часто, то данная процедура вам надоест. Но зачастую скорость исходящего соединения достаточно стабильна и хватает однократного измерения.

На вкладке "QoS (Download)" значение, которое вы вводите в поле "Total Download Bandwidth" зависит от того, используете ли вы ACC или нет. Если используете ACC, то вводите значение, которое показали результаты измерения скорости или даже процентов на 10 больше. ACC будет автоматически корректировать фактическое значение скорости в пределах от 12% до 100% от введенного вами значения. Если вы введете сильно завышенное значение (скажем, в два раза), то просто потеряете определенный диапазон корректировки, потому что ACC будет регулировать только от 12% до 50% от вашей реальной скорости. Все значения скорости от 50% до 100% будут выше реальной пропускной способности вашего канала, но QoS по-прежнему будет корректно работать.

Если же вы не используете ACC, то ситуация осложняется. Введите минимальное полученное значение скорости входящего соединения. Но скорость входящего соединения может значительно меняться время от времени, причем на 20% - 80%. И вы не сможете постоянно прописывать актуальные значения скорости. Если вписанное значение скорости будет выше реальной скорости, то QoS просто не будет работать. Если вы установите значение скорости слишком низкое, то будете использовать использовать лишь часть канала. Поэтому крайне желательно использовать ACC, конечно, если вы хотите, чтобы QoS работал.

ACC (Active Congestion Controller)

Для функционирования QoS маршрутизатор должен знать максимальную скорость соединения с интернет. Можете поэкспериментировать с ACC и убедиться в этом. При выключенном ACC, если вы пропишите слишком высокую скорость в поле "Total Download Bandwidth", то QoS перестает работать. Если вы пропишите слишком низкую скорость, то сами себе снизите скорость соединения с интернет. Теоретически, существует абсолютно точное значение скорости соединения с интернет. Если вы сможете найти это значение, и оно постоянно будет одним и тем же, то ACC вам не нужен. Однако в большинстве случаев не существует абсолютно точного значения скорости соединения с интернет, потому что скорость входящего соединения, которую предоставляет ваш провайдер, периодически меняется. Именно в таком случае и пригодится ACC.

ACC постоянно следит за скоростью соединения с интернет и корректирует значение "Total Download Bandwidth". Под понятием "корректирует" имеется в виду, что ACC изменяет значение скорости входящего соединения, которую использует QoS для работы. Значения, которые будет использовать QoS, находятся в пределах между введенным вами значением скорости входящего соединения и 1/8 от этого значения. Это динамический диапазон, поэтому, чтобы максимально использовать диапазон регулировки, важно ввести правильное значение максимальной скорости загрузки, которую предоставляет вам провайдер, но не больше.

Значение скорости входящего соединений, которую вам на самом деле предоставляет ваш провайдер будет постоянно меняться в зависимости от загрузки сети самого провайдера. У вашего провайдера есть свой канал в интернет. И когда этот канал полностью загружен, то провайдер вынужден снижать скорость своим клиентам. ACC отслеживает скорость входящего соединения, измеряя время отправки-приема пакетов (RTT), которые отправляет на шлюз вашего провайдера. Измеряя RTT можно примерно определить количество данных в очереди от провайдера к вашему маршрутизатору. Принцип работы ACC основывается на том, что когда канал загружен, то время RTT (ping) увеличивается. В большинстве случаев так и происходит, но иногда бывают исключения, и тогда ACC не будет работать, и его необходимо отключить.

Давайте подумаем об очереди от провайдера к вашему роутеру. Количество ожидающих в очереди данных будет увеличиваться или уменьшаться в зависимости от нескольких факторов. Критическая точка будет достигнута в тот момент, когда очередь вырастет до такой степени, что больше не сможет принять в себя данные. В этом случае пакет будет отброшен вашим провайдером. Это плохо для QoS. Чтобы QoS нормально функционировал, он сам должен решать, какие пакеты необходимо отбросить. Когда ACC включен, он следит чтобы очередь не переполнялась, и только QoS вашего маршрутизатора отбрасывал пакеты при необходимости. ACC регулирует только длину очереди входящего соединения. Он не может регулировать скорость исходящего соединения. До тех пор, пока в очереди входящего соединения будут находится пакеты, ваш входящий канал будет полностью задействован. ACC необходим как раз для того, чтобы задействовать входящий канал по максимуму, позволяя очереди увеличиваться до необходимой длины, но не до такой, чтоб пакеты были отброшены.

Если очередь не будет пополнятся новыми пакетами, то необходимо около 100 мс, чтобы отправить все имеющиеся пакеты из этой очереди. Это говорит о том, что каждый пакет ожидает отправки из очереди около 100 мс. The affects the round trip time (RTT) of a packet exchange. Например, если я отправлю пинг на компьютер в сети интернет, то ответ будет ждать в этой очереди. Добавим сюда другие накладные расходы, и в итоге мы получим время отправки-приема пакета (RTT) около 150 мс. Для некоторых приложений такое значение RTT неприемлемо. В таких случаях, ACC переключается в другой режим, в котором он уменьшает среднюю длину очереди примерно в два раза. Т.е. значение RTT будет около 75 мс, но это произойдет за счет снижения скорости канала. Когда вы включаете режим "Minimize RTT", то скорость соединения с интернет снижается примерно на 25%, но пинги сокращается наполовину. This is a useful compromise which the ACC will make when a class becomes active which indicates it needs minimum RTTs and is indicated in the status display by the MinRTT mode.

ACC считает класс активным, если этот класс потребляет более 4 Кбит/с.

Для ACC доступны следующие настройки:

Включен или выключен "Enable active congestions control (Download Direction)" - тут пояснения не требуются.

Использовать нестандартную цель ping "Use non-standard ping target": ACC должен получить ответ от компьютера в интернет, чтобы определить текущую загрузку линии. По умолчанию ACC использует в качестве цели шлюз вашего провайдера, но это часто не является хорошим решением и иногда в качестве цели приходится выбирать другой компьютер в интернет. К сожалению, я не могу дать универсальные рекомендации, как правильно найти хорошую цель, поэтому вам придется самостоятельно поэкспериментировать с данной настройкой. Если ACC у вас не работает, то эта настройка - первое, с чем нужно поэкспериментировать. Необходимо помнить, что ACC отслеживает скорость входящего соединения, измеряя время отправки-приема пакетов (RTT), которые отправляет с вашего маршрутизатора на компьютер в сети интернет, поэтому в качестве цели нужно выбрать какой-нибудь компьютер, находящийся в интернет, но не у вашего провайдера. Одной из целей, которую я часто использую - сервер OpenDNS 208.67.222.222, поэтому, если ACC не работает с настройками по умолчанию, то попробуйте этот сервер OpenDNS. Так же оптимальной целью может стать один из серверов между вашим маршрутизатором и вышеуказанным сервером OpenDNS. Чтобы узнать IP-адреса этих серверов можно использовать команду traceroute (если не знаете как - гуглите). Затем, посмотрите на выдачу команды traceroute и выберите тот сервер, у кого первое значение времени ощутимо больше, нежели у предыдущих. Или же экспериментируйте с другими серверами из данного списка (желательно находящийся поближе к вашему маршрутизатору), пока не найдете тот, с которым заработает ACC.

Ограничение времени жизни ping (TTL) "Manually control target ping time": это ограничение времени жизни пинга, значение которого ACC будет использовать при включенном режиме "Minimize RTT". Если вы не включите этот параметр, ACC будет автоматически вычислять и устанавливать время жизни пинга в зависимости от скорости соединения с интернет. Как правило, автоматическое вычисление времени жизни пинга работает хорошо, но если вдруг в вашем случае это значение выбирается неверно, то можно установить его вручную. Обычно это значение находится в пределах от 40 до 90 мс, но можно поэкспериментировать с ним, если включен режим "Minimize RTT".

Производительность маршрутизатора

Чем мощнее процессор вашего маршрутизатора, тем больше данных он может обработать за единицу времени. Почти ничего, из написанного выше, не будет работать, если вы слишком сильно загрузите процессор своего маршрутизатора. Когда процессор маршрутизатора перегружен, то на вкладке "Status - Overview" значение "CPU Load Averages" будет "1.00 / 1.00 / 1.00" и с маршрутизацией начнет происходить всякая НЁХ.

Обычно это происходит при скоростях от 10 Мбит/с и до 500 Мбит/с - в зависимости от мощности вашего маршрутизатора и функций Gargoyle, которые вы используете. Чтобы использовать Gargoyle, необходимо уменьшить значения "Total Bandwidth" на вкладках "Total (Upload) Bandwidth" и "QoS (Download)" до такой степени, чтоб загрузка процессора никогда не приближалась к значению "1.00" даже при максимальной нагрузке.

Мониторинг полосы пропускания и QoS - это две функции, которые сильно нагружают процессор маршрутизатора. Если вы их отключите, то существенно разгрузите процессор, но, также потеряете многие функции, которые вам может предоставить Gargoyle.

Не жалуйтесь на форуме Gargoyle, что с родной прошивкой ваш маршрутизатор работает быстрее, нежели с прошивкой Gargoyle. С Gargoyle вы получаете стабильность и множество функций, которых так не хватает в родной прошивке. Если не можете получить желаемую скорость - купите маршрутизатор пошустрее.

FAQs

Как распределяется скорость канала, если некоторые классы неактивны

В. У меня есть три класса с 15, 35 и 60% от пропускной способности канала. Как будет распределяться пропускная способность канала, если активны только первые два класса, и канал полностью загружен данными этих классов?

О. Если канал загружен, то он делится в соответствии с процентами активных классов. В вашем случае это будет выглядеть следующим образом - 15 / (15 + 35) = 30% и 35 / (35 + 15) = 70%

Как происходит распределение полосы пропускания между IP-адресами?

В. У меня есть данные с нескольких компьютеров, направленных в один класс. Как распределяется полоса пропускания, выделенная классу между компьютерами?

О. До Gargoyle версии 1.5.4 это никак не контролировалось и распределялось непредсказуемо. Начиная с Gargoyle версии 1.5.4, полоса пропускания распределяется поровну между всеми IP-адресами одного класса. Это значительно упрощает настройку QoS для больших локальных сетей. Например, если вы хотите, чтобы все компьютеры в вашей сети имели одинаковую пропускную способность, вам нужно создать класс по умолчанию, удалить все правила, которые вы создали, и включить QoS. Для деления полосы пропускания поровну между IP-адресами в классе не требуется никаких настроек. Также эту функцию невозможно отключить. Если вы хотите, чтобы определенному IP были предоставлены особые привилегии, то необходимо сделать для него специальные классы и правила.

Включение режима уменьшения пинга (Minimize RTT)

В. Есть идея - включить режим "Minimize RTT" для всех моих классов, ведь минимальное время отклика - это хорошо?

О. Минимальное время отклика - хорошо, но за минимальные пинги вы заплатите снижением пропускной способности канала. The reason for this is the same reason we have lines everywhere in our lives. Если вы пойдете в банк, то получить минимальное RTT (то есть получить деньги и тут же выйти из банка), возможно только двумя способами - или перед вами в очереди никого не будет, или президент банка, увидев вас, выйдет и проведет к кассе без очереди. Это будет нечестно по отношению к другим клиентам, но это же QoS.

In the case of the WAN down link there is no way to re-order packets that are queued to travel over the WAN downlink so we are left with keeping the line short as the only means

Использование MAC-адреса при создании правил

В. Я хочу использовать MAC-адреса при создании правил - так будет легче. Почему вы не предусмотрели такую возможность?

О. QoS не имеет доступа к MAC-адресам устройств. В архитектуре маршрутизации Linux эта информация удаляется из пакетов до того, как они попадают в QoS. Эту проблему можно решить, назначив фиксированный IP-адрес устройству с соответствующим MAC-адресом и написав правило для этого IP-адреса.

QoS для трафика между компьютерами

В. Я хочу использовать QoS для трафика между компьютерами в локальной сети. Как это можно реализовать?

О. Никак. QoS работает только с трафиком между маршрутизатором и провайдером. В большинстве маршрутизаторов трафик между компьютерами локальной сети обрабатывается сетевым коммутатором (switch) аппаратно и поэтому прошивка маршрутизатора не имеет доступа к этому трафику. Это связано с тем, что скорость передачи данных внутри локальной сети гораздо выше, чем из локальной сети в интернет. Ну а так как QoS не видит этот трафика, то и ничего не может с ним сделать. Это относится и к WiFi-трафику. QoS ничем не поможет, если перегружен радиоканал. Я рекомендую серьезным игрокам использовать проводное соединение между их приставкой или компьютером и маршрутизатором, чтобы избежать непредсказуемых задержек на радиоканале.

Количество правил и классов

В. Сколько правил и классов я могу создать?

О. Вы ограничены только мощностью процессора и объемом оперативной памяти маршрутизатора. Я не знаю технических характеристик вашего маршрутизатора, но скорее всего их хватит для обработки любого разумного количества правил и классов. Предполагаю, что теоретический предел количества правил - порядка нескольких тысяч, а то и миллионов. Теоретический предел количества классов - 125 для загрузки и еще 125 - для выгрузки.

Создание класса с повышенным приоритетом.

В. Хочу создать специальный класс с повышенным приоритетом над другими классами. Как это сделать?

О. В Gargoyle мы используем концепцию распределения полосы пропускания, а не концепцию "приоритета". Слово "приоритет" неоднозначно по смыслу. Вы хотите чтобы пакеты класса с повышенным приоритетом всегда передавались перед пакетами классов с более низким приоритетом? Этого можно добиться, установив значение минимальной полосы пропускания (Minimum Bandwidth) равным скорости вашего соединения с интернет для приоритетного класса, для остальных классов установите значение этого параметра равным нулю. Вообще, концепции Gargoyle "процентная доля полосы пропускания", "минимальная полоса пропускания" и "максимальная полоса пропускания" более гибкие, поэтому советую вам подумать о своей проблеме используя эти концепции и отказаться от концепции "приоритет".

QoS не работает

В. QoS не работает, что я делаю не так?

О. Судя по длине этой статьи, QoS - непростая штука, а значит существует много вещей, которые вы могли сделать неправильно. Для начала, рекомендую проверить - попадают ли пакеты в нужный класс. Если с этим все в порядке, то посмотрите, не перегружен ли процессор маршрутизатора. Попробуйте выключить ACC и установить скорость соединения с интернет ​​на 50% от фактической скорости. Если все заработало, значит правила и классы работают корректно. Пробуйте повысить скорость и включить ACC.

ACC ограничивает скорость моего соединения с интернет

В. Почему ACC ограничивает скорость моего соединения с интернет? Когда выключаю ACC - скорость повышается.

О. ACC lowers your link limit until the filtered ping time falls under the target ping times. So if your link limits is being lowered either your ISP performance has dropped (the usual case) or your target ping time is too aggressive.

Распространенные заблуждения

QoS не может управлять скоростью входящего соединения

Заблуждение: QoS не может управлять скоростью загрузки, потому что маршрутизатор не может остановить передачу данных из интернет.

Опровержение: Ерунда. Может. И управляет.

Я не хочу, чтоб маршрутизатор отбрасывал пакеты

Заблуждение: Я не хочу, чтоб маршрутизатор отбрасывал пакеты, пришедшие из интернет - это будет пустой тратой полосы пропускания.

Опровержение: Отбрасывание пакетов является основным принципом работы интернет. Это единственный способ, с помощью которого можно сообщить отправителю пакетов, что скорость соединения необходимо снизить. Пакеты удаляются в любом соединении. Вопрос только в том, как долго маршрутизатор будет их отбрасывать. При отбрасывании пакетов теряется максимум пара процентов пропускной способности канала.

Мне не нужен QoS, потому что у меня очень быстрый канал

Заблуждение: У меня очень быстрый интернет - 100500 Мбит/с. Мне не нужен QoS.

Опровержение: Скорость вашего интернет-соединения не имеет ничего общего с вашей потребностью в QoS. Вы можете полностью загрузить канал, потому что даже один ПК может загружать данные со скоростью 100 Мбит/с. В каких случаях необходим QoS - написано в начале данной статьи. То есть в тех случаях, когда вы хотите поделить определенным образом пропускную способность канала между участниками своей локальной сети или между приложениями.

Мой провайдер использует технологию X, поэтому мне не нужен QoS

Заблуждение: Мой провайдер использует технологию (вставьте сюда название технологии, по которой вы подключены к интернет). У меня абсолютно стабильная скорость подключения к интернет, поэтому мне не нужен ACC.

Опровержение: Ваша потребность в ACC не имеет ничего общего с качеством вашего интернет-соединения. Поверьте, все провайдеры урезают канал своим клиентам при необходимости. Просто представьте себя на месте провайдера. У вас есть 10000 клиентов, у каждого из которых установлен модем со скоростью 20 Мбит/с. Ваш канал в интернет - 1 Гбит/с. Прикинем - 10000 клиентов умножим 20 Мбит/с и разделим на 1 Гбит/с получится 200, т.е. ваши клиенты могут скачать в 200 раз больше, чем вы можете им предоставить! И если все они начнут качать новую серию "Игры престолов", то вам не останется ничего другого, кроме как урезать им канал.

Когда я включаю ACC, он реально снижает скорость загрузки

Заблуждение: Когда я включаю ACC, он реально снижает скорость загрузки.

Опровержение: The ACC manages the download link limit. Do not confuse the link limit with your actual link load. This link limit has no effect on you unless your load is actually the same as the limit. When these two are the same it means your WAN link is getting congested and simply cannot go any faster. The ACC also does not become active unless there is enough load to warrant it. You should also be aware that the ACC reacts slowly to changes in your ISPs performance so sudden burst of download data (like some DSL speed test programs use) will not move the link limit much.

'ACK' packets are special I want them treated with higher priority

Statement: It’s necessary to handle ‘ACK’ packets with special ‘priority’ so my uplink does not affect my downlink when I am using HTTP.

Rebuttal: It is not necessary to handle ACK packets different than other packets. As with all packets you need to think about how to allocate WAN resource for them. ACK packets are typically around 54 bytes long and the maximum packets around 1500 bytes. This ratio is 54/1500 = 3.6%. Any class which includes TCP traffic in the download needs a matching upload class that has allocation greater than 3.6% of the download bandwidth in bps. Many WAN links are asymmetrical in that the download is much faster than the upload so this affects the calculation.

Example: On a 10Mbps down/1Mbps up link we want HTTP traffic to consume 50% of the WAN down link when saturated. Let’s say our HTTP traffic is routed into the Normal class on both upload and download. The %BW in the download Normal class is simply 50%. On the uplink we must account for the fact that the link is asymmetrical so we allocate 3.6% * 10Mbps/1Mbps = 36% to the Normal class in the uplink. With this setup if either the uplink or downlink is saturated the HTTP traffic will be allocated not less than 5Mbps in the downlink.

Когда я использую QoS, пинги увеличиваются

Заблуждение: Я не использую QoS, потому что он увеличивает время пинга и я проигрываю в онлайн-игры. Мне нужно реально хорошее время пинга, чтобы не проигрывать.

Опровержение: QoS не виноват в плохих пингах. Если ваш канал не загружен, то пакеты будут задерживаться в маршрутизаторе не более чем на 1 мс. Если ваш канал загружен и правила написаны неправильно, то, возможно, время пинга увеличится до 150 мс. Проверьте свои правила, и убедитесь, что игровой трафик попадает в нужный класс и что этот класс не перегружен.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *