| |||||||||||||||||||||
Ключевые слова: qos, adsl, traffic, linux, bandwidth, iproute2, shaper, (найти похожие документы)
From: Anton Shuko (SG) <sg@sg.tomsk.ru.> Newsgroups: email Date: Mon, 19 Dec 2005 14:31:37 +0000 (UTC) Subject: Управление трафиком на роутере небольшой сети под Linux Подключился я однажды к adsl и обнаружил, что хотя у него неплохие характеристики 8/1 mbit in/out, но бывают ситуации, когда разные потоки трафика начинают мешать работе, играм... Даже пинг до гейта поднимался с 8ms до 200-300ms. Усугубляло ситуацию, что я был не единственным пользователем этого подключения. Т.е. я вдруг могу (хотя и нежелательно) притормозить выкачивание чего-то, когда хочется поиграть в quake, но что делать с другими пользователями? Зарезать их на время игры - это конечно сильно :) но нежелательно. Неудобно даже свои процессы постоянно прибивать/запускать. Ну и просто портится КПД канала. Ради нескольких процентов трафика и минимальных лагов убивать все остальное... Поэтому начал копать то, что наваяли в линуксе для разделения траффика по приоритетам и ограничения полосы. Применил это для роутера, который подключен в интернет через adsl модем и раздает его пользователям через какой-то сетевой интерфейс (у меня их несколько и они объединены в виртуальный интерфейс bridge). Хотя это можно применять и для других ситуаций с некоторыми изменениями. И результат этого представляю вам на растерзание :) Для ограничения трафика я решил использовать только входящие в стандартное ядро (2.4, 2.6) модули. Это QoS, netfilter и стандартны пакеты для работы с ядром, входящие в большиство дистрибутивов iproute2, iptables. Для большинства случаев этого достаточно. Эксперименты показали, что эффективно управлять потоками пакетов можно только при неполной загрузке канала в обоих направлениях. Т.е. нужно ограничить скорость канала. Это очень важно! Достаточно забить одно направление на 100% и качество связи упадет. Решать что важнее: ограничить пропускную способность канала на 10-30% или маяться с лагами в момент, когда он полностью забит - личное дело каждого. Я описываю метод с ограничением скорости канала. Теперь совсем немного теории. Мы не можем управлять входящим трафиком, который поступает adsl модему на вход. И это факт. Но большинство ip потоков зависят от исходящего трафика и от дропания или задержки пакетов. Именно ip, а не только tcpip. Так пишут во всех руководствах. Но я не буду управлять входящим трафиком через задержку исходящего, как обычно советуют. Не потому что это невозможно, а потому что это сложно и требуется долгая настройка, а потом и постоянная подстройка. Например: тянем что-то по ftp. Входящий трафик 8mbit, а исходящий всего 200kbit, что в разы меньше пропускной способности исходящего канала. Т.е. для ограничения входящего ftp трафика надо сделать исходящий меньше 200kbit. Но это только примерная величина и её нужно подгонять. А ситуация может меняться... Есть еще один важный момент: adsl модем - устройство с разной пропускной способностью для исходящих и входящих пакетов. Поэтому нужно ограничивать исходящий с роутера или сети трафик даже в том случае, если он не является подтверждением для входящих потоков. Например, поставили у себя какой-то ftp/www/игровой сервер, а так же в сети могут жить любители пирингового обмена. И своим небольшим (в 10 раз меньше входящего) трафиком они могут сильно испортить качество канала. Значит нужно делить исходящий трафик на исходящий с хоста или сети и подтверждение входящих пакетов. Будем решать эту проблему в лоб, т.е. ограничивать исходящий трафик для исходящих потоков отдельно и входящий для входящих тоже отдельно :) Для примера берем мою сеть. ppp0 - интерфейс для выхода в интернет br0 - интерфейс локальной сети
| |||||||||||||||||||||
|
|
|