同じネットワーク内に複数の端末が同じIPアドレスを設定して使用している状態のことを、IPアドレスの競合または重複と呼びます。間違って設定してIPアドレスが競合してしまった場合にネットワーク内部では何がおこっているのか?今回は例としてWindows10 のPCを使って実際に確認していきたいと思います。
IPアドレスが競合する原因
IPアドレスはネットワーク上で各端末がどこにあるかを示すIDのようなものなので、同じネットワーク上で一意でなければいけません。
家庭やオフィスなどでは一般的にIPアドレスは、ルーター上のDHCPという機能により各端末に競合しないように自動で割り振られます。そのため、IPアドレスが端末同士で同じになることはありません。
DHCPを利用していると普段IPアドレスが競合することはないはずですが、それでもIPアドレスが競合してしまうことも時にはあります。そのような主な原因としては以下のようなパターンが考えられます。
IPアドレスが競合する原因 ①手動でIPアドレスを設定している場合
管理目的でDHCPを使わず各端末に対し管理者が手動でIPアドレスを設定しているような場合、IPアドレスの設定ミスにより同じIPアドレスを複数の端末に設定してしまう可能性もあります。
IPアドレスが競合する原因 ②DHCPから固定IPアドレスの除外設定が必要な場合
DHCPを使っていてもNASやプリンターなどネットワーク上で共有するものには固定IPアドレスが必要な場合があります。その場合、手動で設定して使うIPアドレスについてはDHCP側の設定で割り当て範囲から除外する必要がありますがこれらの設定が適切にされていない場合におこる可能性があります。
IPアドレスが競合する原因 ③外部機器の持ち込み
IPアドレスを手動で設定して使っていた外部から持ち込んだ端末をそのままネットワークに接続してしまいIPアドレスが競合してしまう原因になることがあります。
IPアドレスの競合の前準備
ネットワーク構成
それではまず普段使っているWindows10を使ったPCで、IPアドレスの競合が発生する前の状態を見ておきます。
ネットワークの構成は、DHCP機能をもつWiFiルーターに2つの端末が無線LANでつながっています。

IPアドレス等の確認方法
以下の方法で現在接続されている端末のIPアドレスやMACアドレスの接続状況を確認します。
Windows PCの現在のIPアドレスはコマンドプロンプトで確認します。
C:\>ipconfig
Windows PCと現在同じネットワーク上にいる端末のIPアドレスとMACアドレスの対応リストを確認します。
C:\>arp -a
Windows PC自身のMACアドレスは ipconfig にオプションallを追加したコマンドで確認できます。
C:>ipconfig /all
以上の情報から自身のWindows10 のPCに「192.168.0.19」、もう一方のタブレットに「192.168.0.15」のIPアドレスが割り当てられている状態であることがわかりました。


IPアドレスの競合を実験
IPアドレスの競合
次に、IPアドレスを競合させるために一旦 Windows10 PC の WiFi 機能をOFFにしてネットワークから切断した状態で、IPアドレスを変更します。
ちなみに、Windows10 で IPアドレスを変更は以下のような方法でおこなえます。
[コントロールパネル]→[ネットワークとインターネット]→[ネットワークと共有センター]を開いて左側の項目にある[アダプターの設定変更]を開きます。
各種ネットワーク接続が並んでいるので、設定したいネットワーク接続を右クリックして[プロパティ]をクリックします。
開いたネットワークタブにある項目に「インターネットプロトコルバージョン4(TCP/IPv4)」を選択し[プロパティ]をクリックすると設定変更が可能なウィンドウが表示されます。

タブレットで使用している「192.168.0.15」と同じIPアドレスに変更して、再度 WiFi 機能をONにします。

WiFi機能をONにしてIPアドレスを確認してみます。
C:\>ipconfig
Wireless LAN adapter Wi-Fi:
接続固有の DNS サフィックス . . . . .:
自動構成 IPv4 アドレス. . . . . . . .: 169.254.50.78
サブネット マスク . . . . . . . . . .: 255.255.0.0
デフォルト ゲートウェイ . . . . . . .:
ここでおかしいことに気づきます。
なぜか「169.254.50.78」という設定した覚えのないIPアドレスが設定されています。
このアドレスは、「リンクローカルアドレス」と呼ばれ169.254.XX.XX の中からランダムで割り当てられるIPアドレスです。
リンクローカルアドレスが設定されてしまうよくあるパターンとしては、DHCP機能をONにしているにもかかわらずIPアドレスの自動取得に失敗した場合です。
しかし、どうやら今回はIPアドレスの競合で手動設定に失敗したために使われているようです。
IPアドレスの競合を検出した仕組み
ネットワーク上でどのようなやりとりがあったかを確認するために、パケットキャプチャして探ってみます。

ARPでフィルターした上図の結果をみると、以下のようなことがわかりました。
上から3つまではPCからのARPリクエスト(要求)2つとそれに対するタブレットからのARPリプライ(応答)であることがわかります。

この手動設定時に最初に送るARPは手動で設定されたIPアドレスが競合していないかを確認する目的で使用します。自身ののIPアドレスをとりあえず「0.0.0.0」にしてARPリクエストします。これを ARP Probe と呼びます。
ARP Probe に対しARPリプライが返ってくるということは自身の端末に設定したIPアドレスはすでにどこかで使われているということになります。
この仕組みによりPCはIPアドレスの競合を検出しています。

リンクローカルアドレスが設定されるまでの動作
次にIPアドレスが競合していることがわかったPCは、設定されたIPアドレスを使うことをやめてリンクローカルアドレスを割り当てます。が、その前にそれも競合しているかもしれませんので同じように確認します。
それが、キャプチャ結果の上から4つ目から6つ目の3つのARP Probe です。もちろん、それに対する応答はありませんので、PCは7つ目の最後のARPでこのIPアドレスを使用することを宣言しています(ARP Announcement)。

ここまでの一連の動作により最終的に 169.254.50.78 が Windows10 の PCに設定されていたようです。
この状態ではもちろんネットワークを使って通信することはできません。

IPアドレスの競合を確認する方法
「IPアドレスの競合が検出されました」のメッセージ
リンクをアップにした直後(正確にはARP Probe へのReply(返信)があった時)、Windowsだとネットワークエラーとして、「IPアドレスの競合が検出されました」とポップアップメッセージがでます。(ただし、今回の実験中は何度やっても出なかったのですべての環境で必ずでるというわけではないかも知れません。)
イベントビューアーを確認
Windowsのイベントプロパティでも確認できます。

Windows のイベントログは、[コントロールパネル]→[システムとセキュリティ]→[管理ツール]にある「イベントビューアー」を起動して確認することができます。上図のIPアドレスの競合エラーに関するイベントは画面左のウィンドウから[Windows ログ]→[システム]にて確認できます。
ipconfig /all のコマンド結果を確認
今回の実験で手動で設定したIPアドレスは以下のように「(重複)」とはっきり表示されています。
C:\> ipconfig /all
~
自動構成 IPv4 アドレス. . . . . . . .: 169.254.50.78(優先)
サブネット マスク . . . . . . . . . .: 255.255.0.0
IPv4 アドレス . . . . . . . . . . . .: 192.168.0.15(重複)
~
最後に
今回の実験では同じIPアドレスの設定をさせない仕組みにより、ネットワークに影響を与えずにすみましたが、もしそのまま競合したIPアドレスを利用してしまうと、同じIPアドレスをもつ端末のネットワークが不安定になるだけでなく、サーバのようにみんなで共有するIPアドレスと競合した場合はもっと大きな問題に発展する可能性もあります。
人によるIPアドレスの競合・重複のようなトラブルを起こさせないようにするためには、端末にはDHCPによる払い出しをおこなうことが大事です。
また、いくつかある事例の1つとして、DHCP機能をもつルーター本体の挙動がおかしくなった例もあるようなので、手動で設定していないのにIPアドレスが競合してしまう場合は、ルーターの設定確認と再起動が必要になる場合もあります。
参考リンク
外部リンク
RFC5227 [IPv4 Address Conflict Detection]
内部リンク
Windows10でPCに設定されているIPアドレスを確認する方法
コメント