STCPには以前から重複IPアドレスの検出機能がありましたが、MicrosoftWindows 2008および7の動作が変更されたことにより、興味深い点が追加されました。
まずはその仕組みをおさらいしましょう。
重複IPアドレスの検出は、アドレス解決プロトコル(ARP)に依存しています。
packet_monitorツールは、ARPパケットを2行で
11:13:43.123 Rcvd Ether Dst ff:ff:ff:ff:ff:ff:ff Src 00:13:d4:59:7a:da タイプ 0806 (ARP)
ARP Reqターゲット 164.152.77.217 Src 164.152.77.34[00:13:D4:59:7A:DA]
どこにあるか
|
STCPは、次のように見ています。 演算子フィールドで、それが受信したインターフェイスのIPアドレスと一致した場合、STCPは重複したIPアドレスをsyserr_logに以下の形式のメッセージで報告します。
<time> WARNING (<index>): MAC address <MAC address> is using our IP address <IP address>
例えば
11:13:43 WARNING(5)。MAC アドレス 00:13:d4:59:7a:da は当社の IP アドレス 164.152.77.34 を使用しています。
MAC」はMedia Access Controlの略で、MACアドレスを知ることで、問題のあるホストの識別の手がかりを得ることができます。アドレスの最初の 3 バイトは、OUI (Organizationally Unique Identifier) と呼ばれ、イーサネットカードまたはそれが存在するホストを特定するために使用される。例えば、Stratus には、00-00-A8 と 00-04-FC という 2 つの OUI が登録されている。OUI は、http://standards.ieee.org/develop/regauth/oui/public.html で調べることができます。
STCPを含む多くのホストは、起動時やIPインタフェースが設定されているときに、 gratuitous ARPとして知られているものを送信します。このフレームは基本的に自分自身のIPアドレスを探しており、応答があればそのIPアドレスが使用中であることを知っています。ここでは、別のVOSモジュールがインターフェースの1つを起動するときに送信される無償ARPを示すpacket_monitorトレースの例を示しています。両方の 対象者そして 置換元のフィールドは同じIPアドレスを持っています。
10:19:53.045 Rcvd Ether Dst ff:ff:ff:ff:ff:ff:ff Src 00:00:00:a8:41:3b:6e タイプ 0806 (ARP)
ARP Reqターゲット 164.152.77.34演算子 164.152.77.34[00:00:00:a8:41:3b:6e]
さて、この記事の冒頭で述べたこのシワは何なのでしょうか?
Windows 2008 およびWindows 7 以降、Microsoft TCP スタックは、Src フィールドを次のように設定した無償の ARP を送信します。 0.0.0.0.
10:45:10.530 Rcvd Ether Dst ff:ff:ff:ff:ff:ff:ff Src 1c:c1:de:b4:76:60 タイプ 0806 (ARP)
ARP Reqターゲット 164.152.77.34 Src 0.0.0.0.0[1c:c1:de:b4:76:60]
その結果、STCPはこれがイーサネットアドレスに対する「通常の」クエリであると考え、通常の応答を返します。
10:45:10.530 Xmit Ether Dst 1c:c1:de:b4:76:60 Src 00:00:00:a8:41:3b:6e タイプ 0806 (ARP)
ARP Rep Target 0.0.0.0.0 [1c:c1:de:b4:76:60] Src 164.152.77.34 [00:00:a8:41:3b:6e]
IPアドレスが重複していることを示すものは記録されない。良いニュースは、Windows スタックが重複を認識し、169.254.X.Y という形式のリンクローカルアドレスに切り替わることである。
マイクロソフトはなぜこの変更を行ったのでしょうか?多くのTCPスタック(STCPを含む)は、ARPフレームに含まれるイーサネットアドレスでソースIPアドレスのARPキャッシュエントリを更新するようです。IPアドレスが重複している場合、パケットが重複しているホストにリダイレクトされるため、重複しているIPアドレスへの現在の接続が切れてしまいます。Srcフィールドを0.0.0.0.0に変更することで、MicrosoftはTCPスタック(STCPを含む)がARPキャッシュエントリを更新するのを防ぎます。