56

Есть ли способ ограничить пропускную способность на сетевой карте в Linux? Я хотел бы иметь возможность симулировать произвольно медленное соединение.

7 ответов7

32

Модуль ядра netem , управляемый iproute.

Вам нужно скомпилировать Netem с ядром:

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

После загрузки модуля netem tc iproute позволяет вам делать следующее:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(Потеря пакета 50%, дополнительная задержка 50 мс)

27

Клиентская сторона, верно?

струйка должна делать то, что вы хотите. Если вы используете Ubuntu (или Debian, я думаю), вы можете установить его с помощью sudo apt-get install trickle , а затем запустить его. trickle -s -d 10 -u 10 firefox (или около того, я давно его не использовал) запускал firefox, ограничивая его скорость загрузки и выгрузки до 10 килобайт в секунду.

16

Я нашел способ, чтобы мой блок не использовал всю пропускную способность, доступную в сети, используя инструмент, называемый wondershaper в Ubuntu. Я надеюсь, что он существует и в других Linux-дестро. Я могу ограничить пропускную способность, которую может потреблять мой домашний ПК с Linux, используя следующую команду.

sudo wondershaper eth0 1000 200

Это ограничивает ограничение загрузки до 1000 килобит и до 200 килобит. Обратитесь к справочным страницам Wondershaper для получения дополнительной информации / опций.

8

NIST создает сетевой симулятор под названием NistNet.

http://snad.ncsl.nist.gov/nistnet/ (ссылка кажется мертвой)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

NistNet позволяет вам создать маршрутизатор, который эмулирует связь по вашему выбору.

Для простейшей работы у вас есть это на коробке с двумя сетевыми картами между двумя сетями.

Например, у меня было приложение, которое должно было работать по спутниковой связи.

Данные могут передаваться по каналу 2 Мбит / с с большой задержкой. Контроль должен был проходить по каналу 128 кбит / с с той же задержкой.

NistNet помог заставить все это работать на скорости 128 кбит / с.

Используя NistNet, я мог имитировать не только пропускную способность, но и задержку, а также отбрасывать пакеты для вас, имитируя занятую или ненадежную связь.

Если вы хотите смоделировать непредвиденное соединение, не просто ограничивайте пропускную способность, но и увеличивайте задержку.

Не забудьте также фрагментировать пакеты. Вы можете установить хорошие маленькие MTU на фальшивую ссылку.

IIRC добавление джиттера пакетов позволит вам узнать, можете ли вы справиться с пакетами, вышедшими из строя.

4

Я лично использовал Wondershaper в прошлом для этого, хотя он был написан для противоположного варианта использования - максимально использовать ваше соединение ADSL.

Я должен попробовать другие упомянутые здесь, хотя.

3

Вы можете использовать локально установленный прокси-сервер squid для ограничения пропускной способности, например, для тестирования веб-страницы по медленной ссылке:

  1. Установите squid proxy из вашего дистрибутива - на моем Fedora это было так же просто, как yum install squid .

  2. Добавьте следующее в /etc/squid/squid.conf:

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    Это ограничит пропускную способность до 128 кбит / с (16000 бит / с).

  3. Запустите squid: /etc/init.d/squid start

  4. Настройте браузер на использование localhost порта прокси-сервера 3128 .

3

Никто еще не упомянул ip_relay с именем "iprelay" в репозиториях Debian. Он работает как TCP-прокси, а не перехватывает вызовы, как это делает Trickle , и будет работать с любым приложением, которое может использовать прокси (например, веб-браузер) или принимать определенный пользователем порт назначения (telnet, ssh, ftp, curl, и так далее).

Это немного сложнее в настройке, но часто работает в ситуациях, когда ручеек не будет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .