SlideShare a Scribd company logo
1 of 47
Download to read offline
オープンソースカンファレンス2014 Hiroshima! 
jus研究会広島大会 
これからのアプリ開発は 
IPv6対応で行こう! 
2014年9月20日 
IPv6普及・高度化推進協議会 
渡辺 露文  
About me 
渡辺 露文(わたなべ つゆふみ) 
Twitter: @tsuyu23 
某SIer勤務 
IPv6普及・高度化推進協議会 会員 
IPv6導入に起因する問題検討SWG 
アプリケーションのIPv6対応検討SWG 
技術評論社 
Software Design誌連載 
(2012年12月号~ 
    2014年1月号) 
! 
2
Do you know … 
IPv6 ? 
Internet Protocol version 6 
インターネットの通信に関する規約(RFC791) 
IPネットワークに接続するには1つ以上のIPアドレスが必要 
皆さんが馴染んでいるのはIPv4(例:10.1.2.3) 
3
実はIPv6を使える環境が 
増えています(1) 
最近のOS 
Windows Vista以降 
Mac OS X 
Linux 
FreeBSD 
 … 
! 
! 
4 
いずれも 
デフォルトで 
利用可能
実はIPv6を使える環境が 
増えています(2) 
インターネット回線 
フレッツ光ネクスト 
au ひかり 
NURO 光 
 … 
! 
! 
5 
利用可能 
既存ユーザへの自動導入も 
進行中 
すでに、ユーザからあなたのサービスにIPv6で 
アクセスされようとしている…かもしれない
日本におけるIPv6の普及 
状況 
フレッツ光ネクストのIPv6普及率 
(2014年6月) 
IPv6普及率:3.1%! 
フレッツ光ネクスト契約数:13,588,000契約! 
! 
au ひかりのIPv6普及率(2014年6月):68% 
! 
! 今後本格的に普及する前に 
出典:IPv6普及・高度化推進協議会 アクセス網におけるIPv6普及状況調査! 
   http://v6pc.jp/jp/spread/ipv6spread_03.phtml 
IPv6対応を始めたほうが良い 
6
余談:IPv6でインターネット 
にアクセスできるかの確認方法 
Webブラウザで http://www.test-ipv6.jp にアクセス 
! 
! 
! 
! 
Webブラウザで http://www.kame.net にアクセス 
! 
! 
! 
7 
IPv6でアクセスすると、 
亀が踊ります♪
IPv6の背景: 
  IPv4アドレス枯渇 
IPv4アドレスの在庫状況 
(地域インターネットレジストリ) 
8 
通信事業者、ISP、 
データセンター、 
クラウド事業者等の 
在庫が残るのみ 
世界的に足りなくなってきている
もう少しIPv6を知ろう! 
9
IPv4とIPv6とでは何が 
違うのか? 
アドレス体系が異なる 
(IPv6のアドレス空間は広大) 
例 
IPv4)192.0.2.1 
IPv6完全表記) 
2001:0db8:0000:0000:0001:0000:0000:0001 
IPv6省略表記)2001:db8::1:0:0:1 (RFC5952準拠) 
10 
! 
他にも機能的にIPv4と異なることがある 
  IPv4とIPv6は互換性がない
IPv4とIPv6の接続性 
11 
Internet 
IPv4対応 
(IPv6非対応) 
システム 
IPv4/IPv6 
両対応システム 
IPv6対応 
(IPv4非対応) 
システム 
(1) 
(2) 
(3) 
IPv4端末 
IPv4/IPv6 
両対応端末 
IPv6端末 
IPv4 
IPv6
IPv6に対応しない場合の 
影響 
1. IPv6のみの環境と通信できない! 
ビジネス機会を損失する! 
システム連携が行えず要件を満たせなくなる! 
2. 今後、IPv4はサービスレベルが低下していく! 
通信事業者等によるCGN(Carrier Grade NAT) 
導入により、遅くなり、使用できるセッション 
数が減る可能性がある! 
! 
! IPv6に対応しなきゃ! 
12
インフラがIPv6に対応す 
るだけでいいのでは? 
ネットワークとサーバがIPv6に対応すれば、IPv6で接続 
可能 
! 
接続は可能だが… 
サービスが正常に動作しない 
13 
!!! 
かもしれない 
システム連携がうまくいかない! 
想定外の挙動をする! 
  … 
! アプリケーションもIPv6に対応しなきゃ!
IPv6対応の話をする前に 
…① 
このコード、イケてない… 
use IO::Socket::IP; 
$host = “198.51.100.1”; 
: 
: 
my $sock = IO::Socket::IP->new( 
PeerAddr => $host, 
PeerPort => $port, 
Proto => 'tcp' 
) or die “Error: $!n”; 
: 
: 
14 
えっ、 
IPアドレス直書き? 
IPアドレス直書きすると、 
アドレス変更時に修正が 
必要なんですよ… 
再テストも必要だし… 
ダメよ~ダメダメ
IPv6対応の話をする前に 
…② 
とある Androidプログラミング書籍に 
おけるソケット通信のサンプルコード 
15 
public class SocketEx… 
… 
… 
private final static String IP=“192.168.11.12”;//★変更必須 
良い子は真似しちゃダメ
IPv6対応の話をする前に 
…③ 
IPアドレスのハードコーディングはNG 
16 
ダメ。ゼッタイ。 
$host = “www.example.com” 
のようにFQDNで接続先を指定する
ネットワークアクセスの 
作法=名前解決を使う 
Internet 
17 
Client 
Web Server 
www.example.jp 
2001:db8:100::1 
192.0.2.1 
DNS Server 
198.51.100.53 
①名前解決問合せ! 
www.example.jp ? 
②アドレス応答! 
www.example.jp ⇒ 2001:db8:100::1 
! !   192.0.2.1 
③HTTP通信 
FQDN 
FQDNで接続先を指定し、DNSからアドレス取得
なぜIPアドレス直書きが 
ダメなのか? 
目的変更・改修の理由 
アプリケーション機能の提供■ 業務要件の変更! 
■ サービス内容の変更! 
■ ユーザビリティ向上 …,etc. 
インフラ資源の提供■ 資源管理(IPアドレス、サーバラック…)! 
■ 性能 
同一システムでも変更・改修の理由・時期は異なる 
互いに変更の影響を受けるべきではない 
アプリケーションは、IPアドレスに依存すべきではない 
例)IPアドレスでユーザを識別すべきではない 
18
さあ、アプリケーションを 
IPv6に対応させよう! 
ここからが本題 
19
アプリケーションIPv6対 
応の基本方針 
 IPv6対応 =! 
    IPv4とIPv6の両方で動作する 
シングルソースコードで対応 
20
アプリケーションIPv6対 
応の基本方針 
 IPv6対応 =! 
    IPv4とIPv6の両方で動作する 
21 
! 
!!!! 
IPv6とIPv4の共存期間が長く続く! 
これまでIPv4で提供してきたサービスは、今後 
も継続してIPv4でも動作する必要あり
アプリケーションIPv6対 
応の基本方針 
シングルソースコードで対応 
22 
! 
!!! 
各開発言語が概ねIPv6に対応しており、プロト 
コルによって開発言語を分ける必要がなくなっ 
た! 
アプリケーションのメンテナンス性を重視し、 
プロトコルによって機能差異が生じることを未 
然に防ぐ
アプリケーションのIPv6 
対応のポイント 
②通信処理をIPv4/IPv6の 
 両方に対応させる 
③データとしてIPアドレスを 
 扱う箇所をIPv4/IPv6の 
 両方に対応させる 
クライアントサーバ 
TCP / UDP 
IP(v4/v6) 
Ethernet 
23 
アプリケーション! 
ミドルウェア/ 
フレームワーク 
OS 
アプリケーション! 
フレームワーク 
OS 
HTTP/HTTPS! 
SMTP, SSH, 
ソケット通信など 
①IPv4/IPv6両対応のプログラミング言語と実行環境を使う
ポイント① IPv4/IPv6両対応のプ 
ログラミング言語と実行環境を使う 
(1) 
IPv4/IPv6両対応のプログラミング言語と 
実行環境? 
IPv4/IPv6の両方で通信できる 
24 
! 
1. 名前解決でIPv4/IPv6両方のアドレスが扱える! 
2. IPv4/IPv6両方で接続できる
ポイント① IPv4/IPv6両対応のプ 
ログラミング言語と実行環境を使う 
(2) 
名前解決でIPv4/IPv6両方のアドレスが扱える 
FQDNからIPv6アドレスが名前解決できる 
名前解決で得られるIPv6アドレスを認識、接続先アドレス 
に指定できる 
25 
Client 
Web Server 
www.example.jp 
2001:db8:100::1 
example.jpの 
権威DNS Server 
■ AAAAレコード(IPv4 
のAレコードに相当)を 
リソースレコードに 
登録 
www.example.jp IN AAAA 2001:db8:100::1 
①名前解決問合せ! 
www.example.jp ? 
②AAAA応答! 
2001:db8:100::1 
③HTTP通信 
! 
! 
! 
! 
! 
!
ポイント① プログラミング言 
語と実行環境 Perlの対応状況 
考慮すべき要素対応状況備考 
名前解決○ ■ Socket::getaddrinfo()! 
処理○ CPANモジュール Net::IPにより対応 
26 
■ Socket::getnameinfo()! 
■ CPAN Net::DNS 
ソケット○ ■ コアモジュールの Socketは 5.10 から 
部分的に対応! 
■ 5.14でフル対応! 
各種(L7) ■ CPANモジュールにも対応しているも 
プロトコル 
HTTP 
クライアント▲ 標準では非対応(コアモジュール 
HTTP::Tiny, LWP等のメジャーなモジュ 
ールも非対応) 
SMTP 
クライアント▲ 標準では非対応(コアモジュール 
Net::SMTP) 
その他IPv6アドレスの
ポイント① プログラミング言 
語と実行環境 PHPの対応状況 
考慮すべき要素対応状況備考 
名前解決○ ■ dns_get_record()! 
処理○ PEAR Net_IPv6拡張パッケージ 
27 
■ gethostbyaddr()! 
■ PEAR Net_DNS2 
ソケット○ inet_pton(), inet_ptop()は 5.1.0 以降 
対応 
各種(L7) 
プロトコル 
HTTP 
クライアント○ 各種ファイル関数 
cURLなど 
SMTP 
クライアント○ PEAR Net_SMTP! 
mail(), PEAR Mail ⇒システム環境依存 
その他IPv6アドレスの
ポイント① IPv4/IPv6両対応のプ 
ログラミング言語と実行環境を使う 
(3) 
プログラミングにおける留意点 
IPv4/IPv6の双方に対応するライブラリ、 
オブジェクト、関数、データ型を使う 
従来(IPv4のみ)のものとは別に用意されている 
ことがある 
C addrinfo構造体、getaddrinfo() 
Java InetAddressクラス 
Perl IO::Socket::IP       など 
28 
! 
アドレス検証、変換などはライブラリを有効活用
ポイント② 通信処理をIPv4/ 
IPv6の両方に対応させる(1) 
接続の優先順位(標準;RFC6724):IPv6 > IPv4 
! 
サーバプログラム 
IPv4/IPv6 両プロトコルでの 
接続を処理 
Client Server 
! 
クライアントプログラム 
IPv4/IPv6 両宛先アドレスに接続できるようにする 
接続できない状況も想定し、接続失敗時には別の 
宛先アドレスに切替えて接続する(フォールバック) 
  
29 
IPv6 IPv6 
IPv4 IPv4 
アプリケーションの作りが悪いと… 
■ 切替えに時間がかかる 
■ 正常に切替わらないこともある 
ユーザの利便性を 
損なう
ポイント② 通信処理をIPv4/ 
IPv6の両方に対応させる(2) 
フォールバック 
IPv4 ⇒ IPv6 / IPv6 ⇒ IPv4 / IPv4 ⇒ IPv4 / IPv6 ⇒ IPv6 
30 
! 
! 
! 
! 
! 
! 
! 
! 
Client 
Web Server! 
www.example.jp 
DNS Server 
www.example.jp IN AAAA 2001:db8:100::1! 
www.example.jp IN A 192.0.2.1 
①名前解決問合せ! 
www.example.jp ? 
②AAAA応答 2001:db8:100::1! 
 A応答 192.0.2.1 
③HTTP通信(IPv6) 2001:db8:100::1 
192.0.2.1 
2001:db8:ffff::1 
198.51.100.1 
④HTTP通信(IPv4) フォールバック
ポイント② 通信処理をIPv4/ 
IPv6の両方に対応させる(3) 
想定されるフォールバックの主な原因 
サーバ側の 
問題 
サーバが当該のサービスを提供していない 
DNS誤登録、障害等 
経路の問題ネットワークの接続性が失われている 
ISPの不具合 
31 
クライアント 
側の問題 
サーバへの到達性がないアドレスを 
選択して通信を行おうとしている 
グローバルアドレスを使用している 
閉域網
ポイント② 通信処理をIPv4/ 
IPv6の両方に対応させる(4) 
フォールバックの予防策 
サーバ設定の不備を修正する 
サービスを提供していないIPアドレス 
をDNSに登録しない 
サービスを適切に提供する 
ISP ネットワークの接続性を健全に保つ 
クライアントIPv6インターネット接続可能なISPと契 
32 
約する
ポイント② 通信処理をIPv4/ 
IPv6の両方に対応させる(5) 
クライアントプログラム 
ホスト名の名前解決結果を 
リスト形式で取得し、 
アドレスリストの順に接続を 
試み、接続が確立したものと 
送受信を行う 
Good! 
! 
更に迅速にフォールバックを行うために、 
Happy Eyeballs(RFC6555)も選択肢の一つ  
33 
ホスト名解決 
(DNS問合せ) 
接続成功? 
Yes 
No 
リスト取得 
リスト順次取出し
ポイント② 通信処理をIPv4/ 
IPv6の両方に対応させる(6) 
クライアント サンプルコード抜粋(1/2) 
/* resolve address/port into sockaddr */ 
memset(&hints, 0, sizeof(hints)); 
hints.ai_family = AF_UNSPEC; 
hints.ai_socktype = SOCK_STREAM; 
error = getaddrinfo(argv[1], argv[2], &hints, &res0); 
! 
if (error) { 
fprintf(stderr, "%s %s: %sn", argv[1], argv[2], 
34 
gai_strerror(error)); 
exit(1); 
} 
! 
/* 次のページに続く */
ポイント② 通信処理をIPv4/ 
IPv6の両方に対応させる(7) 
クライアント サンプルコード抜粋(2/2) 
/* try all the sockaddrs until connection goes successful */ 
for (res = res0; res; res = res->ai_next) { 
fprintf(stderr, "trying %s port %sn", hbuf, sbuf); 
s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); 
if (s < 0) continue; 
if (connect(s, res->ai_addr, res->ai_addrlen) < 0) { 
close(s); 
s = -1; 
continue; 
} 
! 
while ((l = read(s, buf, sizeof(buf))) > 0) 
write(STDOUT_FILENO, buf, l); 
close(s); 
exit(0); 
} 
35
ポイント② 通信処理をIPv4/ 
IPv6の両方に対応させる(8) 
サーバプログラム 
同一ソースコードでプログラムを作成 
IPv4/IPv6両方の接続を同時に受付ける2種類の 
手法 
接続プログラム 
A :ソケットB 
36 
プロセス 
A 
IPv6 
接続 
IPv4 
プログラム 
α 
接続 
プロセス 
B 
サーバ 
プロセス 
C 
IPv6 
IPv4 
接続 
β 
サーバ
ポイント③ データとしてIPアドレ 
スを扱う箇所をIPv4/IPv6の両方 
に対応させる(1) 
! 
データとしてIPアドレスを扱う箇所 
出力入力 
37 
整列 
検索 
格納
ポイント③ データとしてIPアドレ 
スを扱う箇所をIPv4/IPv6の両方 
に対応させる(2) 
アドレス体系の違い 
IPv4アドレスIPv6アドレス 
! 
アドレス長32bit 128bit 
! 
文字列 
表記法8bitずつ区切り、 
表記 
10進数で表記 
! 
! 
例 
IPv4)192.0.2.1 
IPv6完全表記)2001:0db8:0000:0000:0001:0000:0000:0001 
IPv6省略表記)2001:db8::1:0:0:1 (RFC5952準拠) 
38 
16bitずつ区切 
り、16進数で表記 
区切り文字. (ドット) : (コロン) 
文字列長15文字以内39文字以内 
RFC5952に文書化されているIPv6アドレス 
推奨テキスト表記ルールに従い省略可能
ポイント③ データとしてIPアドレ 
スを扱う箇所をIPv4/IPv6の両方 
に対応させる(3) 
入力 
整数ではなく文字列で入力 
IPv4のみ15文字以内の文字列 [VARCHAR(15)] 
! 
もしくは整数×4 
! 
! 
IPv4/IPv6両対応39文字以内の文字列 [VARCHAR(39)] 
! 
入力値の検証はライブラリの関数・フィルタを利用 
例)PHP Net_IPv6::checkIPv6(); 
  (PEARにて提供されるNet_IPv6パッケージに 
   含まれる) 
39 
Good!
ポイント③ データとしてIPアドレ 
スを扱う箇所をIPv4/IPv6の両方 
に対応させる(4) 
格納、検索、整列、出力 
IPアドレス型が定義されている場合は、IPアドレス型を 
使う 
例) PostgreSQLのネットワークアドレス型 
IPアドレス型が定義されていない場合は、文字列型で 
完全表記を使う 
IPv6完全表記) 
2001:0db8:0000:0000:0001:0000:0000:0001 
見やすさを求めるときは、省略表記(RFC5952準拠)で出力 
既存システムは、格納領域にIPv6アドレスが収まるか 
をチェック 
40
ポイント③ データとしてIPアドレ 
スを扱う箇所をIPv4/IPv6の両方 
に対応させる(5) 
なぜ、完全表記? 
省略表記のままソートしても… 
アドレス昇順ソート後 
41 
2001:db8:0:1::1:1 
2001:db8:0:2::1 
2001:db8:0:1::50 
2001:db8:0:10::1 
ソート前 
2001:db8:0:10::1 
2001:db8:0:1::1:1 
2001:db8:0:1::50 
2001:db8:0:2::1 
2001:db8:0:1::50 
2001:db8:0:1::1:1 
2001:db8:0:2::1 
2001:db8:0:10::1 
省略表記の 
ソートは 
アドレス昇順と 
一致しない 
(文字列) 
ソート 
アドレス 
昇順
ポイント③ データとしてIPアドレ 
スを扱う箇所をIPv4/IPv6の両方 
に対応させる(6) 
ソートは完全表記で行う 
2001:db8:0:1::1:1 
2001:db8:0:2::1 
2001:db8:0:1::50 
2001:db8:0:10::1 
完全表記のソートは 
アドレス昇順と一致 
42 
ソート前 
アドレス 
昇順 
完全表記 
(文字列) 
ソート 
アドレス昇順ソート後 
2001:db8:0:1::50 
2001:db8:0:1::1:1 
2001:db8:0:2::1 
2001:db8:0:10::1 
2001:0db8:0000:0001:0000:0000:0001:0001 
2001:0db8:0000:0002:0000:0000:0000:0001 
2001:0db8:0000:0001:0000:0000:0000:0050 
2001:0db8:0000:0010:0000:0000:0000:0001 
2001:0db8:0000:0001:0000:0000:0000:0050 
2001:0db8:0000:0001:0000:0000:0001:0001 
2001:0db8:0000:0002:0000:0000:0000:0001 
2001:0db8:0000:0010:0000:0000:0000:0001
43 
おわりに
まとめ(1) 
IPv6を使える環境が増えている 
IPv4とIPv6の違い:アドレス空間が異なる , etc. 
                 ⇒互換性なし 
IPアドレスのハードコーディングはダメ。ゼッタイ。 
IPv6対応の基本方針 
IPv6対応=IPv6/IPv4の両方で動作させること 
シングルソースコードで対応する 
44
まとめ(2) 
IPv6対応のポイント 
1. IPv4/IPv6両対応のプログラミング言語と実行 
環境を使う 
2. 通信処理をIPv4/IPv6の両方に対応させる 
3. データとしてIPアドレスを扱う箇所をIPv4/IPv6 
の両方に対応させる 
45 
! 
  
決して難しくない! 
今日から開発するアプリケーションは 
IPv6に対応させよう!
つづきはWebで 
(参考文献) 
「アプリケーションのIPv6対応ガイドライン 基礎編」/IPv6 
普及・高度化推進協議会 IPv4/IPv6共存WG アプリケーションの 
IPv6対応検討SWG 
http://www.v6pc.jp/jp/entry/wg/2012/12/ipv610.phtml! 
! 
「アプリケーションのIPv6対応ガイドライン Webアプリ編 
(案)」/IPv6普及・高度化推進協議会 IPv4/IPv6共存WG 
アプリケーションのIPv6対応検討SWG 
http://www.v6pc.jp/jp/entry/wg/2014/06/ipv6web.phtml! 
! 
Internet Week 2013「T2 アプリケーション・サービスのIPv6対 
応」 
軽量プログラミング言語のIPv6対応 Perl編! 
https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/t2/t2-watanabe-2.pdf! ! 
軽量プログラミング言語のIPv6対応 PHP編! 
https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/t2/t2-hatano-2.pdf 
46
ご清聴いただき、 
ありがとうございました 
47

More Related Content

What's hot

OSC2015 Hamanako IPv6アプリの作り方
OSC2015 Hamanako IPv6アプリの作り方OSC2015 Hamanako IPv6アプリの作り方
OSC2015 Hamanako IPv6アプリの作り方v6app
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3日本Javaユーザーグループ
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞DMM.com
 
IoT Cyber Security Counter Measurement
IoT Cyber Security Counter MeasurementIoT Cyber Security Counter Measurement
IoT Cyber Security Counter MeasurementKiyoshi Ogawa
 
safety and security using Raspberry PI
safety and security using Raspberry PIsafety and security using Raspberry PI
safety and security using Raspberry PIKiyoshi Ogawa
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜Akira Nakagawa
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア外道 父
 
545人のインフラを支えたNOCチーム!
545人のインフラを支えたNOCチーム!545人のインフラを支えたNOCチーム!
545人のインフラを支えたNOCチーム!Masayuki Kobayashi
 
Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...
Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...
Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...NTT DATA OSS Professional Services
 
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~NTT DATA OSS Professional Services
 
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Takuya Iwatsuka
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)
SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)
SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)NTT DATA OSS Professional Services
 
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2Kiyotaka Doumae
 
CMDBuild overview (Japanese) V2.4 update
CMDBuild overview (Japanese) V2.4 updateCMDBuild overview (Japanese) V2.4 update
CMDBuild overview (Japanese) V2.4 updateOSSラボ株式会社
 
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後  #html5j #html5j_b大規模運用で見えるWebプロトコルの理想と現実、そして今後  #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_bYahoo!デベロッパーネットワーク
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのことNTT DATA OSS Professional Services
 

What's hot (20)

OSC2015 Hamanako IPv6アプリの作り方
OSC2015 Hamanako IPv6アプリの作り方OSC2015 Hamanako IPv6アプリの作り方
OSC2015 Hamanako IPv6アプリの作り方
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞
 
20170303 java9 hadoop
20170303 java9 hadoop20170303 java9 hadoop
20170303 java9 hadoop
 
IoT Cyber Security Counter Measurement
IoT Cyber Security Counter MeasurementIoT Cyber Security Counter Measurement
IoT Cyber Security Counter Measurement
 
ネットワーク構築訓練 入門
ネットワーク構築訓練 入門ネットワーク構築訓練 入門
ネットワーク構築訓練 入門
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
safety and security using Raspberry PI
safety and security using Raspberry PIsafety and security using Raspberry PI
safety and security using Raspberry PI
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 
545人のインフラを支えたNOCチーム!
545人のインフラを支えたNOCチーム!545人のインフラを支えたNOCチーム!
545人のインフラを支えたNOCチーム!
 
Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...
Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...
Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...
 
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
 
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)
SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)
SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)
 
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
 
CMDBuild overview (Japanese) V2.4 update
CMDBuild overview (Japanese) V2.4 updateCMDBuild overview (Japanese) V2.4 update
CMDBuild overview (Japanese) V2.4 update
 
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後  #html5j #html5j_b大規模運用で見えるWebプロトコルの理想と現実、そして今後  #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと
 

Similar to これからのアプリ開発はIPv6対応で行こう!(2014/09/20 OSC Hiroshima版)

V6prog OSC2013Hokkaido
V6prog OSC2013HokkaidoV6prog OSC2013Hokkaido
V6prog OSC2013HokkaidoKohki Ohhira
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向Yuya Rin
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419エイシュン コンドウ
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
I pv6 research_basical
I pv6 research_basicalI pv6 research_basical
I pv6 research_basicalkuni255
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
20120516 v6opsf-ngn final
20120516 v6opsf-ngn final20120516 v6opsf-ngn final
20120516 v6opsf-ngn finalRuri Hiromi
 
IPv6セキュリティ はじめの一歩
IPv6セキュリティ はじめの一歩IPv6セキュリティ はじめの一歩
IPv6セキュリティ はじめの一歩Kenji Ohira
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_finalKazumasa Ikuta
 
IPv6 application_and_v4kokatsu-tf
IPv6 application_and_v4kokatsu-tfIPv6 application_and_v4kokatsu-tf
IPv6 application_and_v4kokatsu-tfRuri Hiromi
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC EnterpriseYusukeKuramata
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大openrtm
 
Lagopus Project (Open Source Conference)
Lagopus Project (Open Source Conference)Lagopus Project (Open Source Conference)
Lagopus Project (Open Source Conference)Tomoya Hibi
 
サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)ひとし あまの
 
I Pv6 Service Deployment Guideline
I Pv6 Service Deployment GuidelineI Pv6 Service Deployment Guideline
I Pv6 Service Deployment Guidelineguestfcd0535
 
IETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjpIETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjpKaoru Maeda
 
RasPiからSEILにL2TP/IPSec接続
RasPiからSEILにL2TP/IPSec接続RasPiからSEILにL2TP/IPSec接続
RasPiからSEILにL2TP/IPSec接続Michiya Tominaga
 
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】洵貴 佐川
 

Similar to これからのアプリ開発はIPv6対応で行こう!(2014/09/20 OSC Hiroshima版) (20)

IPv6 Update
IPv6 UpdateIPv6 Update
IPv6 Update
 
V6prog OSC2013Hokkaido
V6prog OSC2013HokkaidoV6prog OSC2013Hokkaido
V6prog OSC2013Hokkaido
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
I pv6 research_basical
I pv6 research_basicalI pv6 research_basical
I pv6 research_basical
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
20120516 v6opsf-ngn final
20120516 v6opsf-ngn final20120516 v6opsf-ngn final
20120516 v6opsf-ngn final
 
IPv6セキュリティ はじめの一歩
IPv6セキュリティ はじめの一歩IPv6セキュリティ はじめの一歩
IPv6セキュリティ はじめの一歩
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_final
 
IPv6 application_and_v4kokatsu-tf
IPv6 application_and_v4kokatsu-tfIPv6 application_and_v4kokatsu-tf
IPv6 application_and_v4kokatsu-tf
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
 
Lagopus Project (Open Source Conference)
Lagopus Project (Open Source Conference)Lagopus Project (Open Source Conference)
Lagopus Project (Open Source Conference)
 
サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)
 
I Pv6 Service Deployment Guideline
I Pv6 Service Deployment GuidelineI Pv6 Service Deployment Guideline
I Pv6 Service Deployment Guideline
 
IETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjpIETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjp
 
さくらのクラウド導入セミナー(2016.10) 第二部 活用編
さくらのクラウド導入セミナー(2016.10) 第二部 活用編さくらのクラウド導入セミナー(2016.10) 第二部 活用編
さくらのクラウド導入セミナー(2016.10) 第二部 活用編
 
RasPiからSEILにL2TP/IPSec接続
RasPiからSEILにL2TP/IPSec接続RasPiからSEILにL2TP/IPSec接続
RasPiからSEILにL2TP/IPSec接続
 
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

これからのアプリ開発はIPv6対応で行こう!(2014/09/20 OSC Hiroshima版)

  • 1. オープンソースカンファレンス2014 Hiroshima! jus研究会広島大会 これからのアプリ開発は IPv6対応で行こう! 2014年9月20日 IPv6普及・高度化推進協議会 渡辺 露文  
  • 2. About me 渡辺 露文(わたなべ つゆふみ) Twitter: @tsuyu23 某SIer勤務 IPv6普及・高度化推進協議会 会員 IPv6導入に起因する問題検討SWG アプリケーションのIPv6対応検討SWG 技術評論社 Software Design誌連載 (2012年12月号~     2014年1月号) ! 2
  • 3. Do you know … IPv6 ? Internet Protocol version 6 インターネットの通信に関する規約(RFC791) IPネットワークに接続するには1つ以上のIPアドレスが必要 皆さんが馴染んでいるのはIPv4(例:10.1.2.3) 3
  • 4. 実はIPv6を使える環境が 増えています(1) 最近のOS Windows Vista以降 Mac OS X Linux FreeBSD  … ! ! 4 いずれも デフォルトで 利用可能
  • 5. 実はIPv6を使える環境が 増えています(2) インターネット回線 フレッツ光ネクスト au ひかり NURO 光  … ! ! 5 利用可能 既存ユーザへの自動導入も 進行中 すでに、ユーザからあなたのサービスにIPv6で アクセスされようとしている…かもしれない
  • 6. 日本におけるIPv6の普及 状況 フレッツ光ネクストのIPv6普及率 (2014年6月) IPv6普及率:3.1%! フレッツ光ネクスト契約数:13,588,000契約! ! au ひかりのIPv6普及率(2014年6月):68% ! ! 今後本格的に普及する前に 出典:IPv6普及・高度化推進協議会 アクセス網におけるIPv6普及状況調査!    http://v6pc.jp/jp/spread/ipv6spread_03.phtml IPv6対応を始めたほうが良い 6
  • 7. 余談:IPv6でインターネット にアクセスできるかの確認方法 Webブラウザで http://www.test-ipv6.jp にアクセス ! ! ! ! Webブラウザで http://www.kame.net にアクセス ! ! ! 7 IPv6でアクセスすると、 亀が踊ります♪
  • 8. IPv6の背景:   IPv4アドレス枯渇 IPv4アドレスの在庫状況 (地域インターネットレジストリ) 8 通信事業者、ISP、 データセンター、 クラウド事業者等の 在庫が残るのみ 世界的に足りなくなってきている
  • 10. IPv4とIPv6とでは何が 違うのか? アドレス体系が異なる (IPv6のアドレス空間は広大) 例 IPv4)192.0.2.1 IPv6完全表記) 2001:0db8:0000:0000:0001:0000:0000:0001 IPv6省略表記)2001:db8::1:0:0:1 (RFC5952準拠) 10 ! 他にも機能的にIPv4と異なることがある   IPv4とIPv6は互換性がない
  • 11. IPv4とIPv6の接続性 11 Internet IPv4対応 (IPv6非対応) システム IPv4/IPv6 両対応システム IPv6対応 (IPv4非対応) システム (1) (2) (3) IPv4端末 IPv4/IPv6 両対応端末 IPv6端末 IPv4 IPv6
  • 12. IPv6に対応しない場合の 影響 1. IPv6のみの環境と通信できない! ビジネス機会を損失する! システム連携が行えず要件を満たせなくなる! 2. 今後、IPv4はサービスレベルが低下していく! 通信事業者等によるCGN(Carrier Grade NAT) 導入により、遅くなり、使用できるセッション 数が減る可能性がある! ! ! IPv6に対応しなきゃ! 12
  • 13. インフラがIPv6に対応す るだけでいいのでは? ネットワークとサーバがIPv6に対応すれば、IPv6で接続 可能 ! 接続は可能だが… サービスが正常に動作しない 13 !!! かもしれない システム連携がうまくいかない! 想定外の挙動をする!   … ! アプリケーションもIPv6に対応しなきゃ!
  • 14. IPv6対応の話をする前に …① このコード、イケてない… use IO::Socket::IP; $host = “198.51.100.1”; : : my $sock = IO::Socket::IP->new( PeerAddr => $host, PeerPort => $port, Proto => 'tcp' ) or die “Error: $!n”; : : 14 えっ、 IPアドレス直書き? IPアドレス直書きすると、 アドレス変更時に修正が 必要なんですよ… 再テストも必要だし… ダメよ~ダメダメ
  • 15. IPv6対応の話をする前に …② とある Androidプログラミング書籍に おけるソケット通信のサンプルコード 15 public class SocketEx… … … private final static String IP=“192.168.11.12”;//★変更必須 良い子は真似しちゃダメ
  • 16. IPv6対応の話をする前に …③ IPアドレスのハードコーディングはNG 16 ダメ。ゼッタイ。 $host = “www.example.com” のようにFQDNで接続先を指定する
  • 17. ネットワークアクセスの 作法=名前解決を使う Internet 17 Client Web Server www.example.jp 2001:db8:100::1 192.0.2.1 DNS Server 198.51.100.53 ①名前解決問合せ! www.example.jp ? ②アドレス応答! www.example.jp ⇒ 2001:db8:100::1 ! !   192.0.2.1 ③HTTP通信 FQDN FQDNで接続先を指定し、DNSからアドレス取得
  • 18. なぜIPアドレス直書きが ダメなのか? 目的変更・改修の理由 アプリケーション機能の提供■ 業務要件の変更! ■ サービス内容の変更! ■ ユーザビリティ向上 …,etc. インフラ資源の提供■ 資源管理(IPアドレス、サーバラック…)! ■ 性能 同一システムでも変更・改修の理由・時期は異なる 互いに変更の影響を受けるべきではない アプリケーションは、IPアドレスに依存すべきではない 例)IPアドレスでユーザを識別すべきではない 18
  • 20. アプリケーションIPv6対 応の基本方針  IPv6対応 =!     IPv4とIPv6の両方で動作する シングルソースコードで対応 20
  • 21. アプリケーションIPv6対 応の基本方針  IPv6対応 =!     IPv4とIPv6の両方で動作する 21 ! !!!! IPv6とIPv4の共存期間が長く続く! これまでIPv4で提供してきたサービスは、今後 も継続してIPv4でも動作する必要あり
  • 22. アプリケーションIPv6対 応の基本方針 シングルソースコードで対応 22 ! !!! 各開発言語が概ねIPv6に対応しており、プロト コルによって開発言語を分ける必要がなくなっ た! アプリケーションのメンテナンス性を重視し、 プロトコルによって機能差異が生じることを未 然に防ぐ
  • 23. アプリケーションのIPv6 対応のポイント ②通信処理をIPv4/IPv6の  両方に対応させる ③データとしてIPアドレスを  扱う箇所をIPv4/IPv6の  両方に対応させる クライアントサーバ TCP / UDP IP(v4/v6) Ethernet 23 アプリケーション! ミドルウェア/ フレームワーク OS アプリケーション! フレームワーク OS HTTP/HTTPS! SMTP, SSH, ソケット通信など ①IPv4/IPv6両対応のプログラミング言語と実行環境を使う
  • 24. ポイント① IPv4/IPv6両対応のプ ログラミング言語と実行環境を使う (1) IPv4/IPv6両対応のプログラミング言語と 実行環境? IPv4/IPv6の両方で通信できる 24 ! 1. 名前解決でIPv4/IPv6両方のアドレスが扱える! 2. IPv4/IPv6両方で接続できる
  • 25. ポイント① IPv4/IPv6両対応のプ ログラミング言語と実行環境を使う (2) 名前解決でIPv4/IPv6両方のアドレスが扱える FQDNからIPv6アドレスが名前解決できる 名前解決で得られるIPv6アドレスを認識、接続先アドレス に指定できる 25 Client Web Server www.example.jp 2001:db8:100::1 example.jpの 権威DNS Server ■ AAAAレコード(IPv4 のAレコードに相当)を リソースレコードに 登録 www.example.jp IN AAAA 2001:db8:100::1 ①名前解決問合せ! www.example.jp ? ②AAAA応答! 2001:db8:100::1 ③HTTP通信 ! ! ! ! ! !
  • 26. ポイント① プログラミング言 語と実行環境 Perlの対応状況 考慮すべき要素対応状況備考 名前解決○ ■ Socket::getaddrinfo()! 処理○ CPANモジュール Net::IPにより対応 26 ■ Socket::getnameinfo()! ■ CPAN Net::DNS ソケット○ ■ コアモジュールの Socketは 5.10 から 部分的に対応! ■ 5.14でフル対応! 各種(L7) ■ CPANモジュールにも対応しているも プロトコル HTTP クライアント▲ 標準では非対応(コアモジュール HTTP::Tiny, LWP等のメジャーなモジュ ールも非対応) SMTP クライアント▲ 標準では非対応(コアモジュール Net::SMTP) その他IPv6アドレスの
  • 27. ポイント① プログラミング言 語と実行環境 PHPの対応状況 考慮すべき要素対応状況備考 名前解決○ ■ dns_get_record()! 処理○ PEAR Net_IPv6拡張パッケージ 27 ■ gethostbyaddr()! ■ PEAR Net_DNS2 ソケット○ inet_pton(), inet_ptop()は 5.1.0 以降 対応 各種(L7) プロトコル HTTP クライアント○ 各種ファイル関数 cURLなど SMTP クライアント○ PEAR Net_SMTP! mail(), PEAR Mail ⇒システム環境依存 その他IPv6アドレスの
  • 28. ポイント① IPv4/IPv6両対応のプ ログラミング言語と実行環境を使う (3) プログラミングにおける留意点 IPv4/IPv6の双方に対応するライブラリ、 オブジェクト、関数、データ型を使う 従来(IPv4のみ)のものとは別に用意されている ことがある C addrinfo構造体、getaddrinfo() Java InetAddressクラス Perl IO::Socket::IP       など 28 ! アドレス検証、変換などはライブラリを有効活用
  • 29. ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(1) 接続の優先順位(標準;RFC6724):IPv6 > IPv4 ! サーバプログラム IPv4/IPv6 両プロトコルでの 接続を処理 Client Server ! クライアントプログラム IPv4/IPv6 両宛先アドレスに接続できるようにする 接続できない状況も想定し、接続失敗時には別の 宛先アドレスに切替えて接続する(フォールバック)   29 IPv6 IPv6 IPv4 IPv4 アプリケーションの作りが悪いと… ■ 切替えに時間がかかる ■ 正常に切替わらないこともある ユーザの利便性を 損なう
  • 30. ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(2) フォールバック IPv4 ⇒ IPv6 / IPv6 ⇒ IPv4 / IPv4 ⇒ IPv4 / IPv6 ⇒ IPv6 30 ! ! ! ! ! ! ! ! Client Web Server! www.example.jp DNS Server www.example.jp IN AAAA 2001:db8:100::1! www.example.jp IN A 192.0.2.1 ①名前解決問合せ! www.example.jp ? ②AAAA応答 2001:db8:100::1!  A応答 192.0.2.1 ③HTTP通信(IPv6) 2001:db8:100::1 192.0.2.1 2001:db8:ffff::1 198.51.100.1 ④HTTP通信(IPv4) フォールバック
  • 31. ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(3) 想定されるフォールバックの主な原因 サーバ側の 問題 サーバが当該のサービスを提供していない DNS誤登録、障害等 経路の問題ネットワークの接続性が失われている ISPの不具合 31 クライアント 側の問題 サーバへの到達性がないアドレスを 選択して通信を行おうとしている グローバルアドレスを使用している 閉域網
  • 32. ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(4) フォールバックの予防策 サーバ設定の不備を修正する サービスを提供していないIPアドレス をDNSに登録しない サービスを適切に提供する ISP ネットワークの接続性を健全に保つ クライアントIPv6インターネット接続可能なISPと契 32 約する
  • 33. ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(5) クライアントプログラム ホスト名の名前解決結果を リスト形式で取得し、 アドレスリストの順に接続を 試み、接続が確立したものと 送受信を行う Good! ! 更に迅速にフォールバックを行うために、 Happy Eyeballs(RFC6555)も選択肢の一つ  33 ホスト名解決 (DNS問合せ) 接続成功? Yes No リスト取得 リスト順次取出し
  • 34. ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(6) クライアント サンプルコード抜粋(1/2) /* resolve address/port into sockaddr */ memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; error = getaddrinfo(argv[1], argv[2], &hints, &res0); ! if (error) { fprintf(stderr, "%s %s: %sn", argv[1], argv[2], 34 gai_strerror(error)); exit(1); } ! /* 次のページに続く */
  • 35. ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(7) クライアント サンプルコード抜粋(2/2) /* try all the sockaddrs until connection goes successful */ for (res = res0; res; res = res->ai_next) { fprintf(stderr, "trying %s port %sn", hbuf, sbuf); s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if (s < 0) continue; if (connect(s, res->ai_addr, res->ai_addrlen) < 0) { close(s); s = -1; continue; } ! while ((l = read(s, buf, sizeof(buf))) > 0) write(STDOUT_FILENO, buf, l); close(s); exit(0); } 35
  • 36. ポイント② 通信処理をIPv4/ IPv6の両方に対応させる(8) サーバプログラム 同一ソースコードでプログラムを作成 IPv4/IPv6両方の接続を同時に受付ける2種類の 手法 接続プログラム A :ソケットB 36 プロセス A IPv6 接続 IPv4 プログラム α 接続 プロセス B サーバ プロセス C IPv6 IPv4 接続 β サーバ
  • 37. ポイント③ データとしてIPアドレ スを扱う箇所をIPv4/IPv6の両方 に対応させる(1) ! データとしてIPアドレスを扱う箇所 出力入力 37 整列 検索 格納
  • 38. ポイント③ データとしてIPアドレ スを扱う箇所をIPv4/IPv6の両方 に対応させる(2) アドレス体系の違い IPv4アドレスIPv6アドレス ! アドレス長32bit 128bit ! 文字列 表記法8bitずつ区切り、 表記 10進数で表記 ! ! 例 IPv4)192.0.2.1 IPv6完全表記)2001:0db8:0000:0000:0001:0000:0000:0001 IPv6省略表記)2001:db8::1:0:0:1 (RFC5952準拠) 38 16bitずつ区切 り、16進数で表記 区切り文字. (ドット) : (コロン) 文字列長15文字以内39文字以内 RFC5952に文書化されているIPv6アドレス 推奨テキスト表記ルールに従い省略可能
  • 39. ポイント③ データとしてIPアドレ スを扱う箇所をIPv4/IPv6の両方 に対応させる(3) 入力 整数ではなく文字列で入力 IPv4のみ15文字以内の文字列 [VARCHAR(15)] ! もしくは整数×4 ! ! IPv4/IPv6両対応39文字以内の文字列 [VARCHAR(39)] ! 入力値の検証はライブラリの関数・フィルタを利用 例)PHP Net_IPv6::checkIPv6();   (PEARにて提供されるNet_IPv6パッケージに    含まれる) 39 Good!
  • 40. ポイント③ データとしてIPアドレ スを扱う箇所をIPv4/IPv6の両方 に対応させる(4) 格納、検索、整列、出力 IPアドレス型が定義されている場合は、IPアドレス型を 使う 例) PostgreSQLのネットワークアドレス型 IPアドレス型が定義されていない場合は、文字列型で 完全表記を使う IPv6完全表記) 2001:0db8:0000:0000:0001:0000:0000:0001 見やすさを求めるときは、省略表記(RFC5952準拠)で出力 既存システムは、格納領域にIPv6アドレスが収まるか をチェック 40
  • 41. ポイント③ データとしてIPアドレ スを扱う箇所をIPv4/IPv6の両方 に対応させる(5) なぜ、完全表記? 省略表記のままソートしても… アドレス昇順ソート後 41 2001:db8:0:1::1:1 2001:db8:0:2::1 2001:db8:0:1::50 2001:db8:0:10::1 ソート前 2001:db8:0:10::1 2001:db8:0:1::1:1 2001:db8:0:1::50 2001:db8:0:2::1 2001:db8:0:1::50 2001:db8:0:1::1:1 2001:db8:0:2::1 2001:db8:0:10::1 省略表記の ソートは アドレス昇順と 一致しない (文字列) ソート アドレス 昇順
  • 42. ポイント③ データとしてIPアドレ スを扱う箇所をIPv4/IPv6の両方 に対応させる(6) ソートは完全表記で行う 2001:db8:0:1::1:1 2001:db8:0:2::1 2001:db8:0:1::50 2001:db8:0:10::1 完全表記のソートは アドレス昇順と一致 42 ソート前 アドレス 昇順 完全表記 (文字列) ソート アドレス昇順ソート後 2001:db8:0:1::50 2001:db8:0:1::1:1 2001:db8:0:2::1 2001:db8:0:10::1 2001:0db8:0000:0001:0000:0000:0001:0001 2001:0db8:0000:0002:0000:0000:0000:0001 2001:0db8:0000:0001:0000:0000:0000:0050 2001:0db8:0000:0010:0000:0000:0000:0001 2001:0db8:0000:0001:0000:0000:0000:0050 2001:0db8:0000:0001:0000:0000:0001:0001 2001:0db8:0000:0002:0000:0000:0000:0001 2001:0db8:0000:0010:0000:0000:0000:0001
  • 44. まとめ(1) IPv6を使える環境が増えている IPv4とIPv6の違い:アドレス空間が異なる , etc.                  ⇒互換性なし IPアドレスのハードコーディングはダメ。ゼッタイ。 IPv6対応の基本方針 IPv6対応=IPv6/IPv4の両方で動作させること シングルソースコードで対応する 44
  • 45. まとめ(2) IPv6対応のポイント 1. IPv4/IPv6両対応のプログラミング言語と実行 環境を使う 2. 通信処理をIPv4/IPv6の両方に対応させる 3. データとしてIPアドレスを扱う箇所をIPv4/IPv6 の両方に対応させる 45 !   決して難しくない! 今日から開発するアプリケーションは IPv6に対応させよう!
  • 46. つづきはWebで (参考文献) 「アプリケーションのIPv6対応ガイドライン 基礎編」/IPv6 普及・高度化推進協議会 IPv4/IPv6共存WG アプリケーションの IPv6対応検討SWG http://www.v6pc.jp/jp/entry/wg/2012/12/ipv610.phtml! ! 「アプリケーションのIPv6対応ガイドライン Webアプリ編 (案)」/IPv6普及・高度化推進協議会 IPv4/IPv6共存WG アプリケーションのIPv6対応検討SWG http://www.v6pc.jp/jp/entry/wg/2014/06/ipv6web.phtml! ! Internet Week 2013「T2 アプリケーション・サービスのIPv6対 応」 軽量プログラミング言語のIPv6対応 Perl編! https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/t2/t2-watanabe-2.pdf! ! 軽量プログラミング言語のIPv6対応 PHP編! https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/t2/t2-hatano-2.pdf 46