Тестирование функциональности UDP с помощью OT CLI

Посмотреть исходный код на GitHub

OpenThread предлагает команды UDP для использования в сети потоков для проверки одноранговой связи между сокетами UDP. cli udp предоставляет один пример сокета, с которым взаимодействуют все команды udp .

Следующие примеры демонстрируют, как можно открывать и привязывать сокеты, как подключать сокеты и как отправлять сообщения с использованием сокетов UDP.

UDP-команды

Чтобы получить список команд udp , введите help :

udp help
bind
close
connect
linksecurity
open
send
Done

open команду

Используйте команду udp open , чтобы открыть сокет и начать связь UDP. Затем у вас есть возможность привязать сокет к определенному IP-адресу и порту.

команда bind

После open сокета вы можете запустить команду udp bind , чтобы назначить IPv6-адрес и порт открытому сокету. Это связывает сокет для связи. Назначение адреса и порта IPv6 также называется присвоением имени сокету. Если вы не bind сокет напрямую, подключение сокета ( udp connect ) или использование его в команде udp send привязывает сокет к эфемерному порту.

команда connect

Команда udp connect может использоваться для подключения примера сокета к адресу однорангового сокета. Затем вы можете выполнить команду udp send , чтобы отправить сообщение партнеру. Если сокет еще не привязан, команда udp connect также привязывает сокет.

send команду

Команда udp send отправляет сообщение с использованием примера сокета в пункт назначения, IP-адрес и порт UDP которого можно указать с помощью командных переменных. Если IP-адрес и порт не указаны в команде udp send , сообщение отправляется с использованием примера сокета в пункт назначения, указанный в команде udp connect . Выдача команды udp send привязывает сокет к временному порту, если сокет еще не был привязан.

команда close

Рекомендуется использовать команду udp close для закрытия сокета, когда сокет больше не нужен.

команда linksecurity

Команда udp linksecurity может использоваться для включения или отключения безопасности канального уровня для сообщений.

Отправить сообщение между двумя узлами

  1. На узле 1 откройте сокет UDP.

    udp open
    Done
    
  2. На узле 1 привяжите сокет.

    udp bind :: 1234
    Done
    

    Использование :: означает, что bind должна использовать неуказанный адрес IPv6, тем самым стек UDP/IPv6 назначает IPv6-адрес привязки. Полные параметры udp bind , такие как привязка к сетевому интерфейсу, см. в разделе привязка udp .

1. На узле 2 откройте сокет UDP.

udp open
   Done
   

  1. На узле 2 отправьте простое сообщение на узел 1.

    udp send fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234 hello
    Done
    

    Эта команда предполагает, что узел 2 уже обнаружил адрес узла 1. Кроме того, в этом примере администратор узла 2 решил не привязывать сокет. Это связано с тем, что администратор узла 2 хочет отправить сообщение на узел 1, не заботясь о том, какие из его IP-адресов и портов используются в качестве источника узла 2. В этом сценарии сокет выбирает IP-адрес и порт случайным образом.

    Полные параметры udp send см. в разделе Отправка по протоколу udp .

  2. Узел 1 подтверждает получение сообщения от Узел 2:

    5 bytes from fdde:ad00:beef:0:dac3:6792:e2e:90d8 49153 hello
    

Подключите сокет к адресу однорангового сокета, затем отправьте сообщение между двумя узлами.

Этот пример похож на предыдущий, но демонстрирует некоторую гибкость использования сокетов UDP. Используя этот метод, вы сначала подключаете сокет к адресу однорангового сокета, после чего вам не нужно указывать IP-адрес и порт однорангового узла каждый раз, когда вы выполняете udp send .

  1. На узле 1 откройте сокет UDP.

    udp open
    Done
    
  2. На узле 1 привяжите сокет.

    udp bind :: 1234
    Done
    
  3. На узле 2 откройте сокет UDP.

    udp open
    Done
    
  4. На узле 2 используйте команду udp connect , чтобы открыть связь с узлом 1.

    udp connect fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234
    Done
    

    Полные варианты udp connect см. в разделе udp Connect.

  5. На узле 2 используйте команду udp send для отправки сообщения на узел 1, но не указывайте ip и port в синтаксисе команды udp send .

    udp send hello
    Done
    

    Если не указывать ip и port , команда udp send использует ip и port , указанные в команде udp connect .