使用 OT CLI 測試 UDP 功能

前往 GitHub 查看原始碼

OpenThread 提供 UDP 指令,您可以搭配 Thread 網路使用,以測試 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 通訊埠的目的地。如未在 udp send 指令中指定 IP 位址和通訊埠,則訊息會使用範例通訊端傳送至 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
    

    這個指令假設 Node 2 已找到 Node 1 的位址。此外,在這個範例中,Node 2 的管理員選擇不繫結通訊端。這是因為節點 2 管理員想要傳送訊息至節點 1,而不想把它使用的 IP 位址和通訊埠做為節點 2 來源。在此情況下,通訊端會隨機選擇 IP 位址和通訊埠。

    如需 udp send 的完整選項,請參閱 udp 傳送

  2. 節點 1 確認收到來自 Node 2 的訊息:

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

將通訊端連至對等通訊端位址,然後在兩個節點之間傳送訊息。

此範例與前一個範例類似,但展示了使用 UDP 通訊端的一些彈性。使用此方法時,您必須先將通訊端連線至對等通訊端位址,因此不需要在每次執行 udp send 時指定對等 IP 位址和通訊埠。

  1. 在節點 1 上,開啟 UDP 通訊端。

    udp open
    Done
    
  2. 在節點 1 上,繫結通訊端。

    udp bind :: 1234
    Done
    
  3. 在節點 2 上,開啟 UDP 通訊端。

    udp open
    Done
    
  4. 在節點 2 中,使用 udp connect 指令開啟與 Node 1 之間的通訊。

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

    如需 udp connect 的完整選項,請參閱 udp connect

  5. 在節點 2 上,使用 udp send 指令傳送訊息至 Node 1,但不使用 udp send 指令語法指定 ipport

    udp send hello
    Done
    

    如未指定 ipportudp send 指令會使用 udp connect 指令中指定的 ipport