
Сообщение от
RX2D
я так понимаю...Это обязательное условие?
В своё время занимался этим вопросом достаточно плотно. Всех тонкостей не помню, попробую описать по памяти.
Мы имеем трансивер и SmartSDR. Если обычные SDR-ки общаются по принципу: ПО умеет посылать запрос на определенный IP:порт c вопросом: "Трансивер здесь?"
SDR-трансивер обычно отвечает: "да, я трансивер". В зависимости от модели, трансивер отвечает по тому же порту (преимущественно UDP), или предлагает каждый раз новый порт в определенном пуле. Сами понимаете, такой трафик не представляет труда пробросить между любыми сетями.
С FlexRadio, не всё так просто.
При запуске трансивера и инициализации сетевого интерфейса, по сети начинают летать широковещательные пакеты с фразой: "я трансивер...я трансивер. Порт для соединения 4992".
Код:
IP трансивера to 224.0.0.251 MDNS 164 Standard query 0x0000 ANY IP трансивера.in-addr.arpa, "QM" question ANY c6a816x-evm.local, "QM" question HINFO ARMV7L LINUX A IP трансивера PTR c6a816x-evm.local
IP трансивера to 255.255.255.255 UDP 4992 → 4992
Запуская ПО SmartSDR, который видит эти пакеты и в списке показывает доступный трансивер.
Код:
IP трансивера to IP SmartSDR TCP 4992 → 49660[ACK] Seq=1 Ack=11 Win=341 Len=0
IP трансивера to IP SmartSDR TCP 4992 → 49660 [ACK] Seq=1 Ack=11 Win=341 Len=0
Там еще куча промежуточных запросов на порт 4993 по протоколу UDP и VITA 43.
Нажимая "Connect", ПО отправляет запрос на порт TCP4992
Код:
IP SmartSDR to IP трансивера TCP 49659 → 4992 [PSH, ACK] Seq=1 Ack=1 Win=251 Len=10
Прилетает ответ:
Код:
IP трансивера to IP SmartSDR TCP 4992 → 49659 [ACK] Seq=1 Ack=11 Win=341 Len=0
И вновь куча промежуточных запросов на порт 4993.
Код:
IP трансивера to IP SmartSDR UDP 102 47822 → 4993 Len=60 [ACK] Seq=1 Ack=11 Win=341 Len=0
IP трансивера to IP SmartSDR VITA 49 198 Extension data packet with stream ID
IP трансивера to IP SmartSDR VITA 49 1094 Extension data packet with stream ID
IP трансивера to IP SmartSDR IPv4 1514 Fragmented IP protocol (proto=UDP 17, off=0, ID=7c1d) [Reassembled in #21301]
IP трансивера to IP SmartSDR UDP 696 47822 → 4994 Len=2134 [PSH, ACK] Seq=1 Ack=1 Win=251 Len=10
IP SmartSDR to IP трансивера ICMP 74 Echo (ping) request id=0x0001, seq=22/5632, ttl=128 (reply in 21021)
IP трансивера to IP SmartSDR ICMP 74 Echo (ping) reply id=0x0001, seq=22/5632, ttl=64 (request in 21020)
Перестраиваемся по частоте, команды летят по порту TCP 4992.
Код:
IP SmartSDR to IP трансивера TCP 50048 → 4992 [PSH, ACK] Seq=1 Ack=1 Win=251 Len=10
IP трансивера to IP SmartSDR TCP 4992 → 50048 [ACK] Seq=1 Ack=11 Win=341 Len=0
Я специально описал так подробно трафик между трансивером и ПО. ФлексЫ пока не позволяют явно указывать IP-адрес трансивера, это дело за будущими версиями SmartSDR. Чтобы работать удаленно нужно держать включенным комп в сети с флексом и позаботься о двухстронней проброске аудио трафика с минимальной задержкой. Или создавать максимально прозрачный туннель между локальной и удаленной сетью (клиентом) с возможностью рассылки широковещательных пакетов (см. начало моего сообщения).
Хотя трафик между трансивером и ПО уже очень заманчив, всего около 4.2 Мбит/сек на приемник! Внутри сетевых пакетов пробрасывается всё и сразу.
Есть идеи?