Я хотел бы смоделировать задержку и потерю пакетов для UDP
и TCP
в Linux, чтобы измерить производительность приложения. Есть ли простой способ сделать это?
linux
tcp
throttling
Джордж Стокер
источник
источник
Ответы:
Netem использует функциональные возможности, уже встроенные в Linux и утилиты пространства пользователя, для моделирования сетей. На самом деле это то, к чему относится ответ Марка под другим именем.
Примеры на их домашней странице уже показывают, как вы можете достичь того, о чем вы просили:
Обратите внимание, что вы должны использовать,
tc qdisc add
если у вас нет правил для этого интерфейса илиtc qdisc change
если у вас уже есть правила для этого интерфейса. Попытка использоватьtc qdisc change
интерфейс без правил приведет к ошибкеRTNETLINK answers: No such file or directory
.источник
tc -p qdisc ls dev eth0
будут перечислены текущие определенные правила иtc qdisc del dev eth0 root
будут удаленыДля отброшенных пакетов я бы просто использовал iptables и модуль статистики .
Выше будет отброшен входящий пакет с вероятностью 1%. Будьте осторожны, все, что выше 0.14, и большинство из вас tcp-соединений, скорее всего, полностью остановится.
Взгляните на man iptables и поищите «статистика» для получения дополнительной информации.
источник
DROP
на исходящих соединениях довольно нелепо вызываетsend()
возврат операцийEPERM
, а не просто отбрасывание пакетов (как и должно быть).iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP
Один из моих коллег использует для этого tc. Обратитесь к странице справки для получения дополнительной информации. Вы можете увидеть пример его использования здесь .
источник
В iptables (8) есть модуль статистического сопоставления, который можно использовать для сопоставления каждого n-го пакета. Чтобы отбросить этот пакет, просто добавьте -j DROP .
источник
Это руководство по моделированию сетевой физики содержит класс C ++ в примере кода для моделирования задержки и потери пакетов в UDP-соединении и может быть полезным. См. Общедоступные переменные latency и packetLoss класса Connection, найденные в файле Connection.h загружаемого исходного кода .
источник
Сам не пробовал, но на этой странице есть список подключаемых модулей, которые работают в Linux, встроенной в систему IP-фильтрации iptables. Один из модулей называется «nth» и позволяет вам установить правило, которое будет сбрасывать настраиваемую скорость пакетов. Может быть, это хорошее место для начала, по крайней мере.
источник
Вы можете попробовать http://snad.ncsl.nist.gov/nistnet/ Это довольно старый проект NIST (последний выпуск 2005), но он работает для меня.
источник
Простой в использовании инструмент для инъекции сбоев в сети - Saboteur . Может имитировать:
источник
Одним из наиболее используемых инструментов в научном сообществе для этой цели является DummyNet . После того, как вы установили
ipfw
модуль ядра, чтобы ввести задержку распространения 50 мс между двумя машинами, просто выполните следующие команды:Чтобы также внести 50% потерь пакетов, вы должны выполнить:
Здесь больше подробностей.
источник