Регулировка величины трафика

Что такое регулировка трафика и зачем она нужна

В простейшем случае задача регулировки трафика формулируется так: через наш шлюз проходит информационный поток A величной V(A) . Мы хотим ограничить этот поток каким-нибудь значением Vmax . То есть, грубо говоря, сделать так, чтобы все, что выходит за пределы зачения Vmax попросту уничтожалось [2].

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

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

Средства, которые управляют трафиком подобным образом, называют трафик-шейперами (traffic-shaper), формирователями или регулировщиками трафика.

Трафик-шейпер в FreeBSD

В состав ядра FreeBSD входит модуль dummynet, который позволяет эмулировать канал связи, обладающий

  • ограниченой полосой пропускания;

  • задержкой распространения;

  • вероятностью потери пакета;

  • очередью пакетов заданного размера.

Этот модуль можно использовать в качестве трафик-шейпера.

Настройка трафик-шейпера

Настройка трафик-шейпера на основе dummynet производится с помощью утилиты ipfw. Для того, чтобы направить какой-либо трафик через канал dummynet, нужно

  • Создать канал;

  • Указать, какой именно трафик должен быть в канал направлен;

  • Настроить канал на работу с заданными параметрами.

Два первых шага совмещаются в одном и выполняются командой ipfw add pipe. Например, команда

# ipfw add pipe 1 tcp from any to 192.168.15.1 out

создает канал 1 (pipe 1) и направляет через него весь tcp-трафик, отправленный не важно кем (from any) хосту 192.168.15.1 (to 192.168.15.1); при этом трафик должен быть исходящим (out).

Для того чтобы, настроить сам канал pipe, нужно дать команду ipfw pipe ... . Например, команда

# ipfw pipe 1 bw 10KB

ограничивает полосу пропускания канала pipe 1 значением 10 КБайт/с. Канал мог бы иметь и другие параметры, которые в этом случае должны были бы быть указаны как дополнительные аргументы команды парами параметр значение .

[Note]

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

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

Таблица 5. Параметры канала dummynet

bw

Максимальная полоса пропускания канала. Может быть указана дополнительная единица измерения: MByte, KByte, Kbit, Mbit. По умолчанию, подразумевается, что полоса пропускания указана в Кбитах/с.

delay

Задержка распространения в мс.

Просмотреть информацию о канале, можно с помощью команды

# ipfw pipe 1 list
00001: 80.000 Kbit/s 0 ms 50 sl. 1 queues (1 buckets) droptail
mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 tcp 192.168.15.199/80 192.168.15.254/52995 12365 15440683 0 0 1

Она выдает не только сведения о канале, но и о соединениях, которые проходят через этот канал.



[2] В действительности, задача управления трафиком значительно сложнее, но даже такая упрощенная формулировка является ползеной и позволяет решить множество практических задач.