前回、ARPパケットの扱いについて書いた。本(詳解TCP/IP Vol.1 プロトコル)によると、Gratuitous arpの送り手とターゲットのMACアドレスとIPアドレスは次のように設定するとある(前回載せたサンプルソースもこれでやっている)。
だが、これだとLinuxはARP応答を返してくれない。Linuxが応答するのは以下のGratuitous arpである。
- 送信元MACアドレス:arpパケットを送信するIFのMACアドレス
- 送信元IPアドレス:0.0.0.0(設定なし)
- ターゲットMACアドレス:FF:FF:FF:FF:FF:FF(Broadcast)
- ターゲットIPアドレス:調査したいIPアドレス
ちなみにWindowsのGratuitous arpは前者であるそうだ。このため、Linuxで設定済のIPアドレスをWindowsに設定するとき、エラーとならないで設定出来てしまうトラブルもあったりしたらしい(WindowsのGratuitous arpにLinuxが応答しないため)。
ARPのRFC(826)を見たら、ターゲットMACアドレスは原則未設定だが、実装の観点で便利であるならBroadcastでもokと書いてある。一方、 Gratuitous arpのRFC(5227)を見たらsender IP addressのすべての値には、0(ゼロ)がセットされていなければならないと書いてある(問い合わせた内容でARPキャッシュが更新される可能性もあるため)。
なので、実装的にはLinuxの方がRFCに準拠していると言えそうだ(だけど、ターゲットMACアドレスには0(ゼロ)がセットされているべきであるとなるので完全ではないけど)。