WinXPでのARPとフラグメントされたIPパケットの扱い

ええ、普通の人にとってはどうでもいいことですが。Windows XPでのフラグメントされたIPパケットを送信しようとしたときに、「たまたま」レイヤ2が解決できていない状況のときにはARPを発行してから、そのIPパケットを送信すると普通に信じている殿方へ。
そんなことはないです。正確に言うと、ARPを発行するけれど、二つ目だけを送信します。
つまり、本来は

  • ARP request
  • ARP reply
  • Send IP first frame
  • Send IP second frame

となるところを

  • ARP request
  • ARP reply
  • Send IP second frame

となる。三つ以上にフラグメントしたときにどうなるかは調べてないが、そのパケットがロスとされるのは同じでしょう。興味がある人は、

C> arp -d *
C> ping -l 1500 foo.bar

とかしてみてください。foo.barがどこであるかにかかわらず、最初の一つ目は駄目になると思います。
「4.3BSDの設計と実装」や、ARPのmanpageではこのケースでは一つ目はキューに入れることになっているのですが、こんなお粗末な実装とは、変な意味で恐れ入りました。
なお、私の環境の実測の結果によると、Windows XPARPタイムアウトは10分のようです。そして、positive feedbackはしていないようです。RFC無視も甚だしいですね。

      • > これ、にある通り、「仕様」とのことです。

この動作は仕様であり、"ARP が少なくとも 1 つのパケットを保持しなければならない" と規定した RFC 1122 Host Requirement に準拠したものです。

いや、だから、このRFCの意図は、ARPがIPデータグラムのロストを防ぐために"少なくとも一つのパケットを保持しなければならない"ということなのですが。