![]() |
|
|
|
|
|
В простейшем случае задача регулировки трафика формулируется так: через наш шлюз проходит информационный поток A величной V(A). Мы хотим ограничить этот поток каким-нибудь значением Vmax. То есть, грубо говоря, сделать так, чтобы все, что выходит за пределы зачения Vmax попросту уничтожалось [2]. Каждому потоку назначается специальный буфер, работающий по принципу очереди. Буфер наполняется с той скоростью, с какой в него поступают данные (Vin), а опустошается со скоростью, не превышающей заданную (Vout). В том случае, если Vin находится в допустимых пределах, поток проходит через буфер в полном объеме. Если же буфер наполняется быстрее чем опустошается, может наступить такой момент, когда он будет полностью заполнен и вновь поступающие данные будут попросту уничтожаться. Можно не только ограничивать трафик, но и вносить, например, задержку в него, или уничтожать пакеты с заданной вероятностью. Как правило, это делается для решения каких-либо экспериментаторских задач, но иногда может быть полезно и в чисто практических целях. Средства, которые управляют трафиком подобным образом, называют трафик-шейперами (traffic-shaper), формирователями или регулировщиками трафика. В состав ядра 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 КБайт/с. Канал мог бы иметь и другие параметры, которые в этом случае должны были бы быть указаны как дополнительные аргументы команды парами параметр значение.
В том случае, когда нужно ограничить скорость передачи информации из Интернета на хост, находящийся в локальной сети, следует изменять скорость исходящего потока. То есть скорость того потока, который уходит со шлюза на хост. Нельзя уменьшить скорость, с которой данные передаются из Интернета. Это вызывает вопрос: зачем унчитожать информацию, после того, как она уже попала в нашу сеть? Ведь она уже прошла по входящему каналу и уже заняла там какое-то место? Все действительно так, но в этом случае в силу вступают механизмы регулирования потока TCP, которые не позволят в следующий раз отправлять хосту информации больше, чем он способен принять. Таблица 5. Параметры канала dummynet
Просмотреть информацию о канале, можно с помощью команды
# 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] В действительности, задача управления трафиком значительно сложнее, но даже такая упрощенная формулировка является ползеной и позволяет решить множество практических задач. | |||||||
|