Частые проблемы с UDP-входом
UDP (User Datagram Protocol) — протокол передачи данных в локальных сетях или Интернете, обеспечивающий минимальные задержки и минимальную стабильность.
Оптимизация системы
Заголовок раздела «Оптимизация системы»Перед началом поиска проблем рекомендуем использовать наш скрипт System Tune для оптимизации настроек Linux.
Программы для анализа вашей проблемы
Заголовок раздела «Программы для анализа вашей проблемы»Анализ UDP с помощью Astra MPEG-TS Analyzer
Заголовок раздела «Анализ UDP с помощью Astra MPEG-TS Analyzer»С помощью Astra вы можете проанализировать любой поддерживаемый источник. Просто запустите в консоли следующую команду:
astra --analyze "udp://eth0@239.255.1.1:1234"Чтобы остановить анализатор Astra, нажмите Ctrl+C. Подробнее о Astra MPEG-TS Analyzer
Анализ UDP с помощью Tcpdump
Заголовок раздела «Анализ UDP с помощью Tcpdump»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 131621:38:42.143868 IP 192.168.88.100.33610 > 239.255.1.1.1234: UDP, length 1316Чтобы остановить tcpdump, нажмите Ctrl+C
UDP совсем не работает
Заголовок раздела «UDP совсем не работает»Не работает — это когда в выводе Astra MPEG-TS Analyzer нулевой битрейт. Например:
Jan 27 09:00:00: INFO: Bitrate: 0 Kbit/sJan 27 09:00:01: INFO: Bitrate: 0 Kbit/sНет UDP-пакетов на интерфейсе
Заголовок раздела «Нет UDP-пакетов на интерфейсе»В первую очередь проверьте трафик на сетевом интерфейсе с помощью tcpdump. Если нет информации о входящих пакетах, нужно проверить сетевую конфигурацию или настройки источника.
- Неверная настройка маршрутов. Если у вас несколько интерфейсов, проверьте, что маршрут к мультикаст-группе настроен правильно, или укажите имя интерфейса в udp-адресе.
- Проблемы с подключением. Проверьте, что сервер подключён к ethernet или создан vlan-интерфейс.
- Несовместимая версия IGMP. Например, ваш сервер использует IGMPv3, а сетевое оборудование поддерживает только IGMPv2: Настройка версии IGMP
Программа не может принимать UDP-пакеты
Заголовок раздела «Программа не может принимать UDP-пакеты»Если tcpdump показывает информацию о UDP-пакетах, возможны следующие проблемы:
- UDP блокируется правилами файрвола. Проверьте настройки файрвола.
- Если у сервера несколько интерфейсов, добавьте маршрут к мультикаст-группе или настройте RP Filter: RP Filter и приём мультикаста в Linux
Ошибки CC при приёме UDP
Заголовок раздела «Ошибки CC при приёме UDP»Ошибки CC (Continuity Counter) означают, что нарушена целостность потока пакетов. Ошибка может быть вызвана потерей или избытком пакетов:
Jan 27 09:00:00: INFO: Bitrate: 13259 Kbit/sJan 27 09:00:00: ERROR: CC: PID:18=3 PID:20=3 PID:256=24Jan 27 09:00:01: INFO: Bitrate: 13261 Kbit/sJan 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.
Настройка QoS
Заголовок раздела «Настройка QoS»Настройки 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 131621:38:42.143868 IP 192.168.88.100.24081 > 239.255.1.1.1234: UDP, length 1316Возможны две причины:
- Если адрес источника одинаковый, а порты разные (в примере это 33610 и 24081), значит исходный сервер отправляет один и тот же канал дважды.
- Если адреса источников разные, значит несколько серверов отправляют пакеты в одну и ту же группу.
В обоих случаях нужно проверить настройки удалённого сервера. Если это невозможно или как временное решение, можно отбросить пакеты от второго источника с помощью файрвола.