OpenThread には、UDP ソケット間のピアツーピア通信をテストするための Thread ネットワークで使用する UDP コマンドが用意されています。cli udp
には、すべての udp
コマンドがやり取りするサンプル ソケットが 1 つ用意されています。
以下の例は、ソケットを開いてバインドする方法、ソケットを接続する方法、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
コマンドを使用すると、メッセージのデータリンク レイヤ セキュリティを有効または無効にできます。
2 つのノード間でメッセージを送信する
ノード 1 で UDP ソケットを開きます。
udp open
Doneノード 1 でソケットをバインドします。
udp bind :: 1234
Done::
の使用は、bind
が未指定 IPv6 アドレスを使用し、UDP/IPv6 スタックにバインディング IPv6 アドレスを割り当てる必要があることを示します。ネットワーク インターフェースへのバインディングなど、udp bind
の完全なオプションについては、udp bind をご覧ください。
1 ノード 2 で UDP ソケットを開きます。
udp open
Done
ノード 2 でノード 1 に単純なメッセージを送信します。
udp send fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234 hello
Doneこのコマンドは、ノード 2 がノード 1 のアドレスをすでに検出していることを前提としています。また、この例では、ノード 2 の管理者がソケットをバインドしないことを選択しました。これは、ノード 2 管理者が、どの IP アドレスとポートがノード 2 の送信元として使用されているかを考慮せずにノード 1 にメッセージを送信するためです。このシナリオでは、ソケットは IP アドレスとポートをランダムに選択します。
udp send
の完全なオプションについては、udp send をご覧ください。ノード 1 がノード 2 からのメッセージの受信を確認します。
5 bytes from fdde:ad00:beef:0:dac3:6792:e2e:90d8 49153 hello
ソケットをピアソケット アドレスに接続してから、2 つのノード間でメッセージを送信する
この例は前の例と似ていますが、UDP ソケットを使用する際の柔軟性を示しています。この方法では、まずソケットをピア ソケット アドレスに接続します。これにより、udp send
を実行するたびにピア IP アドレスとポートを指定する必要はありません。
ノード 1 で UDP ソケットを開きます。
udp open
Doneノード 1 でソケットをバインドします。
udp bind :: 1234
Doneノード 2 で UDP ソケットを開きます。
udp open
Doneノード 2 で、
udp connect
コマンドを使用してノード 1 との通信を開きます。udp connect fdde:ad00:beef:0:bb1:ebd6:ad10:f33 1234
Doneudp connect
の完全なオプションについては、UDP 接続をご覧ください。ノード 2 で、
udp send
コマンドを使用してノード 1 にメッセージを送信します。ただし、udp send
コマンド構文にip
とport
は指定しないでください。udp send hello
Doneip
とport
を指定しないと、udp send
コマンドはudp connect
コマンドで指定されたip
とport
を使用します。