バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
lwIP PCシミュレーション結果のうちの起動直後の話。
登場人物
博識フクロウのフクさん

イラスト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のPC上でのシミュレーション構成

念のため、シミュレーション構成の再確認をしておこうか?

はいよ。

とりあえず起動

まずはとりあえず起動してみよう。
そして、起動前にWiresharkでパケットキャプチャできるようにしておこう。

ん?
なんで?

たぶん、起動直後になんか飛ぶ。

(なんかって・・・。)

まぁ言われた通りやってみよう。


あ、確かに何か飛んだ!

うん。
GARPとIGMPが飛んでるね。

GARPとIGMP?

IGMPは以前やったような気がするが、GARPは初めて出てきた言葉かな?

ちなみに、IGMPはここでやったね。
マルチキャストグループ参加用のプロトコルだよ。
GARPとは

GARPの前にARPはわかる?

んー、MACアドレスとIPアドレスを紐づけるテーブルを作るやつだっけ?

分からん場合はWikipedia。(他力本願)
Address Resolution Protocol (アドレス解決プロトコル、略称:ARP、アープ)は、与えられたインターネット層アドレス(一般的にはIPv4アドレス)に対応するリンク層アドレス(MACアドレスなど)を発見するために使用される通信プロトコルである。この対応付けは、インターネット・プロトコル・スイートにおける重要な機能である。ARPは、1982年に RFC 826(インターネット標準 STD 37)で定義され、その後 RFC 5227, RFC 5494 により内容のエンハンスが行われている。
Wikipediaより

GARPはこのARPの一種になるね。

ということはこれもWikipediaだね。(他力本願)
Gratuitous ARP (GARP)はARPの一つで、ARPパケットの送信元ホスト自身のIPアドレスに対するARP(IPアドレスに対応するMACアドレスの取得)である。主に、ホストにIPアドレスを割り当てる際に、他のホストがすでに同じIPアドレスを使用していないか確認したり、相手の通信機器のARPテーブルに送信元ホストのIPアドレスとMACアドレスを追加させるために使用する。(DHCPによりIPアドレスを配布された後、当該IPアドレスが既に利用されていないかを確認する場合に用いる)ARP本来の目的である相手の接続機器のIPアドレスに対するMACアドレスの取得のために使用するわけではない。
Wikipediaより

ん?なんかちょっと目的が違う???
GARPの目的

まぁWikipediaに記載された通りなんだけど、
組み込みならではの話を付け加えておこう。

あー、それは面白そう。

組み込みシステムの場合は固定IPであることが多い。
この固定IPが他の装置と衝突している可能性があるが十分にある。
これをいち早く検知するために早々にGARPで宣言することが多い。
という感じ。

一般的にPCだと当たり前であまり気にしないポイントでも
組み込み系だとその当たり前が当たり前じゃないこととかありそうだもんねー。

まぁ組み込みLinux級になるとPCと変わらん性能になるだろうけど、
ベアメタル(OSなし)、RTOSで実現してる場合はPCと同じというわけには中々いかないねー。

それで、早々にGARPで問題が見えるようにしているわけか。
まとめ

まとめだよ。
- lwIP起動直後に送信しているパケットがある。
- GARPとIGMP。
- IGMPはマルチキャストグループ参加。
- GARPはARPの一種だが、聞かれて答えるタイプではなく能動的に宣言するタイプ。
- 組み込み機器とかはPCのように柔軟な対応ができないことが多いため、早々にGARPでIPアドレスを宣言することが多い。
バックナンバーはこちら。
コメント