web-dev-qa-db-ja.com

ハイブリッドIP表記:: ffff:192.168.1.4はいつ適切ですか?

言い換えれば、アドレスがIPv4の場合、なぜわざわざIPv6として表現するのでしょうか。

30
Han Soleau

これはIPv6を介して表現されたIPv4であるため、アプリケーションは1つのIPスタックのみをサポートする必要があります。

IPv6表記を介してIPv4アドレスを参照できるということは、アプリケーションでIPv6サポートを確実に実現することに取り組むことができ、重複作業について心配する必要がないことを意味します。

最近、一部のディストリビューションはデフォルトでIPv4互換性を無効にし(Debianなど)、Windowsもデフォルトでこれを行います。プログラマーとしてこれに対応するには、2つのソケットをバインドする必要があります。1つはIPv4ソケット、もう1つはIPV6_V6ONLYフラグ付きのIPv6ソケットです(これにより、/proc/sys/net/ipv6/bindv6onlyの状態に関係なく、IPv6との互換性がない場合にのみIPv6がバインドされます)。

以下のコメントで、マイクは私を この素晴らしいサイト にリンクしました。AF_に依存しないプログラミングにsockaddr_storageを使用する方法に関する情報があります(AF_INET6を使用するか、AF_INETを使用するかを決定するかどうかに大きな関連性があります。 AF_INET6を並べて)。また、私はBeejのネットワークプログラミングガイドが好きです。これには いくつかの同様の情報 もあります。推奨読書。ありがとう、マイク!

21
Jeremy Visser

アドレスがIPv4の場合、なぜわざわざIPv6として表現するのでしょうか。

上位互換性?

9
JAB

そのフォームをV4MAPPEDアドレスで使用するのが適切です。

V4MAPPEDアドレスは、ネットワークで送信される実際のIPv6ヘッダーに表示されることは想定されていません。これらは、単一のトランスポートエンドポイントがIPv4とIPv6の両方を同時に使用して通信できるデュアルスタックIPv4/IPv6ホスト実装を使用するアプリケーションによってのみ使用されることになっています。

エンドポイントがIPv6のみである必要なしにIPv6プロトコルファミリを使用してTCP接続を開き(システムのデフォルトである可能性があります)、宛先アドレスをV4MAPPED形式で指定する場合)オペレーティングシステムはIPv4経由で接続し、システムでgetsocknameに相当するものを呼び出すと、V4MAPPEDアドレスが返されます。

6
james woodyatt