• 3.1. Использование tcng для ограничения входящего потока

  • 3.2. Использование двухскоростного трехцветного измерителя

  • 3. Примеры конфигураций

    Приведенные в этом документе примеры представляют переработанные конфигурации, доступные по адресу http://linux-ip.net/code/tcng/.

    Примеры могут использоваться как самостоятельные конфигурационные файлы для синтаксического анализатора tcc, или в комбинации с примером скрипта начальной загрузки для SysV. Данный скрипт начальной загрузки является модификацией скрипта, предложенного raptor'ом в списке рассылки LARTC.

    Если вы собираетесь пользоваться этим скриптом начальной загрузки, посмотрите на пример файла /etc/sysconfig/tcng:

    Пример 1. /etc/sysconfig/tcng

    # - мета-конфигурационный файл tcng

    #

    # -- 2003-03-15 создание; -MAB

    # -- 2003-03-31 модификация для поддержки переопределения ENVAR; -MAB

    #

    # -- В этом каталоге будут храниться все конфигурационные файл tcng

    #    для данного хоста

    #

    TCCONFBASEDIR=${TCCONFBASEDIR:-/etc/sysconfig/tcng-configs}


    # -- активная конфигурация для tcng

    #    обратите внимание, что благодаря поддержке конструкции #include

    #    модульность конфигурации tcng может быть встроена в

    #    конфигурационные файлы в $TCCONFBASEDIR

    #

    TCCONF=${TCCONF:-$TCCONFBASEDIR/global.tcc}


    tcstats=${tcstats:-no}   # -- подавляет вывод статистики

    tcstats=${tcstats:-yes}  # -- передает ключ "-s" в tc


    tcdebug=${tcdebug:-0}    # -- для повседневного использования

    tcdebug=${tcdebug:-1}    # -- для вывода дополнительной информации

    tcdebug=${tcdebug:-2}    # -- для вывода отладочной информации

    #

    #

    # -- в качестве дополнительной меры, вы можете переопределить местоположение утилит

    #    tc и tcc, например:

    #

    #  tc=/usr/local/bin/tc

    #  tcc=/usr/local/tcng/bin/tcc

    #

    #

    3.1. Использование tcng для ограничения входящего потока

    Пример 2. /etc/sysconfig/tcng/class-selection-path.tcc

    /*

     * Простой пример с комментариями файла управления трафиком для tcng.

     *

     * Martin A. Brown <mabrown@securepipe.com>

     *

     * Пример: Использование алгоритма выбора класса.

     *

     *

     */

    #include "fields.tc"[1]

    #include "ports.tc"


    #define INTERFACE eth0[2]


    dev INTERFACE {

     egress {[3]


      /* при использовании алгоритма выбора класса, вначале указываются фильтры! DSmark */[4]


      class ( <$ssh> ) if tcp_sport == 22 && ip_tos_delay == 1 ;

      class ( <$audio> ) if tcp_sport == 554 || tcp_dport == 7070 ;

      class ( <$bulk> ) \

       if tcp_sport == PORT_SSH || tcp_dport == PORT_HTTP ;[5]


      class ( <$other> ) if 1 ;[6]


      /* секция, в которой мы конфигурируем дисциплины обработки очередей и классы */

      htb () {[7]


       class ( rate 600kbps, ceil 600kbps ) {[8]

        $ssh = class ( rate 64kbps, ceil 128kbps ) { sfq; } ;


        [9]$audio = class ( rate 128kbps, ceil 128kbps ) { sfq; } ;

        $bulk = class ( rate 256kbps, ceil 512kbps ) { sfq; } ;

        $other = class ( rate 128kbps, ceil 384kbps ) { sfq; } ;[10]

       }

      }

     }

    }

    3.2. Использование двухскоростного трехцветного измерителя

    Пример 3. /etc/sysconfig/tcng/two-rate-three-color-meter.tcc

    /*

     * Простой пример с комментариями файла управления трафиком для tcng.

     *

     * Martin A. Brown <mabrown@securepipe.com>

     *

     * Пример: Использование измерителя.

     *

     *

     */


    #define EXCEPTION 192.168.137.50

    #define INTERFACE eth0


    $meter = trTCM( cir 128kbps, cbs 10kB, pir 256kbps, pbs 10kB );[11]


    dev eth0 {

     egress {


      class ( <$full> ) if ip_src == EXCEPTION ;[12]


      class ( <$fast> ) if trTCM_green( $meter ) ;[13]


      class ( <$slow> ) if trTCM_yellow( $meter ) ;[14]


      drop if trTCM_red( $meter ) ;[15]

      htb {

       class ( rate 600kbps, ceil 600kbps ) {

        $fast = class ( rate 256kbps, ceil 256kbps ) { sfq; } ;

        $slow = class ( rate 128kbps, ceil 128kbps ) { sfq; } ;

        $full = class ( rate 600kbps, ceil 600kbps ) { sfq; } ;

       }

      }

     }

    }


    Примечания:



    1

    Язык tcng обеспечивает поддержку c-подобных директив include, которые позволяют присоединить любой файл. Файлы присоединяются относительно текущего каталога или библиотеки tcng (обычно /usr/lib/tcng/include). Строго говоря, указывать директивы #includeports.tc и #includefields.tc необязательно, поскольку tcc их присоединяет по умолчанию.

    Использование директив #include увеличивает гибкость определения переменных и подключения общих элементов управления трафиком.

    За дальнейшей информацией обращайтесь к руководству tcng, раздел подключений



    2

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



    3

    Ключ egress является синонимом dsmark. Приведенный пример использует class selection path. Для использования в конфигурации ключа egress необходима поддержка dsmark в ядре и tc



    4

    Алгоритм выбора класса (class selection path) — это один из подходов к ограничению трафика. При использовании алгоритма выбора класса, пакет маркируется (DiffServ mark) при поступлении в маршрутизатор. На основе этой маркировки маршрутизатор позднее может выполнять различные действия по ограничению, упорядочиванию и классифицированию трафика.

    За подробностями обращайтесь к разделу описания алгоритма выбора класса руководства по tcng



    5

    Этот пример показывает использование имен портов вместо их номеров. Это одно из удобств tcng, предоставляемых подключением ports.tc. Имена портов соответствуют названиям портов IANA. Узнать имена портов можно в списке зарегистрированных портов IANA или изучив файл ports.tc.

    Имена и номера портов одинаково допустимы. 



    6

    Обратите внимание на эту специфическую конструкцию, которая классифицирует все ранее не классифицированные пакеты. Все пакеты, которые не были классифицированы вышеуказанными классификаторами, помещаются в класс "$other". Конструкция if 1 может применяться для классифицирования неклассифицированного трафика. 



    7

    Здесь создается корневая дисциплина обработки очереди устройства, в нашем случае eth0. Проконсультируйтесь со справочными материалами tcng, дополнение по параметрам дисциплин обработки очереди. Любые параметры дисциплины очереди могут быть вставлены в круглые скобки, так же как и параметры класса далее в примере. Если параметры не указаны, скобки необязательны. 



    8

    Корневой класс в этом примере задает максимальную полосу пропускания для всего класса. Давайте предположим, что eth0 — это интерфейс, подключенный к локальной сети. Тогда скорость передачи данных в локальную сеть будет ограничена 600 килобитами.

    Параметры rate и ceil должны быть знакомы всем, кто пользовался HTB. Это специфические параметры HTB и соответствующим образом обрабатываются утилитой tcc. Обратитесь к таблице аббревиатур скоростей tcng



    9

    Это присвоение класса переменной. Обычно выполняется как часть алгоритма выбора пути.



    10

    По совету Мартина Девера, приведенном на сайте HTB, каждому классу назначается дисциплина обработки очереди SFQ, которая позволяет эффективо разделять пропускную возможность класса, между сессиями. Обратите внимание на отсутствие параметров у этой дисциплины.

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



    11

    В этой строке выполняется объявление измерителя (meter) для классификации трафика. Обратитесь к руководству по tcng, раздел измерителей за списком и примерами различных измерителей.

    Приведенный в этом примере измеритель является двухскоростным трехцветным измерителем, самым сложным измерителем, доступным в языке tcng. Этот измеритель возвращает цвет — зеленый, желтый и красный, в зависимости от скорости. Если измеренная скорость превышает гарантированную, измеритель возвращает желтый цвет, а если превышает пиковую скорость — возвращается красный цвет.

    С переменной $meter могут оперировать функции, работающие с типом измерителя. В нашем случае используются три функции, позволяющие проверить состояние $meter: trTCM_green, trTCM_yellow и trTCM_red. Для эффективности, обратите внимание на ускоренные аналоги



    12

    В нашем примере к трафику хоста 192.168.137.50 специально не применяются правила ограничения применяемые ко всему остальному трафику на интерфейсе eth0.



    13

    До гарантированной скорости (cir), пакеты будут проходить через этот класс. Токены будут использоваться из буфера cir/cbs.

    Измеритель зеленый. 



    14

    Трафик, превышающий возможности буфера cir/cbs будет направляться в буфер pir/pbs (pir — это пиковая скорость [peak information rate], pbs — это размер пикового буфера). Это позволяет гарантировать отдельному потоку полосу пропускания до определенной скорости,а при превышении ее происходит переклассификация.

    Измеритель желтый. 



    15

    Трафик, превышающий возможности буфера pir/pbs классифицируется в этой строке. Обычные конфигурации начинают терять пакеты, превышающие пиковую скорость, но можно настроить и переклассификацию трафика из класса гарантированной пропускной способности в класс максимальной пропускной способности.

    Измеритель красный. 








    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх