JDK1.4 以降では、ホストのプラットフォームが対応している場合に IPv6 をサポートします。IPv6 をサポートするプラットフォーム上では IPv4 と IPv6 の両方を自動的にサポートし、これはプログラマから見て透過的に行われます。
IPv6 は「IPv4 互換アドレス」を介してIPv4をサポートします。「IPv4 互換アドレス」は IPv6 の 128ビット中の上位 96ビットがゼロであるアドレスであり、192.168.1.2 という IPv4 のアドレスは、IPv6 では ::192.168.1.2 という IPv4 互換アドレスとして扱われます。
現在使用しているソケットが IPv4 か IPv6 を確認するには以下のようなコードを使用します。
if (socket.getLocalAddress() instanceof Inet6Address) { System.out.println("IPv6"); } else { System.out.println("IPv4"); }
IPv4 か IPv6 にて Socket.setTrafficClass() の扱いが異なります。
- IPv4 では、RFC 791 で定義されている 8ビットのTOS(Type of Service)フィールド
- IPv6 では、RFC 2460 で定義されている 8ビットのTC(traffic class)フィールド
通常は特に意識しない部分となります。