Броадкаст и обнаружение
Экран Броадкаст (Броадкаст и обнаружение) отправляет одно содержимое UDP сразу на много адресов и слушает с другой стороны, чтобы увидеть, кто ответит. С его помощью можно найти устройства в сети, проверить, что multicast-поток доходит до приёмника, или сыграть роль устройства, которое отвечает на пробы обнаружения.
- Блок Передатчик отправляет на список хостов, широковещательный адрес, multicast-группу или на каждый хост подсети — один раз или снова и снова как маяк.
- Блок Приёмник обнаружения слушает порт, вступает в multicast-группы, перечисляет каждого пира, который с ним говорит, и может отвечать на пробы.
DANGER
Широковещательная и multicast-рассылка и обход подсети достигают каждого устройства в сегменте сети, а не только того, которое вы имеете в виду, а маяк делает это снова и снова. Сначала проверьте, в какой сети вы находитесь, и отправляйте только в сети, которыми вы владеете или которые вам разрешено тестировать. Ограничения ниже — это ограничители, а не разрешение.
Отправка
- Выберите режим в поле Режим (см. ниже).
- Введите адресата: название поля зависит от режима. В сети с адресом IPv4 кнопка моя подсеть заполняет его по адресу этого компьютера.
- Выберите Полезная нагрузка и заполните его.
- Нажмите Отправить один раз: на каждый адрес уходит по одной датаграмме.
Режимы
| Режим | Адресат | Что происходит | По умолчанию |
|---|---|---|---|
| Список | Цели: записи IP:port или host:port, разделённые запятыми, точками с запятой или переводами строки — пробел их не разделяет. Имя разрешается, берётся его адрес IPv4, если он есть. | По одной датаграмме на каждый адрес | 127.0.0.1:9000, 127.0.0.1:9001 |
| Броадкаст | Адрес: 255.255.255.255:port или адрес, оканчивающийся на .255 | Одна датаграмма, которую получает каждый хост в локальной сети. Маршрутизаторы её дальше не передают. | 255.255.255.255:9000 |
| Multicast | Адрес: группа от 224.0.0.0 до 239.255.255.255 с портом | Одна датаграмма в группу; её получают только слушатели, вошедшие в группу | 239.1.1.1:9000 |
| Обход | CIDR-блок, a.b.c.d/nn, и Порт | Одна датаграмма на каждый пригодный хост блока, как unicast — для устройств, которые игнорируют широковещание | 192.168.1.0/24, порт 9000 |
При обходе адреса сети и широковещательный пропускаются (кроме /31 и /32), а базовый адрес, не совпадающий с адресом самой сети, округляется вниз до него: 192.0.2.77/30 обходит 192.0.2.77 и 192.0.2.78. Обход охватывает не более 1024 хостов, поэтому самый широкий блок — /22 (1022 хоста); более широкий отклоняется с указанием префикса, до которого его нужно сузить.
Широковещание, multicast-группы, обходы и подписки приёмника обнаружения на группы работают только по IPv4: в IPv6 широковещания нет. Режим Список может называть и хосты IPv6 (см. Параметры сокета).
Кнопка моя подсеть подставляет x.y.z.10:9000, x.y.z.11:9000 в режиме Список, x.y.z.255:9000 в режиме Броадкаст и x.y.z.0/24 в режиме Обход — по адресу этого компьютера x.y.z.w. Она исходит из сети /24.
Содержимое
| Полезная нагрузка | Что отправляется |
|---|---|
| OSC | OSC-сообщение: OSC-адрес и типизированные Аргументы, как на экране OSC. По умолчанию /hello/discover с текстом who-is-there. |
| текст | Текст в UTF-8 ровно в том виде, как набран, без терминатора. По умолчанию HELLO-PROBE. |
| сырой hex | Байты (hex) байт в байт — чтобы воспроизвести захваченный кадр или говорить на двоичном протоколе обнаружения. Пары шестнадцатеричных цифр; всё остальное между ними игнорируется. По умолчанию 48 45 4c 4c 4f. |
Параметры сокета
Пункт параметры сокета открывает ещё три параметра:
| Параметр | Что это | По умолчанию |
|---|---|---|
| Локальный адрес (источник) | Локальный IP:port, с которого уходят датаграммы. Зафиксируйте его, чтобы выбрать сетевую карту или порт-источник, на который отвечает устройство. 0.0.0.0:0 — любой. | 0.0.0.0:0 |
| TTL / хопы | Через сколько маршрутизаторов может пройти датаграмма, 1–255. Для multicast это предельное число хопов: 1 оставляет её в этой сети. | 1 |
| возвращать копию на этот хост | Только для multicast: доставлять датаграммы группы и на этот компьютер, чтобы слушатель на нём их слышал | включено |
Если в поле Локальный адрес (источник) оставлено значение по умолчанию, датаграммы уходят с сокета IPv4, а если все адресаты IPv6 — с сокета IPv6. Список, где есть и те и другие, отправляется с сокета IPv4, и его адресаты IPv6 завершаются ошибкой; отправляйте их отдельным списком или задайте в поле Локальный адрес (источник) адрес IPv6.
Результат
Блок Последняя отправка показывает, что ушло: Целей, Пакеты, Объём и Ошибки, а также первые восемь адресатов, до которых дошло («… ещё n» для остальных). Ошибка по одному адресату не останавливает остальные; строка консоли называет, сколько отправок не удалось.
Повтор в виде маяка
Маяк отправляет один и тот же раунд — по одной датаграмме на каждый адрес — по расписанию, пока вы его не остановите. Он нужен устройствам, которые ждут периодического объявления.
- Настройте режим, адресата и содержимое, как для одиночной отправки.
- В разделе Повторять как маяк задайте Темп (/с), а если маяк должен остановиться сам, — Раундов или Секунд.
- Нажмите Запустить маяк. Завершить маяк можно кнопкой Остановить маяк или остановкой его задачи в полосе задач.
| Поле | Что это | По умолчанию |
|---|---|---|
| Темп (/с) | Раундов в секунду; должно быть больше 0 | 2 |
| Раундов | Остановиться после стольких раундов; 0 — без ограничения | 0 |
| Секунд | Остановиться через столько секунд; 0 — без ограничения | 0 |
Темп, умноженный на число адресатов, не может превышать 50 000 датаграмм в секунду. Поэтому обход /24 (254 хоста) можно повторять не чаще примерно 196 раз в секунду. Пока маяк работает, Последняя отправка показывает Целей (число адресатов в каждом раунде, начиная с первого отчёта), итоги, Раундов и Пак/с (датаграмм в секунду); значения обновляются четыре раза в секунду, а кнопка Отправить один раз недоступна. Маяк, у которого больше 32 датаграмм завершились ошибкой и ни одна не отправлена — нет маршрута, широковещание запрещено, — останавливается сам и называет причину.
Прослушивание устройств
Блок Приёмник обнаружения занимает порт UDP и записывает каждого пира, который на него отправляет: то, что отвечает на пробу, или то, что устройство объявляет само.
- Задайте поле Адрес прослушивания — порт, на который отправляют устройства.
- Для multicast перечислите группы в поле Подписка на multicast-группы.
- Нажмите Слушать. Параметры блокируются, пока вы не нажмёте Остановить.
| Поле | Что это | По умолчанию |
|---|---|---|
| Адрес прослушивания | Где слушать, IP:port. 0.0.0.0 слушает на всех сетевых картах. | 0.0.0.0:9000 |
| Подписка на multicast-группы | Группы IPv4 multicast, в которые нужно вступить, через запятую; пусто — только unicast и широковещание | 239.1.1.1 |
| Интерфейс | IPv4-адрес сетевой карты, на которой вступать в группы; пусто — выбирает система | пусто |
| делить порт | Слушать порт, который использует и другая программа (SO_REUSEADDR). Работает, только если и та программа разрешает совместное использование. | включено |
| отвечать на запросы | Отвечать на пробы, как это делало бы устройство (ниже) | выключено |
Пиры
Список Пиры показывает, кто что-либо отправил, самые недавние сверху; над ним — число увиденных пиров, услышанные пакеты и отправленные ответы:
| Столбец | Что в нём |
|---|---|
| Пир | IP:port отправителя; точка рядом показывает, слышали ли его за последние 3 секунды |
| Прот. | osc, если его последняя датаграмма декодировалась как OSC, иначе udp |
| Пакеты | Сколько он отправил |
| Давность | Секунд с его последней датаграммы |
| Последнее сообщение | Его последняя датаграмма: OSC-адрес и аргументы или начало текста |
Список обновляется несколько раз в секунду и вмещает до 512 пиров; сверх этого пакеты по-прежнему считаются, но у новых пиров строки нет.
Ответы на пробы
С параметром отвечать на запросы приёмник играет роль устройства: на каждую полученную датаграмму он отвечает с порта прослушивания на адрес и порт отправителя.
| Поле | Что это | По умолчанию |
|---|---|---|
| Полезная нагрузка | Ответ: OSC, текст или hex, как при отправке | OSC /hello/here с текстом signal-lab |
| Задержка ответа (мс) | Подождать столько перед ответом, как это делает медленное устройство | 0 |
| Только если содержит | Отвечать только на датаграммы, декодированный текст которых содержит это — OSC-адрес и аргументы или начало текста; пусто — на каждую | пусто |
Приёмник никогда не отвечает на датаграмму, идентичную его собственному ответу, поэтому два приёмника, нацеленные друг на друга, не будут бесконечно отвечать друг другу.
Брандмауэры и общие порты
Широковещательный и multicast-трафик с других компьютеров по умолчанию блокируется большинством брандмауэров Windows: разрешите Signal Lab в частных сетях, когда приложение предложит. Широковещание никогда не проходит через маршрутизатор. Чтобы слушать порт, который уже занят настоящей службой, обе стороны должны разрешить совместное использование (здесь — делить порт); без этого занятый порт отклоняется с подсказкой включить его. См. Устранение неполадок.
В Инспекторе
Когда захват включён, трафик экрана появляется с протоколом osc или udp — в зависимости от содержимого:
| Источник | Что это | Сколько |
|---|---|---|
broadcast | Отправить один раз: каждая датаграмма с вердиктом fan-out, broadcast, multicast или sweep; неудавшаяся — с error: … | каждая |
beacon | Раунды маяка | не более одного раунда за 50 мс |
discovery | Датаграммы, которые получает приёмник | не более одной за 40 мс |
discovery | Его ответы, с вердиктом auto-reply | каждый |
То, что Инспектор опускает у маяка или приёмника, подсчитывается: следующий нарисованный им кадр несёт это число в вердикте, +n not shown (для маяка — по одному кадру на каждый адрес каждого пропущенного раунда). См. Инспектор.
На сервере или в Docker
На сервере экран отправляет и слушает в сети сервера. В Docker широковещание, multicast и обнаружение достигают локальной сети, только когда контейнер использует сеть хоста (--network host) на хосте Linux. В сети-мосте Docker по умолчанию или в Docker Desktop работает только unicast к хостам, до которых контейнер может добраться.
В других местах
signallab send udpотправляет одну датаграмму на один хост; широковещания, multicast и обхода из командной строки нет.- Узел UDP-датаграмма отправляет текстовую датаграмму на один или несколько хостов, а узел Ждать UDP ждёт датаграмму. См. UDP и TCP.
- Чтобы сыграть роль устройства, которое отвечает по правилам — по нескольким правилам, с ответами, собранными из того, что пришло, — используйте эмулятор UDP-устройство или OSC-устройство. См. Эмуляторы.
Проблемы
| Что вы видите | Обычная причина |
|---|---|
… is not a broadcast address | Режим Броадкаст принимает 255.255.255.255:port или адрес, оканчивающийся на .255. Для другой маски подсети используйте Обход. |
… is not a multicast group | Адрес вне диапазона 224.0.0.0–239.255.255.255. |
… spans … addresses, and a sweep reaches at most 1024 hosts | Блок шире /22; сузьте его. |
Set the port to sweep | Поле Порт равно 0. |
… is over the … pps limit | Темп, умноженный на число адресатов, превышает 50 000 в секунду: снизьте Темп (/с) или сузьте круг адресатов. |
… is already in use — turn on “share the port” to listen alongside it | Порт занят другой программой; отметьте делить порт. |
Cannot join the multicast group … | Группа или Интерфейс непригодны на этом компьютере — нет сетевой карты с таким адресом или нет multicast-маршрута. |
| Отправлено, но никто не отвечает | Устройства слушают другой порт; здешний брандмауэр не пускает их ответы; между вами и ими есть маршрутизатор; или, в Docker, контейнер не в сети хоста. |
| Пробы уходят, но приёмник обнаружения не слышит ответов | Многие устройства отвечают на адрес и порт, с которых пришла проба, — то есть на собственный сокет передатчика, который экран не читает. Слушайте порт, на который отвечают устройства, или отправляйте пробу из эксперимента: узел UDP-датаграмма с параметром ждать ответ отправляет и слушает на одном порту. |
Все сообщения об ошибках перечислены в разделе Сообщения об ошибках.