Нарезаем трафик ломтиками Andrey Matveev Хакер, номер #087, стр. 087-130-1 (andrushock@real.xakep.ru) Выжми все из своего интернет-канала! Ограничение пропускной способности канала, классификация очередей входящего/исходящего трафика и приоритезация сетевых пакетов - вот три ключевых компонента, которые позволят нам заложить отличный фундамент для качественного и количественного доступа в Сеть. На первый взгляд такое суждение выглядит весьма спорным: как за счет различных ограничений можно достигнуть оптимальной скорости передачи данных, выделенной провайдером? Оказывается, очень даже возможно, особенно при одновременном download/upload, и сегодня мы покажем как. [введение в проблему] Каждый из нас стремится использовать доступный канал на все 100%. Виндузятники один за одним качают крэкеры из Интернета и "умные" менеджеры закачек, не забывая при этом бороздить минное поле под названием реестр. Юниксоиды поступают несколько иначе. Перекомпиляция ядра с различными сетевыми настройками и твикинг значений переменных стека TCP/IP - вот лишь неполный перечень мероприятий, после проведения которых подавляющее большинство мнит себя классными специалистами по сетевой подсистеме *nix и с гордостью наслаждается фиктивным увеличением скорости передачи данных. Но стоит признать, победная эйфория быстро проходит, когда во время заливки двухгигабайтной avi'шки тюнинговая ось сваливается в ddb с сообщением kernel panic... Приведу еще один пример: ты преспокойно админишь удаленную тачку по ssh, вдруг без видимой причины ssh-сессия начинает лагать, команды вводятся с задержкой, вплоть до разрыва соединения. После долгих выяснений дело оказывается не в ядре и не в операционке, а в соседе с третьего этажа, который по ftp начал качать новый фильм с участием Елены Берковой, заняв весь канал. Напрашивается вопрос: как в таком случае гарантировать себе и другим пользователям нормальную работу по определенным протоколам, скажем, ssh или icq/irc? Единственный правильный и действительно эффективный способ - организовать трафик-шейпинг. [уточняем диспозицию] Рассмотрим вариант с ADSL-соединением. Предполагается, что к данному моменту Ethernet-порт ADSL-модема с помощью кроссоверного кабеля уже подключен к сетевой карте (VIA VT6103, интерфейс vr0). Также будем считать, что на компьютере, выполняющем функции шлюза, установлена карточка беспроводного доступа (Gigabyte GN-WPKG, интерфейс ral0). Для наглядности сценарий можно представить следующим образом: [ ADSL Modem ]----(vr0) \ [ GATEWAY ]-(pppoe0)-------[ ISP ]-- / [ LAPTOP ] - - - (ral0) Весь изложенный материал можно применять не только для ADSL-соединений, совсем необязательно держать для таких задач выделенный сервер, и в качестве используемой операционной системы может выступать любая из *BSD. [бескомпромиссная дуэль: in-kernel vs userland] В OpenBSD (как, впрочем, и в NetBSD) присутствует сразу две реализации PPPoE. Первая представляет собой утилиту pppoe(8) из пространства пользователя, которая, помимо всего прочего, способна детально журналировать события и производить тонкое конфигурирование соединений. |