SlideShare a Scribd company logo
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 を Java で使用するのは簡単かつ透過的で自動的に行われます。
その他の多くの言語とは異なり、移植は必要ありません。
実際、ソースファイルの再コンパイルさえ必要 ありません。
http://docs.oracle.com/javase/7/docs/technotes/guides/net/ipv6_guide/index.html (英語)
基本
• Solaris、LinuxはJ2SE 1.4でIPv6対応、
Windows版はJ2SE 5.0でIPv6対応
• 「InetAddressクラス」のサブクラスの
「Inet4Address」、「Inet6Address」が
加わった。
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, int
ttl, int timeout)
1.5 そのアドレスに到達可能かどうかをテストします。
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
を作成します。
ちょっと脱線・・・
• isReachable()
– 通常の実装では、特権を取得できる場合は
ICMP ECHO REQUEST を使用し、それ以外の場
合は接続先ホストのポート 7 (Echo) 上で
TCP 接続を確立しようとします。
JavaプラットホームでのIPv6の
動作
1. IPv6を基本となるOSでサポートしているかどうかを確認し
ます。
2. (デュアルスタックシステムの場合)
IPv6がサポートされている場合は、IPv6スタックを使用
(=IPv6ソケットを作成)しようとします。
2. (個別スタックシステムの場合)
IPv4通信とIPv6通信用に1つずつ、合計2つのソケットを作
成します。クライアント側のTCPアプリケーションでは、ソ
ケットが接続されると、インターネットプロトコルファミ
リータイプが固定され、もう1つのソケットが閉じられま
す。サーバー側のTCPアプリケーションでは、次のクライア
ント要求がどのIPファミリータイプから送信されるかを知
る方法がないため、2つのソケットを維持しておく必要があ
ります。UDP アプリケーションでは、通信の継続期間中、
両方のソケットが必要です。
Socketの実装クラス
• Windows Vista以降
– java.net. DualStackPlainSocketImpl
– This class defines the plain SocketImpl that is used on Windows platforms
greater or equal to Windows Vista. These platforms have a dual layer TCP/IP
stack 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 version
lower than Vista. It adds support for IPv6 on these platforms where
available. For backward compatibility Windows platforms that do not have
IPv6 support also use this implementation, and fd1 gets set to null during
socket creation.
– second fd, used for ipv6 on windows only. fd1 is used for listeners and for
client sockets at initialization until the socket is connected. Up to this
point fd always refers to the ipv4 socket and fd1 to the ipv6 socket. After
the socket becomes connected, fd always refers to the connected socket
(either v4 or v6) and fd1 is closed. For ServerSockets, fd always refers to
the v4 listener and fd1 the v6 listener.
Q:
IPv4ソケットでのみ接続したい
んですが、どのようにすればい
いですか?
A:
システムプロパティ
java.net.preferIPv4Stack=trueを
設定してください。
IPv6 を利用可能なオペレーティングシステムでは、基本と
なるネイティブソケットは IPv6 ソケットです。このため、
Java(TM) アプリケーションは、IPv4 ホストと IPv6 ホス
トの両方に接続したり、その両方のホストからの接続を受
け入れたりできます。
IPv4 ソケットだけを使用するよう設定されているアプリ
ケーションでは、このプロパティーを true に設定できま
す。つまり、そのアプリケーションは IPv6 ホストと通信
できないということです。
実行例
java.net.preferIPv4Stack=false (デフォルト)
java.net.preferIPv4Stack=true
Q:
IPv6アドレスを優先したいんで
すが、どのようにすればいいで
すか?
A:
システムプロパティ
java.net.preferIPv6Addresses=tr
ueを設定してください。
IPv6 を利用可能なオペレーティングシステムでは、デフォルトの設定
として、IPv4 マップのアドレスを IPv6 アドレスよりも優先するよう
になっています。これは、下位互換性の理由によります。 たとえば、
IPv4 だけのサービスへのアクセスに依存するアプリケーション
や、%d.%d.%d.%d の形式で表現された IP アドレスに依存するアプリ
ケーションとの互換性のためです。
IPv6 アドレスを IPv4 アドレスよりも優先する設定を試してみるには、
このプロパティーを true に設定します。そうすれば、アプリケー
ションが IPv6 サービスに接続されると予想される環境でアプリケー
ションをテストし、そのような環境にアプリケーションを配置するこ
実行例
java.net.preferIPv6Addresses=false (デフォルト)
java.net.preferIPv6Addresses=true

More Related Content

PPTX
MySQL入門
PDF
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
PPTX
About .Net vNext
PDF
JANOG35「なぜIPv6対応したくないのか」発表資料
PDF
POSIX Threads
PDF
OpenStack Object Storage; Usage
PDF
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
PDF
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
MySQL入門
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
About .Net vNext
JANOG35「なぜIPv6対応したくないのか」発表資料
POSIX Threads
OpenStack Object Storage; Usage
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...

What's hot (9)

PDF
New VIdeo CODEC AV1
PPTX
みんなのブログ紹介
PPT
BSD UnixにおいてIPv6を有効にした際に発生する課題とその対策
PDF
2019年 これからの人向け 超速習!流体解析ツールボックスOpenFOAM
PPTX
Dockerと外部ルータを連携させる仕組みを作ってみた
PDF
hktstudy #01 LT 20120616
PDF
ZFS on Linux @ZFS Day 2011.10
PDF
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
PDF
ACI3.0(1k) Release
New VIdeo CODEC AV1
みんなのブログ紹介
BSD UnixにおいてIPv6を有効にした際に発生する課題とその対策
2019年 これからの人向け 超速習!流体解析ツールボックスOpenFOAM
Dockerと外部ルータを連携させる仕組みを作ってみた
hktstudy #01 LT 20120616
ZFS on Linux @ZFS Day 2011.10
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
ACI3.0(1k) Release
Ad

Viewers also liked (9)

PPT
PPT
Flex入門
PPT
Javaメモリ勉強会
PPTX
上級救命技能認定
PPT
デザインパターン勉強会
PDF
slackをビジュアライズするbot(pickupon)でIoTデータの民主化ができそうな気がした話
PPTX
170130 IoT LT #23 (CESで見てきたハードウェアスタートアップを支えるエコシステム) @ソフトバンク
PDF
ブロックチェーンでIo tっぽいことやってみたぃ 201701
PPT
Java数値(浮動小数点)課題勉強会
Flex入門
Javaメモリ勉強会
上級救命技能認定
デザインパターン勉強会
slackをビジュアライズするbot(pickupon)でIoTデータの民主化ができそうな気がした話
170130 IoT LT #23 (CESで見てきたハードウェアスタートアップを支えるエコシステム) @ソフトバンク
ブロックチェーンでIo tっぽいことやってみたぃ 201701
Java数値(浮動小数点)課題勉強会
Ad

Similar to IPv6 in Java (20)

PDF
イケてないIPv6とどう付き合う?
PPT
IPv6標準化と実装
PDF
What is java_se_7
PDF
Nseg20120825
PDF
IPv6 アプリケーション開発入門
PPTX
20140518 JJUG MySQL Clsuter as NoSQL
PDF
openstack+cephインテグレーション
PDF
OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...
PDF
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
PDF
今年はJava進化の年!今知っておくべき新しいJava
PDF
20170303 java9 hadoop
PPT
V6prog OSC2013Hokkaido
PDF
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
PDF
Scalaでのプログラム開発
PDF
全部入り!WGPで高速JavaScript+HML5体験
KEY
PlayFramework1.x基礎編
PDF
Lagopus Router v19.07.1
PPTX
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
PDF
Open stack+lagopus できるかな
PDF
RapidMinerのインストール【CentOS 6.5】
イケてないIPv6とどう付き合う?
IPv6標準化と実装
What is java_se_7
Nseg20120825
IPv6 アプリケーション開発入門
20140518 JJUG MySQL Clsuter as NoSQL
openstack+cephインテグレーション
OpenStack + KVM + IPv6 = oname.com; Next Folsom/Grizzly Service development s...
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
今年はJava進化の年!今知っておくべき新しいJava
20170303 java9 hadoop
V6prog OSC2013Hokkaido
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
Scalaでのプログラム開発
全部入り!WGPで高速JavaScript+HML5体験
PlayFramework1.x基礎編
Lagopus Router v19.07.1
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
Open stack+lagopus できるかな
RapidMinerのインストール【CentOS 6.5】

IPv6 in Java