バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
lwIPのIPアドレス、ポートへのBindについて。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
そもそもBindって何?
今回はlwIPのIPアドレス、ポートへのBindについて。
- lwIP自身の初期化
- ネットワークインターフェースの追加
- マルチキャストグループの参加
- ネットワークインターフェースの初期化
- リンクアップ
- UDP Socket生成
- IPアドレス、ポートへのBind ← これ
- UDP受信待ち
- EthnertFrameの疑似受信
そういえば、Socket使うときに良くBindって言葉出てくるけど、
これって結局何なのか良く知らないなー。
そういう場合はまず用語からー。
IT用語辞典 e-Wordsから持ってきたよ。
バインドとは、束縛(する)、拘束(する)、結びつける、関連付ける、などの意味を持つ英単語。ITの分野では、何らかの要素やデータ、ファイルなどが相互に関連付けられている状態や、そのような状態を実現する機能などのことを指すことが多い。設定値や入出力要素、プログラム上の変数など、種類の異なる複数の要素を互いに関連付け、互いに機能を利用したり、データを送受信できるようにしたり、変更を自動的に反映させたりできるようにする仕組みをこのように呼ぶことが多い。
IT用語辞典 e-Words より
んー?
特にSocketに限定した用語ってわけじゃないんだ?
そうだね。
Socketの場合はここ言う要素がIPアドレスとポート番号ってことになるねー。
これが無いと通信できないんで。
なるほど。
そう説明されるとしっくりくる。
IPアドレス、ポートへのBind
APIとしては、udp_bindって関数になる。
引数は以下。
pcb:udp_newで取得したPCB(protocol control block)
ipaddr:紐づけたいIPアドレス。すべてのネットワークインターフェースに紐づけたい場合はIP_ANY_TYPEを指定。
port:紐づけたいポート番号。0指定だと自動割り付け。
PCB(protocol control block)って何?
PCB(protocol control block)自体はlwIP独自の用語だと思う。
control blockはもう少し広く使われてる用語で、処理や通信の状態やパラメータを保持するための構造体のことを指すね。
ん?
オブジェクト指向のクラスみたいなイメージ?
Yes。
・・・というと怒る人もいるかもしれないが、
概念/利用方法の面では一緒と言えるね。
(うーん、あんまり深く聞くと宗教論争になりそうだからやめとこ。)
IPアドレスでIP_ANY_TYPEを指定すると、すべてのネットワークインターフェースに使えるんだ?
余談としては、
バークレーSocketでいうところのINADDR_ANYと一緒。
サーバ系とかで、そのインターフェースから来ても相手する必要がある場合に使用される。
(余談って言った。つまりスルーして良いってことだ。)
portで0だと自動割り付けってあるけど、これ使うことってあるの?
今回は受信用のUDP Socketになるんで、自動割り付けはしないけど、
送信用のUDP Socketの場合は特にポート番号がこれじゃないとダメってのないことが多いので、
自動割り付けを使うことはあるね。
ほー!
(まぁここらへんの話はlwIPに限った話じゃないんだけどねー。)
まとめ
まとめだよ。
- Bindという用語について調べた。
- lwIPのIPアドレス、ポートへのBindについて説明。
- IP_ANY_TYPEを指定すると、全インターフェースに紐づく。
- ポート0を指定すると自動割り付け。
- 送信用Socketの場合に利用されることが多い。
バックナンバーはこちら。
コメント