メインコンテンツまでスキップ

Appendix A. Loopback Suppression and Duplicate Address Detection (ループバック抑制と重複アドレス検出)

受信したマルチキャスト要請が送信者にループバックされたものか、実際に別のノードから来たものかを判断することは、実装依存です。同じリンクに接続された2つのインターフェースが偶然にも同じ識別子とリンク層アドレスを持ち、両方がほぼ同時に内容が同一のパケット (例えば、重複アドレス検出メッセージの一部として仮アドレスに対して送信される近隣要請) を送信する場合、問題のある状況が発生します。受信者は2つのパケットを受信しますが、パケットの内容を比較するだけでは、どのパケットがループバックされたものか、どのパケットが別のノードから来たものかを判断できません (つまり、内容が同一です)。この特殊なケースでは、どのパケットがループバックされ、どのパケットが別のノードによって送信されたかを正確に知る必要はありません。受信した要請が送信したものより多ければ、仮アドレスは重複しています。しかし、状況は常にこれほど単純ではない可能性があります。

IPv4マルチキャスト仕様[RFC1112]は、サービスインターフェースが上位層プロトコルに対して、送信ホストがメンバーであるマルチキャストグループに送信されたパケットのローカル配信を抑制する方法を提供することを推奨しています。一部のアプリケーションは、同じホスト上に他のグループメンバーが存在しないことを知っており、ループバックの抑制により、自分が送信したパケットを受信 (および破棄) する必要がなくなります。この機能を実装する簡単な方法は、ハードウェアレベルでループバックを無効にし (ハードウェアがサポートしている場合)、要求に応じてソフトウェアによってパケットをループバックすることです。ハードウェア自体がループバックを抑制するインターフェース上で、重複アドレス検出を実行するノードは、仮アドレスに対して受信した近隣要請の数を単純にカウントし、それを予想される数と比較します。不一致がある場合、仮アドレスは重複しています。

しかし、ハードウェアがループバックを抑制できない場合、不要なループバックをフィルタリングする可能性のあるソフトウェアヒューリスティックの1つは、受信インターフェースと同じリンク層送信元アドレスを持つ受信パケットを破棄することです。あるリンク層仕様では、そのようなパケットを破棄することを要求しています[IEEE802.11]。残念ながら、その基準を使用すると、同じリンク層アドレスを使用する別のノードによって送信されたすべてのパケットも破棄されることになります。重複アドレス検出は、この方法で受信パケットをフィルタリングするインターフェース上で失敗します:

  • 重複アドレス検出を実行しているノードが、受信インターフェースと同じ送信元リンク層アドレスを持つ受信パケットを破棄する場合、同じリンク層アドレスを使用する他のノードからのパケット (重複アドレス検出を正しく機能させるために必要な近隣通告および近隣要請メッセージを含む) も破棄します。抑制を無効にできる場合、この特定の問題は、ノードが重複アドレス検出を実行している間、ループバックのソフトウェア抑制を一時的に無効にすることで回避できます。

  • 特定のIPアドレスをすでに使用しているノードが、インターフェースと同じリンク層送信元アドレスを持つ受信パケットを破棄する場合、同じリンク層アドレスを使用する別のノードによって送信された重複アドレス検出に関連する近隣要請メッセージも破棄します。したがって、重複アドレス検出は失敗し、他のノードは一意でないアドレスを設定します。通常、別のノードがいつ重複アドレス検出を実行しているかを知ることは不可能であるため、この状況は、ループバックのソフトウェア抑制が永久に無効になっている場合にのみ回避できます。

したがって、2つのインターフェースが同じリンク層アドレスを使用する場合に重複アドレス検出を正しく実行するには、実装はインターフェースのマルチキャストループバックセマンティクスについて十分に理解している必要があり (MUST)、インターフェースは、送信元リンク層アドレスがインターフェースのアドレスと同じであるという理由だけで受信パケットを破棄してはなりません (MUST NOT)。また、リンク層仕様が重複アドレス検出を機能させるために必要な条件と矛盾する可能性があることにも注意すべきです。