WinXPでのARPとフラグメントされたIPパケットの扱い
ええ、普通の人にとってはどうでもいいことですが。Windows XPでのフラグメントされたIPパケットを送信しようとしたときに、「たまたま」レイヤ2が解決できていない状況のときにはARPを発行してから、そのIPパケットを送信すると普通に信じている殿方へ。
そんなことはないです。正確に言うと、ARPを発行するけれど、二つ目だけを送信します。
つまり、本来は
となるところを
となる。三つ以上にフラグメントしたときにどうなるかは調べてないが、そのパケットがロスとされるのは同じでしょう。興味がある人は、
とかしてみてください。foo.barがどこであるかにかかわらず、最初の一つ目は駄目になると思います。
「4.3BSDの設計と実装」や、ARPのmanpageではこのケースでは一つ目はキューに入れることになっているのですが、こんなお粗末な実装とは、変な意味で恐れ入りました。
なお、私の環境の実測の結果によると、Windows XPのARPのタイムアウトは10分のようです。そして、positive feedbackはしていないようです。RFC無視も甚だしいですね。
この動作は仕様であり、"ARP が少なくとも 1 つのパケットを保持しなければならない" と規定した RFC 1122 Host Requirement に準拠したものです。
いや、だから、このRFCの意図は、ARPがIPデータグラムのロストを防ぐために"少なくとも一つのパケットを保持しなければならない"ということなのですが。