IPv6 in Javaアプレッソ開発部吉田 哲也2013/06/10
Q:IPv6対応にする場合、何かソースコードの修正は必要ですか?
A:必要ありません。再ビルドも必要ありません。
以上
http://docs.oracle.com/javase/jp/6/technotes/guides/net/ipv6_guide/index.html (日本語)ネットワーク IPv6 ユーザーガイドJava での IPv6 の使用IPv6...
基本• Solaris、LinuxはJ2SE 1.4でIPv6対応、Windows版はJ2SE 5.0でIPv6対応• 「InetAddressクラス」のサブクラスの「Inet4Address」、「Inet6Address」が加わった。
InetAddressに追加されたメソッドメソッド 説明boolean isAnyLocalAddress() 1.4 InetAddress がワイルドカードアドレスかどうかを調べるユーティリティールーチンです。boolean isLoopb...
Inet6Addressのメソッドメソッド 説明boolean isIPv4CompatibleAddress() 1.4 InetAddress が IPv4 互換の IPv6 アドレスかどうかを調べるユーティリティールーチンです。stati...
ちょっと脱線・・・• isReachable()– 通常の実装では、特権を取得できる場合はICMP ECHO REQUEST を使用し、それ以外の場合は接続先ホストのポート 7 (Echo) 上でTCP 接続を確立しようとします。
JavaプラットホームでのIPv6の動作1. IPv6を基本となるOSでサポートしているかどうかを確認します。2. (デュアルスタックシステムの場合)IPv6がサポートされている場合は、IPv6スタックを使用(=IPv6ソケットを作成)しようと...
Socketの実装クラス• Windows Vista以降– java.net. DualStackPlainSocketImpl– This class defines the plain SocketImpl that is used on...
Q:IPv4ソケットでのみ接続したいんですが、どのようにすればいいですか?
A:システムプロパティjava.net.preferIPv4Stack=trueを設定してください。IPv6 を利用可能なオペレーティングシステムでは、基本となるネイティブソケットは IPv6 ソケットです。このため、Java(TM) アプリケ...
実行例java.net.preferIPv4Stack=false (デフォルト)java.net.preferIPv4Stack=true
Q:IPv6アドレスを優先したいんですが、どのようにすればいいですか?
A:システムプロパティjava.net.preferIPv6Addresses=trueを設定してください。IPv6 を利用可能なオペレーティングシステムでは、デフォルトの設定として、IPv4 マップのアドレスを IPv6 アドレスよりも優先す...
実行例java.net.preferIPv6Addresses=false (デフォルト)java.net.preferIPv6Addresses=true
Upcoming SlideShare
Loading in...5
×

IPv6 in Java

745

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
745
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

IPv6 in Java

  1. 1. IPv6 in Javaアプレッソ開発部吉田 哲也2013/06/10
  2. 2. Q:IPv6対応にする場合、何かソースコードの修正は必要ですか?
  3. 3. A:必要ありません。再ビルドも必要ありません。
  4. 4. 以上
  5. 5. http://docs.oracle.com/javase/jp/6/technotes/guides/net/ipv6_guide/index.html (日本語)ネットワーク IPv6 ユーザーガイドJava での IPv6 の使用IPv6 を Java で使用するのは簡単かつ透過的で自動的に行われます。その他の多くの言語とは異なり、移植は必要ありません。実際、ソースファイルの再コンパイルさえ必要 ありません。http://docs.oracle.com/javase/7/docs/technotes/guides/net/ipv6_guide/index.html (英語)
  6. 6. 基本• Solaris、LinuxはJ2SE 1.4でIPv6対応、Windows版はJ2SE 5.0でIPv6対応• 「InetAddressクラス」のサブクラスの「Inet4Address」、「Inet6Address」が加わった。
  7. 7. InetAddressに追加されたメソッドメソッド 説明boolean isAnyLocalAddress() 1.4 InetAddress がワイルドカードアドレスかどうかを調べるユーティリティールーチンです。boolean isLoopbackAddress() 1.4 InetAddress がループバックアドレスかどうかを調べるユーティリティールーチンです。boolean isLinkLocalAddress() 1.4 InetAddress がリンクローカルアドレスかどうかを調べるユーティリティールーチンです。boolean isSiteLocalAddress() 1.4 InetAddress がサイトローカルアドレスかどうかを調べるユーティリティールーチンです。boolean isMCGlobal() 1.4 マルチキャストアドレスにグローバルスコープがあるかどうかを調べるユーティリティールーチンです。boolean isMCNodeLocal() 1.4 マルチキャストアドレスにノードスコープがあるかどうかを調べるユーティリティールーチンです。boolean isMCLinkLocal() 1.4 マルチキャストアドレスにリンクスコープがあるかどうかを調べるユーティリティールーチンです。boolean isMCSiteLocal() 1.4 マルチキャストアドレスにサイトスコープがあるかどうかを調べるユーティリティールーチンです。boolean isMCOrgLocal() 1.4 マルチキャストアドレスに組織スコープがあるかどうかを調べるユーティリティールーチンです。String getCanonicalHostName() 1.4 この IP アドレスに対応する完全指定ドメイン名を取得します。static InetAddress getByAddress(byte[] addr) 1.4 指定された生の IP アドレスを表す InetAddress オブジェクトを返します。static InetAddress getByAddress(String host,byte[] addr)1.4 指定されたホスト名および IP アドレスに基づいて InetAddress を作成します。boolean isReachable(int timeout) 1.5 そのアドレスに到達可能かどうかをテストします。boolean isReachable(NetworkInterface netif, intttl, int timeout)1.5 そのアドレスに到達可能かどうかをテストします。
  8. 8. Inet6Addressのメソッドメソッド 説明boolean isIPv4CompatibleAddress() 1.4 InetAddress が IPv4 互換の IPv6 アドレスかどうかを調べるユーティリティールーチンです。static Inet6Address getByAddress(String host,byte[] addr, int scope_id)1.5 InetAddress.getByAddress(String,byte[]) とまったく同様にして Inet6Addressを作成します。static Inet6Address getByAddress(String host,byte[] addr, NetworkInterface nif)1.5 InetAddress.getByAddress(String,byte[]) とまったく同様にして Inet6Addressを作成します。
  9. 9. ちょっと脱線・・・• isReachable()– 通常の実装では、特権を取得できる場合はICMP ECHO REQUEST を使用し、それ以外の場合は接続先ホストのポート 7 (Echo) 上でTCP 接続を確立しようとします。
  10. 10. JavaプラットホームでのIPv6の動作1. IPv6を基本となるOSでサポートしているかどうかを確認します。2. (デュアルスタックシステムの場合)IPv6がサポートされている場合は、IPv6スタックを使用(=IPv6ソケットを作成)しようとします。2. (個別スタックシステムの場合)IPv4通信とIPv6通信用に1つずつ、合計2つのソケットを作成します。クライアント側のTCPアプリケーションでは、ソケットが接続されると、インターネットプロトコルファミリータイプが固定され、もう1つのソケットが閉じられます。サーバー側のTCPアプリケーションでは、次のクライアント要求がどのIPファミリータイプから送信されるかを知る方法がないため、2つのソケットを維持しておく必要があります。UDP アプリケーションでは、通信の継続期間中、両方のソケットが必要です。
  11. 11. Socketの実装クラス• Windows Vista以降– java.net. DualStackPlainSocketImpl– This class defines the plain SocketImpl that is used on Windows platformsgreater or equal to Windows Vista. These platforms have a dual layer TCP/IPstack and can handle both IPv4 and IPV6 through a single file descriptor.• Windows Vistaより前– java.net.TwoStacksPlainSocketImpl– This class defines the plain SocketImpl that is used for all Windows versionlower than Vista. It adds support for IPv6 on these platforms whereavailable. For backward compatibility Windows platforms that do not haveIPv6 support also use this implementation, and fd1 gets set to null duringsocket creation.– second fd, used for ipv6 on windows only. fd1 is used for listeners and forclient sockets at initialization until the socket is connected. Up to thispoint fd always refers to the ipv4 socket and fd1 to the ipv6 socket. Afterthe socket becomes connected, fd always refers to the connected socket(either v4 or v6) and fd1 is closed. For ServerSockets, fd always refers tothe v4 listener and fd1 the v6 listener.
  12. 12. Q:IPv4ソケットでのみ接続したいんですが、どのようにすればいいですか?
  13. 13. A:システムプロパティjava.net.preferIPv4Stack=trueを設定してください。IPv6 を利用可能なオペレーティングシステムでは、基本となるネイティブソケットは IPv6 ソケットです。このため、Java(TM) アプリケーションは、IPv4 ホストと IPv6 ホストの両方に接続したり、その両方のホストからの接続を受け入れたりできます。IPv4 ソケットだけを使用するよう設定されているアプリケーションでは、このプロパティーを true に設定できます。つまり、そのアプリケーションは IPv6 ホストと通信できないということです。
  14. 14. 実行例java.net.preferIPv4Stack=false (デフォルト)java.net.preferIPv4Stack=true
  15. 15. Q:IPv6アドレスを優先したいんですが、どのようにすればいいですか?
  16. 16. A:システムプロパティjava.net.preferIPv6Addresses=trueを設定してください。IPv6 を利用可能なオペレーティングシステムでは、デフォルトの設定として、IPv4 マップのアドレスを IPv6 アドレスよりも優先するようになっています。これは、下位互換性の理由によります。 たとえば、IPv4 だけのサービスへのアクセスに依存するアプリケーションや、%d.%d.%d.%d の形式で表現された IP アドレスに依存するアプリケーションとの互換性のためです。IPv6 アドレスを IPv4 アドレスよりも優先する設定を試してみるには、このプロパティーを true に設定します。そうすれば、アプリケーションが IPv6 サービスに接続されると予想される環境でアプリケーションをテストし、そのような環境にアプリケーションを配置するこ
  17. 17. 実行例java.net.preferIPv6Addresses=false (デフォルト)java.net.preferIPv6Addresses=true
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×