Что останавливает наши UDP-пакеты (как он знает, что маршрут не работает)?

У нас есть сервер (камера), отправляющий видеопакеты RTSP через UDP. На клиентском сайте он перемещается по нескольким прыжкам, один из которых может быть ненадежным соединением WiFi, которое выдает нечетный пакет или пять. Обычно это происходит незамеченным, но иногда он убивает поток в течение нескольких секунд и вызывает неудовольствие клиентов (я знаю, их сеть cr * p – это как-то наша проблема …)

При тестировании с использованием tc для моделирования неудобного соединения мы обнаружили странную ситуацию: если мы разорвем соединение в обратном направлении ( пакеты отбрасываются молча ), через несколько секунд поток пакетов UDP с нашей камеры прекратится, хотя клиент RTSP ( Live555 Wis-Streamer) по-прежнему считает, что это весело Squirting UDP пакеты вверх по трубе.

Это странно, так как очевидно, что UDP-пакеты не ACK'd, а физическая связь никогда не падает, поэтому наша система не знает, что пакеты падают в бит-ведро дальше по цепочке, и стример не знает, что никто не слушает его (тайм-аут сеанса стримера не истекает до конца).

EDIT: Мы видим, что ARPing (Who has < client >) в момент остановки пакетов UDP, но до тех пор, пока он не скажет стеку, что соединение упало.

Поэтому у меня есть два вопроса:

  1. Есть ли какой-то другой механизм, с помощью которого сетевой стек может сказать, что соединение имеет проблемы?
  2. Является ли сетевой стек молчащими пакетами при определенных обстоятельствах?

Чтобы продемонстрировать нашу установку тестирования:

Нормальное состояние, подключение в обоих направлениях:

 Our server <==> Switch <==> TC <==> Switch <==> PC | | Wireshark <-- TAP | | Wireshark <----------------------- TAP 

Состояние сбоя, сброс пакетов TC, возвращающихся на наш сервер:

 Our server --> Switch --> TC <==> Switch <==> PC | | Wireshark <-- TAP | | Wireshark <----------------------- TAP 

  • SSH внезапно перестает работать: «Write Failed: Broken Pipe»
  • Возможно ли IP over USB 3.1 type-C между двумя хостами Linux на скорости 10 Гбит / с?
  • Как включить перенаправление портов, но только для некоторых IP-адресов и блокировки других?
  • Как вы добавляете IP-адрес виртуальной сети из командной строки ядра?
  • Маршрутизация пакетов из одного интерфейса в другой
  • Как разрешить удаленные подключения mysql через определенный интерфейс
  • Как получить свой собственный IP-адрес и сохранить его в переменной в сценарии оболочки?
  • Невозможно получить доступ к содержимому HTTP, но HTTPS и SSH прекрасны
  • 2 Solutions collect form web for “Что останавливает наши UDP-пакеты (как он знает, что маршрут не работает)?”

    Как только вы разорвете соединение, вы должны начать получать недостижимые пакеты ICMP, чтобы уведомить вас о том, что соединение нарушено. Это обычное поведение IP.

    Существуют инструменты, которые будут отслеживать и отображать ICMP-пакеты. Другие инструменты могут использоваться для сброса или захвата всего трафика, соответствующего критериям выбора.

    Возможно, лучше использовать собственный прокси-сервер для удаления пакетов.

    Ну, похоже, что таблица ARP стала устаревшей (даже если мы потоки UDP как сумасшедшие, что не пинает тайм-ауты ARP, а трафик TCP намного более разрежен при нормальной работе). Увеличение тайм-аутов прекратило появление проблемы для «разрывов» менее ~ 2 минут (в этот момент время сеанса клиента RTSP истекает):

     ARP gc_staletime extended from 60sec to 360sec ARP base_unreachable time extended from 30sec to 240sec 

    К сожалению, это заняло довольно много слов, поскольку мы находимся на Busybox без команды arp , но теперь она кажется надежной для ситуации, которую мы пытаемся обработать.

    Я все еще хочу понять, как работает сетевой стек – в тот момент, когда таблица ARP / запись устарела, она перестает отправлять пакеты, но, похоже, не вызывает ошибок в цепочке в коде, который пытается отправить пакеты.

    Interesting Posts

    Использование grep / sed / awk для классификации записей в файле журнала

    Лучший способ применить формулу к определенному столбцу входного файла и передать все остальные столбцы как-есть

    Как заменить все, кроме определенного шаблона с sed?

    Как избавиться от ненужных строк в gnuplot

    Как Linux знает свои драйверы?

    Как я могу выполнить команду `history` и не иметь номеров строк, чтобы я мог копировать несколько строк?

    Меню правой кнопки мыши в Nemo отсутствует «создать ярлык» и «скопировать / переместить в»

    Каковы минимальные приложения корневой файловой системы, необходимые для полной загрузки Linux?

    Извлечь строку, если первое поле содержит точку

    Проблема с резольвером?

    Альтернатива не KDE для KNotes?

    Конкатенация колонн горизонтально. Печать только строк, которые пересекаются в 1-й колонке

    Отсоединить клавиатуру от ядра

    Сделать Ekiga всегда на динамиках

    Каков самый быстрый способ отправки огромного количества данных между двумя компьютерами?

    Linux и Unix - лучшая ОС в мире.