Как измерить и минимизировать потерю пакетов UDP

Как измерить и минимизировать потерю пакетов UDP

Иногда я сталкиваюсь с прерыванием голоса при звонках через приложение VOIP. Поскольку все приложения VOIP используют UDP для передачи данных, есть ли в Linux инструмент для измерения количества потерянных пакетов и измерения производительности сети.

Что может быть основной причиной потери пакетов UDP и какие меры необходимо предпринять при большой потере пакетов?

решение1

Одним из главных виновников потери UDP, особенно в локальных сетях, является переполнение буфера. Это может произойти в коммутаторе или на отправляющих или получающих серверах. Один из механизмов, который вы можете использовать в Linux для проверки потери пакетов, — это выполнить следующую команду:

watch -n 1 -d 'cat /proc/net/udp'

Это покажет вывод, аналогичный следующему, где последний столбец — количество отброшенных пакетов:

Every 1.0s: cat /proc/net/udp                                                                                                                                 Mon Sep 28 15:01:00 2015

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
11362: 00000000:3443 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 18224 2 ffff880808040000 0
19543: 00000000:D438 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 3809742 2 ffff8808060c8400 0
30819: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 12644 2 ffff88100f2b0400 0

Затем вы можете попробовать ряд различных приемов, чтобы попытаться решить эти проблемы (снова используя Linux в качестве примера):

  • убедитесь, что приложение, потребляющее данные, имеет достаточно ресурсов ЦП,
  • убедитесь, что потоки, выполняющие ввод-вывод, находятся как можно ближе к сетевому устройству
  • убедитесь, что размеры буферов udp достаточно велики для размещения данных (опять же, вы можете посмотреть вывод команды watch, чтобы увидеть, увеличиваются ли столбцы tx_queueили rx_queue), а затем увеличьте буферы udp с помощью sudo sysctl -w 'net/ipv4/udp_mem=xxx yyy zzzz', или sysctl -w 'net/core/rmem_default=????', или sysctl -w 'net/core/wmem_default=????'(обратите внимание, что xxx,yyyy,zzz определеныздесь

В целях бесстыдной саморекламы я создал продукт под названиемМенеджер потоков Pontus Visionкоторый непрерывно настраивает это автоматически.

решение2

Что может быть общей причиной потери пакетов UDP?

Перегрузка (слишком много пакетов) с отсутствием QOS (случайные потери пакетов, VoIP не обрабатывается с приоритетом) и/или неисправное оборудование (качество линии и т. д.) В первом случае приобретите оборудование с поддержкой QOS, во втором случае проверьте линии (оборудование, коммутаторы и т. д.) на предмет неисправностей.

Для подключения к Интернету вам понадобятся маршрутизаторы QOS на обоих концах, которых у вас не будет (если только ваш провайдер не предлагает VoIP, тогда у него, скорее всего, есть соответствующая инфраструктура). Тем не менее, поскольку ваш нисходящий канал обычно намного больше восходящего, локальный маршрутизатор, отдающий приоритет только нисходящему каналу, обычно «достаточно хорош».

Однако плохое качество линии — это сложная проблема.

решение3

Если вы страдаете от потери пакетов UDP, вы почти наверняка страдаете и от потери пакетов TCP. Разница в том, что TCP будет повторно передавать потерянные пакеты, а UDP — нет. Приложения VoIP не могут повторно передавать, потому что если бы они это делали, информация была бы бесполезной.

Я предполагаю, что ваши VoIP-звонки идут через Интернет. QoS может быть необходим, но он не принесет никакой пользы, если ваше Интернет-соединение работает неправильно. Используйте этотест потери пакетовчтобы проверить это. Он скажет вам, где происходит потеря пакетов, то есть у провайдера или на вашем локальном сайте.

Если на вашем локальном объекте возникли неполадки, то пришло время проверить ваш кабельный или DSL-модем на предмет хорошего соотношения сигнал/шум, выходной мощности и затухания (DSL).

Связанный контент