Перейти к содержимому

Частые проблемы с UDP-входом

UDP (User Datagram Protocol) — протокол передачи данных в локальных сетях или Интернете, обеспечивающий минимальные задержки и минимальную стабильность.

Перед началом поиска проблем рекомендуем использовать наш скрипт System Tune для оптимизации настроек Linux.

С помощью Astra вы можете проанализировать любой поддерживаемый источник. Просто запустите в консоли следующую команду:

Окно терминала
astra --analyze "udp://eth0@239.255.1.1:1234"

Чтобы остановить анализатор Astra, нажмите Ctrl+C. Подробнее о Astra MPEG-TS Analyzer

Tcpdump — популярная утилита для проверки сетевого трафика. Например, команда для проверки приёма UDP-мультикаста в группу 239.255.1.1 на интерфейсе eth0:

Окно терминала
tcpdump -pnni eth0 udp and host 239.255.1.1

Если вы не знаете актуальный интерфейс, его можно узнать командой:

Окно терминала
ip route get 239.255.1.1

Вывод tcpdump выглядит как множество строк с информацией об источнике, назначении и длине пакетов. Например:

21:38:42.143839 IP 192.168.88.100.33610 > 239.255.1.1.1234: UDP, length 1316
21:38:42.143868 IP 192.168.88.100.33610 > 239.255.1.1.1234: UDP, length 1316

Чтобы остановить tcpdump, нажмите Ctrl+C

Не работает — это когда в выводе Astra MPEG-TS Analyzer нулевой битрейт. Например:

Jan 27 09:00:00: INFO: Bitrate: 0 Kbit/s
Jan 27 09:00:01: INFO: Bitrate: 0 Kbit/s

В первую очередь проверьте трафик на сетевом интерфейсе с помощью tcpdump. Если нет информации о входящих пакетах, нужно проверить сетевую конфигурацию или настройки источника.

  1. Неверная настройка маршрутов. Если у вас несколько интерфейсов, проверьте, что маршрут к мультикаст-группе настроен правильно, или укажите имя интерфейса в udp-адресе.
  2. Проблемы с подключением. Проверьте, что сервер подключён к ethernet или создан vlan-интерфейс.
  3. Несовместимая версия IGMP. Например, ваш сервер использует IGMPv3, а сетевое оборудование поддерживает только IGMPv2: Настройка версии IGMP

Если tcpdump показывает информацию о UDP-пакетах, возможны следующие проблемы:

  1. UDP блокируется правилами файрвола. Проверьте настройки файрвола.
  2. Если у сервера несколько интерфейсов, добавьте маршрут к мультикаст-группе или настройте RP Filter: RP Filter и приём мультикаста в Linux

Ошибки CC (Continuity Counter) означают, что нарушена целостность потока пакетов. Ошибка может быть вызвана потерей или избытком пакетов:

Jan 27 09:00:00: INFO: Bitrate: 13259 Kbit/s
Jan 27 09:00:00: ERROR: CC: PID:18=3 PID:20=3 PID:256=24
Jan 27 09:00:01: INFO: Bitrate: 13261 Kbit/s
Jan 27 09:00:01: ERROR: CC: PID:18=5 PID:20=2

В первую очередь проверьте потери и ошибки на сетевом интерфейсе:

Окно терминала
ip -s link show eth0

Обратите внимание на RX errors. Некоторые сетевые карты предоставляют более подробную информацию о характере потерь:

Окно терминала
ethtool -S eth0

Потери могут быть не только на сетевых картах вашего сервера. Они также могут быть на портах сетевого оборудования. Как посмотреть эту информацию, ищите в документации производителя сетевого оборудования. Где eth0 — это имя интерфейса. После строки RX будет строка с числами. Третье число — это ошибки приёма UDP.

Настройки Quality of Service (QoS) на вашем сетевом оборудовании могут влиять на UDP-трафик. Убедитесь, что ваши настройки QoS отдают приоритет UDP-трафику и не ограничивают его пропускную способность.

Избыток пакетов проявляется как удвоенный битрейт в Astra MPEG-TS analyzer. Можно проверить с помощью tcpdump, где пакеты с одним и тем же назначением имеют разные источники:

21:38:42.143839 IP 192.168.88.100.33610 > 239.255.1.1.1234: UDP, length 1316
21:38:42.143868 IP 192.168.88.100.24081 > 239.255.1.1.1234: UDP, length 1316

Возможны две причины:

  • Если адрес источника одинаковый, а порты разные (в примере это 33610 и 24081), значит исходный сервер отправляет один и тот же канал дважды.
  • Если адреса источников разные, значит несколько серверов отправляют пакеты в одну и ту же группу.

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