Как использовать QoS для обеспечения качества доступа в интернет. Как правильно настроить qos в роутере


Как использовать QoS для обеспечения качества доступа в интернет

01.12.2016 | Владимир Хазов

qos

*-По материалам www.howtogeek.com

Не весь интернет-трафик одинаково важен. Онлайн-видео без замираний картинки или звонок по Skype без заикания голоса важнее, чем загрузка большого файла с помощью торрент-клиента. Функция обеспечения качества обслуживания (QoS) маршрутизатора, шейпера или системы глубокого анализа трафика (DPI) позволяет расставлять приоритеты, какой трафик важнее, и предоставлять ему большую часть полосы пропускания.

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

Что такое качество обслуживания (QoS)

Функция обеспечения качества обслуживания – отличный, но редко используемый инструмент, с помощью которого можно определять приоритеты для различных видов трафика, а с помощью систем DPI даже для определенных приложений, деля между ними полосу пропускания в разных пропорциях. Правильная настройка правил QoS обеспечит гладкое проигрывание онлайн-видео, в то время как загружается большой файл, или быстрый веб-браузинг, пока дети играют в онлайн-игры.

Подключение к интернету можно сравнить с больницей, в которой полоса пропускания – это число врачей для лечения пациентов, больные являются приложениями, а медсестра – маршрутизатором, который их распределяет.

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

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

Маршрутизатор делит полосу поровну между всеми, не выделяя приоритета какому-либо виду трафика.

36-02-qos

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

В сети с функцией качества обслуживания приоритет будет у того приложения или сервиса, который вы самостоятельно определите (онлайн-видео, IPTV, онлайновые игры и т. п.), оно получит большую скорость и минимальные задержки.

Как включить QoS

Существуют сотни различных маршрутизаторов –домашних и офисных, а также сложных устройств операторского класса. Не каждый из них имеет функцию QoS, а если имеет, то ее реализация может отличаться по спектру возможных настроек. Некоторые могут определять только приоритет между устройствами, некоторые – выделять определенные типы трафика (например, видео или голосовую связь), системы DPI способны распознать приложения, не использующие для обмена данными заранее известные заголовки и структуры данных, вносить изменения в поле приоритета проходящих через него пакетов для дальнейшего применения правил QoS.

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

Первый шаг: определить цель

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

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

Оператор связи использует QoS для достижения более глобальных целей:

  • дифференцирование трафика;
  • обеспечение равномерного потока трафика;
  • гарантия качества и скорости доступа в интернет для каждого абонента;
  • предотвращение сетевых перегрузок;
  • уменьшение затрат на Uplink.

Но принципы их достижения схожи с домашней сетью: определение приоритетных видов трафика и приложений, настройка правил в зависимости от приоритета и времени действия.

Второй шаг: определить скорость интернета

Для оператора связи скорость интернета – это скорость доступа к вышестоящему провайдеру (Uplink) или к нескольким провайдерам. Эта величина фиксированная и распределяется между всеми абонентами согласно их тарифным планам. Задачу ее оптимизации и грамотного распределения должны решать правила QoS для обеспечения удовлетворенности клиента от получаемой услуги.

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

Чтобы получить реальную картину, вам необходимо закрыть на компьютере все приложения, которые создают нагрузку на сеть, подключить его к роутеру медным кабелем. Технология беспроводной сети Wi-Fi, особенно если она работает не по современным протоколам Wireless N или Wireless AC, может быть узким местом полосы пропускания. Измерения могут показать скорость в 40 Мб/с вместо доступных 75 Мб/с именно из-за ограничений скорости беспроводной передачи данных.

Зайдите на сайт www.speedtest.net и нажмите кнопку «Начать проверку». Полученный результат необходимо перевести из «Мбит/с» в «Кбит/с», так как настройки QoS чаще всего задаются в этих единицах. Это можно сделать, умножив полученные значения на 1000.

36-02-test

В данном примере мы получили входящую скорость 42 900 Кбит/с, а исходящую – 3980 Кбит/с. Именно эти значения можно распределять между пользователями и приложениями в сети.

Третий шаг: включить QoS на роутере 

Невозможно описать порядок включения QoS на всех роутерах, так как каждый производитель предоставляет пользователю свой интерфейс управления, а сетевые устройства операторского класса, такие как Cisco, Juniper, Huawei, настраиваются из командной строки.

В большинстве случаев вам потребуется зайти на страницу управления устройством (набрать в браузере его адрес, чаще всего это 192.168.1.1), ввести логин и пароль администратора, которые указаны в руководстве пользователя, и перейти в раздел NAT сетевых настроек, вкладку QoS. Выберите Enable напротив функции Start QoS, порт для применения правил – WAN (порт соединения с провайдером), настройки входящей и исходящей скорости (downlink и uplink) должны указываться в размере 85–90 % от измеренной во втором шаге.

36-04

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

Как приоритизировать трафик

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

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

36-05-asus

Если же роутер позволяет производить ручные настройки приоритетов, вам необходимо задать их «вилки» в процентах от общей полосы пропускания:

  • Maximum: 60–100 %
  • Premium: 25–100 %
  • Express: 10–100 %
  • Standard: 5–100 %
  • Bulk: 1–100 %

Эти параметры определяют значение пропускной способности для конкретного устройства или приложения. Например, установив для приложения Maximum, вы назначаете ему использовать 60 % от полосы пропускания во время загрузки сети и 100 %, если сеть полностью доступна. Если установить «Магистральный», то, когда сеть свободна, приложение может использовать любую скорость полосы пропускания, но, если появляется нагрузка, оно получит лишь 1 %.

Хотим напомнить, что к приоритизации надо подходить с четким пониманием того, что вы хотите ограничить.

Варианты приоритизации

36-06-prior

1. Приоритет сервиса или приложения

Позволяет для любого устройства в сети назначить приоритет пропускной способности определенного приложения или сервиса перед остальными. Например, если необходимо, чтобы у приложения Skype всегда была выделенная полоса пропускания, и видеоаудиосвязь не имели задержек, искажений или артефактов.

2. Приоритет интерфейса

Интерфейс в данном случае – это метод, по которому ваши устройства подключаются к сети. Вы можете настроить более высокий приоритет устройствам, которые подключаются по проводу, или устройствам беспроводной сети, или, наоборот, уменьшить приоритет гостевых устройств.

3. Приоритет устройств по IP-адресу

Вы можете назначить более высокий приоритет определенному устройству вашей сети по его IP-адресу (статическому или зарезервированному динамическому), тем самым обеспечить его более высокой скоростью доступа по сравнению с другими.

4. Приоритет устройств по MAC-адресу

Если вы используете динамическую адресацию, вы все равно можете назначить высокий приоритет одному из устройств сети по его MAC-адресу, который является уникальным и сведения о котором можно получить либо из программного обеспечения, либо из этикетки на корпусе.

Тест и оценка

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

Убедиться в правильности работы правил можно запустив сервисы с высоким и низким приоритетом и сравнив их скорости, или запустить speedtest на устройствах сети с разными приоритетами и посмотреть, которое из них покажет больший результат.

Настройка QoS – более сложный процесс, чем базовая настройка роутера, а для оператора связи еще и дополнительные капитальные затраты для покупки платформы DPI, однако и результат позволит добиться более качественного доступа к сети Интернет, а также сэкономить финансы на покупке высокоскоростного канала связи.

Подписывайтесь на рассылку новостей блога, чтобы не пропустить новые материалы.

Поделиться в социальных сетях

vasexperts.ru

Настройка 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 мс. Проверьте свои правила, и убедитесь, что игровой трафик попадает в нужный класс и что этот класс не перегружен.

any-key.net

Защищаемся маршрутизатором: QoS / Хабрахабр

QoS — тема большая. Прежде чем рассказывать про тонкости настроек и различные подходы в применении правил обработки трафика, имеет смысл напомнить, что такое вообще QoS.

Quality of Service (QoS) — технология предоставления различным классам трафика различных приоритетов в обслуживании.

Во-первых, легко понять, что любая приоритезация имеет смысл только в том случае, когда возникает очередь на обслуживание. Именно там, в очереди, можно «проскользнуть» первым, используя своё право. Очередь же образуется там, где узко (обычно такие места называются «бутылочным горлышком», bottle-neck). Типичное «горлышко» — выход в Интернет офиса, где компьютеры, подключенные к сети как минимум на скорости 100 Мбит/сек, все используют канал к провайдеру, который редко превышает 100 МБит/сек, а часто составляет мизерные 1-2-10МБит/сек. На всех.

Во-вторых, QoS не панацея: если «горлышко» уж слишком узкое, то часто переполняется физический буфер интерфейса, куда помещаются все пакеты, собирающиеся выйти через этот интерфейс. И тогда новопришедшие пакеты будут уничтожены, даже если они сверхнужные. Поэтому, если очередь на интерфейсе в среднем превышает 20% от максимального своего размера (на маршрутизаторах cisco максимальный размер очереди составляет как правило 128-256 пакетов), есть повод крепко задуматься над дизайном своей сети, проложить дополнительные маршруты или расширить полосу до провайдера.

Разберемся с составными элементами технологии

(дальше под катом, много)Маркировка. В полях заголовков различных сетевых протоколов (Ethernet, IP, ATM, MPLS и др.) присутствуют специальные поля, выделенные для маркирования трафика. Маркировать же трафик нужно для последующей более простой обработки в очередях.

Ethernet. Поле Class of Service (CoS) — 3 бита. Позволяет разделить трафик на 8 потоков с различной маркировкой

IP. Есть 2 стандарта: старый и новый. В старом было поле ToS (8 бит), из которого в свою очередь выделялись 3 бита под названием IP Precedence. Это поле копировалось в поле CoS Ethernet заголовка. Позднее был определен новый стандарт. Поле ToS было переименовано в DiffServ, и дополнительно выделено 6 бит для поля Differencial Service Code Point (DSCP), в котором можно передавать требуемые для данного типа трафика параметры.

Маркировать данные лучше всего ближе к источнику этих данных. По этой причине большинство IP-телефонов самостоятельно добавляют в IP-заголовок голосовых пакетов поле DSCP = EF или CS5. Многие приложения также маркируют трафик самостоятельно в надежде, что их пакеты будут обработаны приоритетно. Например, этим «грешат» пиринговые сети.

Очереди.

Даже если мы не используем никаких технологий приоритезации, это не значит, что не возникает очередей. В узком месте очередь возникнет в любом случае и будет предоставлять стандартный механизм FIFO (First In First Out). Такая очередь, очевидно, позволит не уничтожать пакеты сразу, сохраняя их до отправки в буфере, но никаких преференций, скажем, голосовому трафику не предоставит.

Если хочется предоставить некоторому выделенному классу абсолютный приоритет (т.е. пакеты из этого класса всегда будут обрабатываться первыми), то такая технология называется Priority queuing. Все пакеты, находящиеся в физическом исходящем буфере интерфейса будут разделены на 2 логических очереди и пакеты из привилегированной очереди будут отсылаться, пока она не опустеет. Только после этого начнут передаваться пакеты из второй очереди. Эта технология простая, довольно грубая, её можно считать устаревшей, т.к. обработка неприоритетного трафика будет постоянно останавливаться. На маршрутизаторах cisco можно создать 4 очереди с разными приоритетами. В них соблюдается строгая иерархия: пакеты из менее привилегированных очередей не будут обслуживаться до тех пор, пока не опустеют все очереди с более высоким приоритетом.

Справедливая очередь (Fair Queuing). Технология, которая позволяет каждому классу трафика предоставить одинаковые права. Как правило не используется, т.к. мало даёт с точки зрения улучшения качества сервиса.

Взвешенная справедливая очередь (Weighted Fair Queuing, WFQ). Технология, которая предоставляет разным классам трафика разные права (можно сказать, что «вес» у разных очередей разный), но одновременно обслуживает все очереди. «На пальцах» это выглядит так: все пакеты делятся на логические очереди, используя в качестве критерия поле IP Precedence. Это же поле задаёт и приоритет (чем больше, тем лучше). Дальше, маршрутизатор вычисляет, пакет из какой очереди «быстрее» передать и передаёт именно его.

image

Считает он это по формуле:

dT=(t(i)-t(0))/(1+IPP)

IPP — значение поля IP Precedence t(i) — Время, требуемое на реальную передачу пакета интерфейсом. Можно вычислить, как L/Speed, где L — длина пакета, а Speed — скорость передачи интерфейса

Такая очередь по умолчанию включена на всех интерфейсах маршрутизаторов cisco, кроме интерфейсов точка-точка (инкапсуляция HDLC или РРР).

WFQ имеет ряд минусов: такая очередизация использует уже отмаркированные ранее пакеты, и не позволяет самостоятельно определять классы трафика и выделяемую полосу. Мало того, как правило уже никто не маркирует полем IP Precedence, поэтому пакеты идут немаркированные, т.е. все попадают в одну очередь.

Развитием WFQ стала взвешенная справедливая очередь, основанная на классах (Class-Based Weighted Fair Queuing, CBWFQ). В этой очереди администратор сам задаёт классы трафика, следуя различным критериям, например, используя ACL, как шаблон или анализируя заголовки протоколов (см.NBAR). Далее, для этих классов определяется «вес» и пакеты их очередей обслуживаются, соразмерно весу (больше вес — больше пакетов из этой очереди уйдёт в единицу времени)

Но такая очередь не обеспечивает строгого пропускания наиболее важных пакетов (как правило голосовых или пакетов других интерактивных приложений). Поэтому появился гибрид Priority и Class-Based Weighted Fair Queuing — PQ-CBWFQ, также известный как, Low Latency Queuing (LLQ). В этой технологии можно задать до 4х приоритетных очередей, остальные классы обслуживать по механизму CBWFQ

LLQ — наиболее удобный, гибкий и часто используемый механизм. Но он требует настройки классов, настройки политики и применения политики на интерфейсе.

Подробнее о настройках расскажу дальше.

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

Технология QoS — достаточно ресурсоёмкая и весьма существенно грузит процессор. И тем сильнее грузит, чем глубже в заголовки приходится залезать для классификации пакетов. Для сравнения: маршрутизатору гораздо проще заглянуть в заголовок IP пакета и проанализировать там 3 бита IPP, нежели раскручивать поток практически до уровня приложения, определяя, что за протокол идёт внутри (технология NBAR)

Для упрощения дальнейшей обработки трафика, а также для создания так называемой «области доверия» (trusted boundary), где мы верим всем заголовкам, относящимся к QoS, мы можем делать следующее: 1. На коммутаторах и маршрутизаторах уровня доступа (близко к клиентским машинам) ловить пакеты, раскидывать их по классам 2.В политике качестве действия перекрашивать заголовки по-своему или переносить значения QoS-заголовков более высокого уровня на нижние.

Например, на маршрутизаторе ловим все пакеты из гостевого WiFi домена (предполагаем, что там могут быть не управляемые нами компьютеры и софт, который может использовать нестандартные QoS-заголовки), меняем любые заголовки IP на дефолтные, сопоставляем заголовкам 3 уровня (DSCP) заголовки канального уровня (CoS), чтобы дальше и коммутаторы могли эффективно приоритезировать трафик, используя только метку канального уровня.

Настройка LLQ

Настройка очередей заключается в настройке классов, затем для этих классов надо определить параметры полосы пропускания и применить всю созданную конструкцию на интерфейс.

Создание классов:

class-map NAME match?

access-group Access groupany Any packetsclass-map Class mapcos IEEE 802.1Q/ISL class of service/user priority valuesdestination-address Destination addressdiscard-class Discard behavior identifierdscp Match DSCP in IP(v4) and IPv6 packetsflow Flow based QoS parametersfr-de Match on Frame-relay DE bit fr-dlci Match on fr-dlci input-interface Select an input interface to matchip IP specific valuesmpls Multi Protocol Label Switching specific valuesnot Negate this match resultpacket Layer 3 Packet lengthprecedence Match Precedence in IP(v4) and IPv6 packetsprotocol Protocolqos-group Qos-groupsource-address Source addressvlan VLANs to match

Пакеты в классы можно рассортировывать по различным атрибутам, например, указывая ACL, как шаблон, либо по полю DSCP, либо выделяя конкретный протокол (включается технология NBAR)

Создание политики:

policy-map POLICY class NAME1 ?

bandwidth Bandwidthcompression Activate Compressiondrop Drop all packetslog Log IPv4 and ARP packetsnetflow-sampler NetFlow actionpolice Policepriority Strict Scheduling Priority for this Classqueue-limit Queue Max Threshold for Tail Droprandom-detect Enable Random Early Detection as drop policyservice-policy Configure Flow Nextset Set QoS valuesshape Traffic Shaping

Для каждого класса в политике можно либо выделить приритетно кусок полосы:

policy-map POLICY class NAME1 priority?

[8-2000000] Kilo Bits per secondpercent % of total bandwidth

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

Либо описать, какой «вес» имеет данный класс в рамках CBWFQ

policy-map POLICY class NAME1 bandwidth?

[8-2000000] Kilo Bits per secondpercent % of total Bandwidthremaining % of the remaining bandwidth

В обоих случаях можно указать как аболютное значение, так и процент от всей доступной полосы

Возникает резонный вопрос: а откуда маршрутизатор знает ВСЮ полосу? Ответ банален: из параметра bandwidth на интерфейсе. Даже если он не сконфигурирован явно, какое то его значение обязательно есть. Его можно посмотреть командой sh int.

Также обязательно помнить, что по умолчанию вы распоряжаетсь не всей полосой, а лишь 75%. Пакеты, явно не попавшие в другие классы, попадают в class-default. Эту настройку для дефолтного класса можно задать явно

policy-map POLICY class class-default bandwidth percent 10

(UPD, спасибо OlegD) Изменить максимальную доступную полосу с дефолтных 75% можно командой на интерфейсе

max-reserved-bandwidth [percent]

Маршрутизаторы ревностно следят, чтобы админ не выдал случайно больше полосы, чем есть и ругаются на такие попытки.

Создаётся впечатление, что политика будет выдавать классам не больше, чем написано. Однако, такая ситуация будет лишь в том случае, если все очереди наполнены. Если же какая то пустует, то выделенную ей полосу наполненные очереди поделят пропорционально своему «весу».

Работать же вся эта конструкция будет так:

Если идут пакеты из класса с указанием priority, то маршрутизатор сосредотачивается на передаче этих пакетов. Причем, т.к. таких приоритетных очередей может быть несколько, то между ними полоса делится пропорционально указанным процентам.

Как только все приоритетные пакеты закончились, наступает очередь CBWFQ. За каждый отсчёт времени из каждой очереди «зачёрпывается» доля пакетов, указанная в настройке для данного класса. Если же часть очередей пустует, то их полоса делится пропорционально «весу» класса между загруженными очередями.

Применение на интерфейсе:

int s0/0 service-policy [input|output] POLICY

А что же делать, если надо строго рубить пакеты из класса, выходящие за дозволенную скорость? Ведь указание bandwidth лишь распределяет полосу между классами, когда очереди загружены.

Для решения этой задачи для класса трафика в политике есть технология

police [speed] [birst] conform-action [действие] exceed-action [действие]

она позволяет явно указать желаемую среднюю скорость (speed), максимальный «выброс», т.е. количество передаваемых данных за единицу времени. Чем больше «выброс», тем больше реальная скорость передачи может отклоняться от желаемой средней. Также указываются: действие для нормального трафика, не превышающего указанную скорость и действие для трафика, превысившего среднюю скорость. Действия могут быть такими

police 100000 8000 conform-action?

drop drop packetexceed-action action when rate is within conform and conform + exceed burstset-clp-transmit set atm clp and send itset-discard-class-transmit set discard-class and send itset-dscp-transmit set dscp and send itset-frde-transmit set FR DE and send itset-mpls-exp-imposition-transmit set exp at tag imposition and send itset-mpls-exp-topmost-transmit set exp on topmost label and send itset-prec-transmit rewrite packet precedence and send itset-qos-transmit set qos-group and send ittransmit transmit packet

Часто возникает также и другая задача. Предположим, что надо ограничить поток, идущий в сторону соседа с медленным каналом.

image

Дабы точно предсказать, какие пакеты дойдут до соседа, а какие будут уничтожены в силу загруженности канала на «медленной» стороне, надо на «быстрой» стороне создать политику, которая бы заранее обрабатывала очереди и уничтожала избыточные пакеты.

И тут мы сталкиваемся с одной очень важной вещью: для решения этой задачи надо сэмулировать «медленный» канал. Для этой эмуляции не достаточно только раскидать пакеты по очередям, надо ещё сэмулировать физический буфер «медленного» интерфейса. У каждого интерфейса есть скорость передачи пакетов. Т.е. в единицу времени каждый интерфейс может передать не более, чем N пакетов. Обычно физический буфер интерфейса рассчитывают так, чтобы обеспечить «автономную» работу интерфейсу на несколько единиц вермени. Поэтому физический буфер, скажем, GigabitEthernet будет в десятки раз больше какого-нибудь интерфейса Serial.

Что же плохого в том, чтобы запомнить много? Давайте рассмотрим подробно, что произойдёт, в случае если буфер на быстрой передающей стороне будет существенно больше буфера принимающей.

Пусть для простоты есть 1 очередь. На «быстрой» стороне сэмулируем малую скорость передачи. Это значит, что попадая под нашу политику пакеты начнут накапливаться в очереди. Т.к. физический буфер большой, то и логическая очередь получится внушительной. Часть приложений (работающих через ТСР) поздно получат уведомление о том, что часть пакетов не получена и долго будут держать большой размер окна, нагружая сторону-приемник. Это будет происходить в том идеальном случае, когда скорость передачи будет равна или меньше скорости приёма. Но интерфейс принимающей стороны может быть сам загружен и другими пакетами и тогда маленькая очередь на принимающей стороне не сможет вместить всех пакетов, передаваемых ей из центра. Начнутся потери, которые повлекут за собой дополнительные передачи, но в передающем буфере ведь ещё останется солидный «хвост» ранее накопленных пакетов, которые будут передаваться «вхолостую», т.к. на принимающей стороне не дождались более раннего пакета, а значит более позние будут просто проигнорированы.

Поэтому для корректного решения задачи понижения скорости передачи к медленному соседу физический буфер тоже надо ограничить.

Делается это командой

shape average [speed]

Ну а теперь самое интересное: а как быть, если мне помимо эмуляции физического буфера надо внутри него создать логические очереди? Например, выделить приоритетно голос?

Для это создаётся так называемая вложенная политика, которая применяется внутри основной и делит на логические очереди то, что в неё попадает из родительской.

Пришло время разобрать какой-нибудь залихватский пример на основе приведенной картинки.

Пусть мы собираеися создать устойчиво работающие голосовые каналы через интернет между CO и Remote. Для простоты пусть сеть Remote (172.16.1.0/24) имеет только связь с СО (10.0.0.0/8). Скорость интерфейса на Remote — 1 Мбит/сек и выделяется 25% этой скорости на голосовой трафик.

Тогда для начала нам надо выделить приоритетный класс трафика с обеих сторон и создать политику для данного класса. На СО дополнительно создадим класс, описывающий трафик между офисами

На СО:

class-map RTP match protocol rtp

policy-map RTP class RTP priority percent 25

ip access-list extended CO_REMOTE permit ip 10.0.0.0 0.255.255.255 172.16.1.0 0.0.0.255

class-map CO_REMOTE match access-list CO_REMOTE

На Remote поступим иначе: пусть в силу дохлости железа мы не можем использовать NBAR, тогда нам остаётся только явно описать порты для RTP

ip access-list extended RTP permit udp 172.16.1.0 0.0.0.255 range 16384 32768 10.0.0.0 0.255.255.255 range 16384 32768

class-map RTP match access-list RTP

policy-map QoS class RTP priority percent 25

Далее, на СО надо сэмулировать медленный интерфейс, применить вложенную политику для приоритезации голосовых пакетов

policy-map QoS class CO_REMOTE shape average 1000000 service-policy RTP

и применить политику на интерфейсе

int g0/0 service-policy output QoS

На Remote установим параметр bandwidth (в кбит/сек) в соответствие со скоростью интерфейса. Напомню, что именно от этого параметра будет считаться 25%. И применим политику.

int s0/0 bandwidth 1000 service-policy output QoS

Повествование было бы не полным, если не охватить возможности коммутаторов. Понятно, что чисто L2 коммутаторы не способны так глубоко заглядывать в пакеты и делить их на классы по тем же критериям.

На более умных L2/3 коммутаторах на маршрутизируемых интерфейсах (т.е. либо на interface vlan, либо если порт выведен со второго уровня командой no switchport) применяется та же конструкция, что работает и на маршрутизаторах, а если порт или весь коммутатор работает в режиме L2 (верно для моделей 2950/60), то там для класса трафика можно использовать только указание police, а priority или bandwidth не доступны.

С сугубо защитной точки зрения, знание основ QoS позволит оперативно предотвращать бутылочные горла, вызванные работой червей. Как известно, червь сам по себе довольно агрессивен на фазе распространения и создаёт много паразитного трафика, т.е. по сути атаку отказа в обслуживании (Denial of Service, DoS).

Причем часто червь распространяется по нужным для работы портам (ТСР/135,445,80 и др.) Просто закрыть на маршрутизаторе эти порты было бы опрометчиво, поэтому гуманнее поступать так:

1. Собираем статистику по сетевому трафику. Либо по NetFlow, либо NBARом, либо по SNMP.

2. Выявляем профиль нормального трафика, т.е. по статистике, в среднем, протокол HTTP занимает не больше 70%, ICMP — не больше 5% и т.д. Такой профиль можно либо создать вручную, либо применив накопленную NBARом статистику. Мало того, можно даже автоматически создать классы, политику и применить на интерфейсе командой autoqos :)

3. Далее, можно ограничить для нетипичного сетевого трафика полосу. Если вдруг и подцепим заразу по нестандартному порту, большой беды для шлюза не будет: на загруженном интерфейсе зараза займет не более выделенной части.

4. Создав конструкцию (class-map — policy-map — service-policy) можно оперативно реагировать на появление нетипичного всплеска трафика, создавая вручную для него класс и сильно ограничивая полосу для этого класса.

Сергей Фёдоров

habrahabr.ru

«Честное» распределение интернет-канала между пользователями — QoS

Долгими посленовогодними вечерами довелось активно поюзать домашний интернет, в результате чего обратил внимание на некомфортную работу в интернет при одновременной работе нескольких приложений — например, торретны, ютуб и браузер. Или выгрузка файла и работа по ssh. Полез гуглить и увидел, что есть такая вещь, как QoS. У меня в маршрутизаторе установлена прошивка Gargoyle, которая очень неплохо умеет работать с QoS.

Кстати, OpenWRT, на базе которого и сделана Gargoyle, тоже работает с QoS, но там настройка несколько иная, хотя описанные ниже принципы работы QoS помогут настроить QoS и в OpenWRT.

В Горгульевской wiki нашлась статья про QoS, которая мне весьма понравилась и благодаря ей я настроил QoS на своем маршрутизаторе. Работой маршрутизатора с настроенным QoS был приятно удивлен — ни приложения, ни пользователи не мешали друг другу работать в интернет, посему я решил сделать доброе дело и перевести эту статью на русский — может быть кому-нибудь пригодится.

Вольный перевод статьи о 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 мс. Проверьте свои правила, и убедитесь, что игровой трафик попадает в нужный класс и что этот класс не перегружен.

habrahabr.ru

Миф о бесполезности QoS без перегрузки сети / Хабрахабр

По работе я несколько раз сталкивался с мнением, что настраивать QoS в не перегруженной ethernet сети не нужно для успешного функционирования таких сервисов, как IPTV и VoIP. Это мнение стоило мне и моим коллегам многих нервных клеток и часов на диагностику фантомных проблем, поэтом постараюсь как можно проще рассказать о том, почему это мнение неверно. Меня зовут Владимир и я работаю сетевым инженером в одном из небольших ISP в Санкт-Петербурге.

Одним из оказываемых нами сервисов является L2VPN под транспорт IPTV потоков. На примере этого сервиса я буду вести рассказ.

Начинается всё с обращения в техподдержку от клиента-оператора с жалобой на качество IPTV — картинка сыпется («артефакты»), пропадает звук, в общем стандартный набор. IPTV у нас в сети классифицируется в очередь assured forwarding, поэтому диагностика заключается в том, чтобы пробежаться по железкам на маршруте и проверить, что в AF очереди на egress нет потерь, а на ingress нет физических ошибок. После этого мы бодро рапортуем клиенту, что в нашей зоне ответственности потерь не обнаружено, рекомендуем клиенту искать проблему у себя или поставщика IPTV, и идём пить чай с печеньем.

Но клиент давит и продолжает настаивать, что виноваты мы, а у него всё отлично. Мы проверяем всё ещё раз, смотрим корректность классификаторов и маркировку пакетов от клиента, завязывается диалог и на каком-то этапе задаём вопрос «а как у вас сконфигурирован QoS на сети?», на что получаем ответ «никак, у нас интерфейсы даже на 50% не загружены поэтому нам QoS не нужен». Тяжёлый вздох и поехали.

Обычно график загрузки на который все смотрят имеет интервал в 5 минут. Если «real time» — то несколько секунд, начиная от 1. К сожалению и к счастью, современное сетевое оборудование оперирует периодами не в 5 минут и не в 1 секунду даже, а пикосекундами. То, что в течении секунды интерфейс не был загружен на 100%, не значит, что он точно так же не был загружен и в течении нескольких миллисекунд.

Здесь мы приходим к концептуальному понятию — микробёрст(microburst). Это такой очень короткий период времени, когда количество принимаемых устройством данных становится больше чем интерфейс способен отправить.

Обычно первая реакция — как так?! Мы же живём в эпоху скоростных интерфейсов! 10Gb/s уже обыденность, 40 и 100Gb/s внедряется повсеместно, а мы ждём уже 1Tb/s интерфейсы.

На самом деле, чем выше скорость интерфейсов, тем жёстче становятся микробёрсты и их эффект на сеть.

Механизм возникновения очень прост, я его рассмотрю на примере трёх 1Gb/s интерфейсов, где трафик из двух из них уходит через третий.

image

Это единственное необходимое условие для возникновения микробёрста — чтобы скорость входящих (ingress) интерфейсов превышала скорость исходящего (egress) интерфейса. Ничего не напоминает? Это же традиционная схема уровня агрегации в ethernet сети — множество портов (ingress) сливают трафик в один аплинк (egress). Так строят сети абсолютно все — от операторов связи до дата-центров.

У каждого egress интерфейса есть очередь отправки tx-ring, которая представляет из себя кольцевой буфер. Туда складываются пакеты для отправки в сеть и конечно же этот буфер имеет конечный размер. Но у ingress интерфейсов на отправляющей стороне тоже есть такие же кольцевые буферы, которые обеспечивают такой-же line-rate. Что произойдёт, если они начнут отправлять трафик одновременно? У нашего egress интерфейса не хватит места в его tx-ring, так как заполняться он будет в два раза быстрее, чем он способен отправлять пакеты. Оставшиеся пакеты нужно где-то хранить. В общем случае это другой буфер, который мы называем очередью (queue). Пока в tx-ring нет места, пакет хранится в очереди и ждёт свободного места в tx-ring. Но вот беда — у очереди память тоже конечна. Что произойдёт, если ingress интерфейсы работают на line-rate достаточно долго? Память в очереди тоже закончится. В этом случае новому пакету уже негде храниться, и он будет отброшен — такая ситуация называется tail drop.

Сколько времени нужно, чтобы такой сценарий стал реальностью? Давайте посчитаем.

Самое сложное — это найти ёмкость буфера интерфейса. Вендоры не очень активно публикуют такую информацию. Но возьмём, для примера, период в 200ms — дольше держать пакет в очереди обычно смысла не имеет, да и это уже очень много.

Для 1Gb/s интерфейса нам потребуется (1000000000 * 0.2) / 8 = 25MB памяти. Сколько времени нужно работать на line-rate двум 1Gb/s интерфейсам, чтобы полностью забить буфер? 200ms. Это время за которое передаются 25MB со скоростью 1Gb/s. Да, ingress интерфейсов то у нас два, но egress интерфейс то тоже без дела не сидит и отправляет данные с той же скоростью, поэтому 200ms.

Это сравнительно много. А 10Gb/s ingress интерфейсу сколько времени понадобится чтобы перегрузить 200ms буфер 1Gb/s интерфейса? ~22ms. Это уже ощутимо меньше.

А сколько нужно памяти, чтобы хранить 200ms для 10Gb/s интерфейса? Уже 250MB. Это не то чтобы много по современным меркам, но ветер дует именно в эту сторону — скорости растут, и чтобы сохранять глубину буфера требуется всё больше и больше памяти, что выливается в инженерные и экономические проблемы, а чем меньше буфер тем быстрее микробёрст забьёт его.

Получается вечный вопрос для инженеров вендоров — сколько памяти давать интерфейсу в железе? Много — дорого и каждая следующая миллисекунда становится бессмысленнее и бессмысленнее. Мало — микробёрсты будут приводить к большим потерям пакетов и жалобам от клиентов.

Для других сценариев можете посчитать сами, но итог всегда один и тот же — полностью забитая очередь и tail drops, а на графике полкой интерфейса и близко не пахнет, причём на любом периоде — что в 5 минут, что в 1 секунду.

Эта ситуация в пакетных сетях неизбежна — интерфейс проработает на line-rate меньше секунды, а потери уже будут. Единственный способ её избежать — строить сеть так, чтобы ingress скорость никогда не превышала egress скорость, а это непрактично и нереально.

Дальнейшая логика уже прослеживается и достаточно очевидна. Потери пакетов есть, а QoS не настроен — приоритетный трафик никак не классифицируется и не отличается от другого трафика, и попадает в одну общую очередь, где он имеет равные шансы быть дропнутым.

Что делать? Настраивать QoS. Обязательно классифицировать приоритетный трафик и помещать его в отдельную очередь которой выделять бОльший объём памяти. Конфигурировать алгоритмы отправки пакетов так, чтобы приоритетные пакеты попадали в tx-ring раньше других — таким образом их очередь будет очищаться быстрее.

Например, мы в своей практике используем следующий подход к очередям:

Assured forwarding(AF) — «подержи но доставь». В AF очередь классифицируется трафик, который требует гарантированной доставки, но не чувствителен к задержкам. Этой очереди выделен большой объём памяти, но даётся сравнительно мало места в tx-ring, и пакеты туда попадают позже других. Яркий пример такого трафика это IPTV — он буферизиуется на клиенте(VLC или STB), поэтому его можно задержать, но потеря превратится в артефакт изображения. Expedited forwarding(EF) — «доставь мгновенно или выброси». Этой очереди выделятся минимум(или вообще никакой) памяти для очереди, но выставляется высший приоритет для попадания в tx-ring, чтобы пакет был отправлен как можно быстрее. Пример трафика — VoIP. Голос нельзя доставить поздно, иначе и кодек телефонии не сможет его корректно собрать — абонент услышит кваканье. В то же время потери отдельных пакетов на общем качестве голоса сильно не сказываются — он у людей итак не идеальный. Есть ещё network control(NC) и best effort(BE), для управления сетью и всего остального соответственно, а трафик бывает ещё, например, телеконференции, который представляет из себя гибрид между VoIP и IPTV, но это уже совершенно отдельная тема, и настраивать QoS для них следует отдельно в каждой сети, в зависимости от топологии и прочих факторов. Всё вместе в целом это выглядит примерно так(картинка с сайта Cisco):

image

Надеюсь теперь вы будете настраивать QoS в своей сети?

habrahabr.ru


Смотрите также