
Я тестирую кодек Opus и стек VoIP, который его использует. У меня есть синтетическая тестовая утилита, которая отправляет внутренний трафик Opus RTP между двумя портами на интерфейсе loopback + она записывает полученный звук в файлы для дальнейшего анализа.
Используя утилиту Linux «tc», я могу моделировать различные сбои в работе сети.
Однако я застрял на имитации такой вещи, как "внезапная задержка сети". Извините за мой плохой английский!
Это должно выглядеть так, как будто сеть останавливается на 1 секунду, а затем все задержанные пакеты отправляются как можно скорее своим получателям.
Возможно ли реализовать это с помощью утилиты «tc»?
Я попытался запустить команду «tc», чтобы установить задержку 1000 мс во время синтетического теста, но это не дало желаемого эффекта.
Может ли кто-нибудь дать совет?
Спасибо :)
решение1
Это должно выглядеть так, как будто сеть останавливается на 1 секунду, а затем все задержанные пакеты отправляются как можно скорее своим получателям.
Это на самом деле возможно... Отman tc
:
нетем
Сетевой эмулятор — это усовершенствованная версия средств управления трафиком Linux, позволяющая добавлять задержку, потерю пакетов, дублирование и другие характеристики к пакетам, исходящим из выбранного сетевого интерфейса.
... и изman tc-netem
:
слот
отложить доставку накопленных пакетов в пределах слота. Каждый доступный слот может быть настроен с минимальной задержкой для получения и необязательной максимальной задержкой.
... Итак, вы можете сделать что-то вроде этого:
sudo tc qdisc add dev interface root netem slot 1000ms 1000ms
... где interface
находится предполагаемое имя сетевого интерфейса, как показано, например, в выводе ip a
.
Это задержит все переданные пакеты на указанном интерфейсе, 1000ms
а затем освободит их все сразу (в рывке).
Уведомлениечто, delay
с другой стороны, добавит задержку в размере 1000ms
к каждому переданному пакету на указанном интерфейсе.