Как регулировать пропускную способность сетевого интерфейса Linux?


Ответы:


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 мс)


Да, это действительно очень хороший модуль для этих вещей. Я не могу поверить, что никто не ответил на это до сих пор ...

Я использую это для локального тестирования серверов (на локальном хосте), так как это годами было стандартным для всех дистрибутивов. Чтобы добавить задержку в 20 мсек «tc qdisc, добавьте дескриптор корня dev lo 1: 0, задержка netem 20 мсек», и уберите ее «tc qdisc del dev lo root»
pixelbeat

1
Краткое примечание: модуль ядра есть sch_netem. Обычно нет необходимости загружать его вручную, он будет загружаться автоматически по мере необходимости.
Слеське


Моя версия netem (Ubuntu 13.10) также имеет возможность ограничить полосу пропускания с помощью rateопции: tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Следует отметить , что для некоторых устройств , таких как lo(для доступа к Localhost), вам необходимо установить длину очереди , а также: ifconfig lo txqueuelen 1000. См serverfault.com/a/394949/76090
z0r

27

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

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


Спасибо за этот совет. По какой-то причине струйка у меня не сработала с Firefox, но с Google-Chrome она работала нормально. (Ubuntu 9.10 64bit)
Том

6
Trickle работает, перехватывая вызовы link в стандартных функциях библиотеки для передачи TCP - если приложение имеет статически связанные функции во время компиляции, это может не сработать.
Дэвид Спиллетт

16

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

sudo wondershaper eth0 1000 200

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


1
Это не совсем то, что ищет OP (речь идет о сохранении полосы пропускания, а не о целенаправленном ухудшении соединения), но все же это полезно знать.
Слёске

1
Кстати: это пакет wondershaperв Debian.
Слёске

Это шокировало, потому что у нас были проблемы в офисе с насыщением полосы пропускания, была поддержка, которую я не мог прервать, и я смог исправить это в двух простых строках: # apt-get install wondershaper затем # wondershaper eth0 9999999 500 еще раз спасибо!
orange80

4
У Wondershaper, похоже, есть некоторые математические проблемы. Чтобы получить путь вверх / вниз со скоростью 1 Мбит / с, мы использовали 28096 вместо 1024. Хотя понятия не было, почему это произошло.
кодек

Для сброса используйте:sudo wondershaper clear eth0
Léo Lam

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 добавление джиттера пакетов позволит вам узнать, можете ли вы справиться с неупорядоченными пакетами.


NistNet давно не обновляется, не так ли? IMO, лучший способ на сегодняшний день - это модуль netem, который уже существует во всех последних ядрах.

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

ссылка не работает
hasen

Ссылка у меня работает.
tripleee

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, и так далее ).

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


1
Это именно то, что я ищу! Огромное спасибо. Я рад, что прокрутил вниз и продолжал читать.
Джей Р. Рен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.