バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
lwIPのマルチキャストグループの参加について。
登場人物
博識フクロウのフクさん
イラスト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
マルチキャストグループの参加
今回はマルチキャストグループの参加をlwIPでやる場合の話だね。
- lwIP自身の初期化
- ネットワークインターフェースの追加
- マルチキャストグループの参加 ← これ
- ネットワークインターフェースの初期化
- リンクアップ
- UDP Socket生成
- IPアドレス、ポートへのBind
- UDP受信待ち
- EthnertFrameの疑似受信
さっそく使用するAPIを言うと、
igmp_joingroup_netif
という関数になる。
マルチキャストグループって、複数あることもあるの?
あり得るよ。
その場合は、このマルチキャストグループの数だけ呼び出すって感じになるのかな?
そのイメージであってる。
まぁ今回は一回呼ぶだけでOKなはずだよ。
うん。了解。
igmp_joingroup_netif関数
igmp_joingroup_netif関数は以下の引数を持ってる。
netif: グループに追加したいネットワークインターフェース
groupaddr: 参加するグループのIPアドレス
おー。
以外とシンプルだ。
参加するグループのIPアドレスってのは例のMACアドレスと紐づいたIPアドレスだよね?
MACアドレスが
01-00-5e-00-01-01
だったら、
IPアドレスは
236, 0, 1, 1
になるっていう。
そうそう。
たしかここで説明してたね。
igmp_joingroup_netif関数を読んだ際の挙動
あと、igmp_joingroup_netif関数を呼ぶと、
とあるパケットが送信されることになってる。
え?
そうなの?
関数名の一部にもなってるが、IGMPというプロトコルのパケットが送信される。
IGMPの説明はWikipediaから持ってきた。
Internet Group Management Protocol (IGMP) とは、IPネットワーク上でマルチキャスト(特定の一対多または多対多通信)を行うために、マルチキャストに参加するホストのグループを設定し、ネットワークに通知するための通信プロトコルである。マルチキャストは、動画や音楽のストリーミングなど、同時に多数のホストへ同一のデータを送信するときに通信を効率化する技術である。
Wikipedaより
ほー。
確かによくよく考えると、どういうグループがネットワーク上で形成されてるかネゴシエーションする必要はあるだろうから、
それが、IGMPで通知されるわけかー。
まぁ今回はIGMPを解析するわけじゃないんで、
予備知識として知っておいて。
おー。
まとめ
まとめだよ。
- lwIPのマルチキャストグループの参加について説明。
- igmp_joingroup_netif関数を使用。
- 上記関数を呼び出すとIGMPでグループ参加を通知するためのパケットが送信される。
バックナンバーはこちら。
コメント