v6prog-05.ppt

Similar documents
BSDソケットによるIPv6プログラミングを紐解く

IPv6 普及 高度化推進協議会 IPv6/IPv4 共存 WG アプリケーションの IPv6 対応検討 SWG 2011 年 9 月に発足 IPv6 移行ガイドライン策定 IPv6 Ready ロゴプログラム Web アプリケーションガイドライン策定基盤となる Socket プログラミングの IP

(Microsoft PowerPoint - IPv6_summit_r2.ppt [\214\335\212\267\203\202\201[\203h])

/*

システムインテグレータのIPv6対応

情報ネットワーク演習 2007 年 10 月 11 日 ( 木 )

Microsoft PowerPoint pptx

システムインテグレータにおけるIPv4アドレス在庫枯渇に向けた取り組み

AsteriskのIPv6対応について

(Microsoft PowerPoint - janog23-server-ipv6-rel-public.ppt [\214\335\212\267\203\202\201[\203h])

オペレーティングシステムとネットワークプログラミング 担当 : 吉藤英明 yoshfuji+camp2008 AT wide.ad.jp セキュリティ & プログラミングキャンプ /08 OS プロトコルスタック (C)2008 YOSHIFUJI Hideaki,

アドレス枯渇対応タスクフォース アドレス枯渇対応タスクフォースとは 来るべき アドレス 枯渇を より円滑に乗り越えるために 19の組織 団体 (2009 年 8 月時点 ) が力を合わせてアドレス枯渇の影響を ネットワークシステムやアプリケーション開発に係わる様々な立場から検証すると同時に それらの

Microsoft PowerPoint - 廣海.pptx

<4D F736F F F696E74202D D54352D6B61746F2D D B82C988CB91B682B582C882A2835C D834F E F205B8CDD8AB B83685D>

2. ネットワークアプリケーションと TCP/IP 2.1. クライアント / サーバモデル TCP/IP プロトコルに従うネットワークアプリケーションの典型的モデルは, クライアント / サーバモデルである. クライアント / サーバモデルでは, クライアントからの要求に対してサーバがサービスを提

多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーシ

chapter 3 chapter 単純な HTTP クライアント / サーバ 61 HTTP クライアントの実装 62 HTTP サーバの実装 Chapter2 のまとめ 67 UDP 3-1 UDP の特徴とプログラミング UDP のプログラミング 71

アプリケーションのIPv6対応概要

TFTP serverの実装

TCP UDP TCP UDP send()sendto()sendmsg() recv()recvfrom()recvmsg() OS Passive Active TCP UDP IP TCP UDP MTAMail Transf

PowerPoint Presentation

CD U.S. Government License Proprietary computer software. Valid license from HP required for possession, use or copying. Consiste

PowerPoint プレゼンテーション

_ODC2017-post

1) // 2) I/O 3) Japan Advanced Institute of Science and Technology 2013/07/26 1

情報ネットワーク演習 2006年10月5日

第1回 ネットワークとは

クライアントOSのIPv6実装事情

アマチュア無線のデジタル通信

演算増幅器

情報通信の基礎

目次 1. DB 更新情報受信 SW 仕様書 構成および機能 全体の構成 DB 更新情報受信 SW の機能 ソフトウェアの設計仕様 DB 更新情報受信 SW の仕様 資料編... 5

ソケット API プロセス間通信の汎用 API プロセス : プログラムのひとつの単位 ex)./a.out とかやると 1 つのプロセスが立ち上がる ソケット API IPv4 IPv6 UNIX domain (UNIX 計算機内プロセス間通信 ) 本実験では IPv4 の TCP および UD

Internet Initiative Japan Inc. プロトコルの脆弱性 ( 株 ) インターネットイニシアティブ 永尾禎啓 Copyright 2004, Internet Initiative Japan Inc.

PowerPoint Presentation

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

Oracle DatabaseとIPv6 Statement of Direction

Microsoft Word - SE第15回.doc

目次 はじめに KDDIのIPv6への取り組み auひかりのipv6 World IPv6 Dayに起きたこと World IPv6 Dayのその後 1

2011/04/20 DNSOPS.JP BoF Simplified DNS Query under IPv4/IPv6 Mixed Environment IPv4/IPv6 混在通信環境における適切な DNS 名前解決方式 北村浩 (NEC/ 電通大 ) 阿多信吾 ( 阪市大 )

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

本セッションの概要 2012 年 11 月現在のスクリプト言語の IPv6 対応状況を, 実例を交えながら概観します ( スクリプト言語での IPv6 対応ネットワークプログラミングの解説 ではありません ) 本セッションで扱うプログラミング言語 Perl

PowerPoint プレゼンテーション

【注意事項】RXファミリ 組み込み用TCP/IP M3S-T4-Tiny

実験 6 通信基礎実験 1 目的 ネットワークを通じてデータ転送を行うことを体験的に学ぶために 本実験ではT CP/IPプロトコルを使い ワークステーション間で通信を行うクライアントサーバモデルのプログラムを作成する 2 解説 1 ネットワークとプロトコルネットワーク ( コンピュータネットワーク

ソフトウェア開発実践セミナー ネットワークの基礎と UNIX ネットワークプログラミング 金子勇 土村展之 情報理工学系研究科数理情報学専攻 2002 年 11 月 6 日 ( 第 4

注意 2013 年くらいに調べた話なので 変化していることもあるかもしれません 2

Oracle DatabaseとIPv6 Statement of Direction

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

SOC Report

LSFE_FW

PowerPoint プレゼンテーション

ネーミング(1)

通信プログラムの試作ーーー UDP を用いたじゃんけんゲームシステム ーーーー裘彬濱 南山大学情報理工学部 ソフトウェア工学科青山研究室

2.5 トランスポート層 147

R80.10_FireWall_Config_Guide_Rev1

スライド タイトルなし

スライド 1

conf_example_260V2_inet_snat.pdf

アプリケーションレベルでの IPv4aaS: Apple の IPv6対応、解説と検証

頑張れフォールバック

インターネット協会迷惑メール対策委員会 インターネット協会は 2001 年に設立された財団法人 賛助会員 94 社 (2010 年 12 月 7 日現在 ) 迷惑メール対策委員会 2004 年に設立 メンバーは ISP の他 大学 企業関係者 それらにサービスを提供する SIer など 2005 年

<4D F736F F D B835E835A E815B8E968BC68ED2838A C B2E646F6378>

buho210.dvi

IPv6 トラブルシューティング ホームネットワーク/SOHO編

使用する前に

HGWとかアダプタとか

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

スライド 1

1 IPv6 WG OS SWG PCOSIPv6 Windows Vista 2 3 KAMEUSAGIMacOSX IPv6 2

<4D F736F F F696E74202D DB A B C C815B E >

◎phpapi.indd

OSSTechプレゼンテーション

プレポスト【解説】

8. Windows の補足情報 コマンドの使用についての説明です Windows からのファイル直接印刷 Windows でコマンドを使用したファイル直接印刷の方法についての説明です この機能はネットワーク接続をしているときに使用できます この方法で印刷できるファイルは 本機が搭載しているエミュレ

6-2- 応ネットワークセキュリティに関する知識 1 独立行政法人情報処理推進機構

IPsec徹底入門

クラスタ構築手順書

センサーデバイスへの仮想IP割り当て実験

VPN 接続の設定

付録 2 システムログ一覧 () 攻撃経路 1. ファイアウォール (FW) ネットワーク型 IPS/IDS Web サーバ AP サーバ DB サーバ プロキシサーバ エラーログ SSL ログ AP ログ ホストログ 非 日時 ファイアウォールホスト名 ファイアウォールルール名及び番号 インバウン

KDDI の IPv6 対応について (update) ~World IPv6 Launch とその後 ~ KDDI 株式会社

Microsoft Word - トンネル方式(3 UNI仕様書5.1版)_ _1910.doc

2

-調達要求番号:

Mobile IPの概要

IIJ GIOリモートアクセスサービス Windows 7 設定ガイド

実習 :VLSM を使用した IPv4 アドレスの設計と実装 トポロジ 学習目標 パート 1: ネットワーク要件の確認 パート 2:VLSM アドレス方式の設計 パート 3:IPv4 ネットワークのケーブル配線と設定 背景 / シナリオ 可変長サブネットマスク (VLSM) は IP アドレスの節約

CLAIM接続利用手順

ほっといたら IPv4 運用に影響する IPv6 の話 アンカーテクノロジー株式会社 國武功一

GIGA光SW-HUB

TinyVPN とブリッジ接続機能による LAN 統合方法 PU-M TinyVPN とブリッジ接続機能による LAN の統合方法 Version 1.7 シモウサ システムズ (C) Shimousa Systems Corporation. All righ

1013  動的解析によるBOTコマンドの自動抽出

MPサーバ設置構成例

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

FUJITSU Cloud Service K5 認証サービス サービス仕様書

Microsoft Word - IPC-intro.docx

Microsoft PowerPoint pptx

自己紹介 名前 : 一ノ瀬太樹 所属 : HASH コンサルティング株式会社 OWASP Japan プロモーションチーム OWASP ZAP ユーザーグループ脆弱性診断研究会 ( 管理者その 3) Perl 入学式 ( サポーター ) HASH Consult

プログラミングI第10回

Transcription:

Socket を使用した IPv6 プログラミング の基礎 IPv6 普及 高度化推進協議会 IPv6/IPv4 共存 WG アプリ IPv6 化検討 SWG メンバー 株式会社リコー研究開発本部基盤技術開発センター大平浩貴 ( おおひらこうき ) 1

IPv6 とその必要性 1990 年代よりインターネットが流行した IP が多数使われるようになった IP を使う端末が増えた IP アドレスの枯渇 インターネットで通信する端末の識別番号 ( 端末の住所 :IP アドレス ) が不足するようになった 新しい IP アドレスを持つ IP にしよう IPv4( 従来型 ) から IPv6( 次世代型 ) へ IPv6 は IPv4 を参考にしているが相互運用性はない 2

IPv6 の対応状況 idc/ ホスティング 続々対応中 ISP 続々対応中 端末 OS PC は対応済み ( 随時機能向上中 ) じゃぁ アプリケーションソフトウェアは? Apache や BIND など 公共性の高いものは対応済み じゃぁ 私たちが作るアプリは? 私たち自身がこれからがんばらないと! アプリケーションソフトウェアが IPv6 対応するにはどうしたらいいか 3

IPv6 プログラミングの情報について 今回の解説で参考にしている書籍 IPv6 ネットワークプログラミング ASCII 社刊 http://ascii.asciimw.jp/books/books/detail/4-7561-4236-2.shtml 著者は萩野純一郎 (itojun) 氏 今回参考にしたプログラムもこの本に掲載されているもの itojun 氏が製作し パブリックドメインで公開 IW2012 の T7 IPv6 実践講座 ~ トラブルシューティング セキュリティ アプリ構築まで ~ セッション https://www.nic.ad.jp/ja/materials/iw/2012/proceedings/t7/ 4

IPv6 普及 高度化推進協議会での活動 IPv6/IPv4 共存 WG アプリケーション IPv6 化検討 SWG http://www.v6pc.jp/jp/wg/coexistencewg/v6app-swg.phtml Socket アプリケーションの IPv6 化 http://www.v6pc.jp/jp/entry/wg/2012/12/ipv610.phtml 手法本文 / サンプルプログラム / ソリューションサンプル http://www.v6pc.jp/jp/upload/pdf/socket-20121203.pdf http://www.v6pc.jp/jp/upload/pdf/socket-sample-20121203.pdf http://www.v6pc.jp/jp/upload/pdf/about_asterisk_ipv6v5-9.pdf Web アプリの IPv6 化 現在調査 検討中 5

IPv6 Summit も北海道で開催 IPv6 Summit 2014 in Hokkaido IPv6 に関する最新事情の講演会 1 月ないしは 2 月に実施 社団法人日本インターネット協会 ( IAjapan) が主催 http://www.iajapan.org/ IPv6 ディプロイメント委員会による http://www.iajapan.org/ipv6/ みなさまお誘い合わせの上 ご参加をよろしくお願いいたします 6

今回の説明の概要 BSD Socket API を使用したアプリケーションソフトウェアの IPv6 化を説明 クライアントプログラムの IPv6 対応 具体的な手順 サーバプログラムの IPv6 対応 手法の分類 具体的な手順は割愛 ( すみません ) 名前解決の問題と解決案 組み込みの話 7

BSD Socket による クライアントアプリケーションの IPv6 化 8

IPv6 対応 デュアルスタック対応とは IPv6 だけでなく従来の IPv4 にも対応しなければならない 従来 : シングルスタック ひとつのプロトコル (IPv4) に対応していた 今後 : デュアルスタック ( IPv6/IPv4 両対応プログラム ) クライアントは複数のプロトコル 複数アドレスの中のどれで送信を行うか選ばなければならない サーバは複数のプロトコル アドレスで同時に受信しなければならない ただ単に関数を変更するだけではだめ選択機構や 並列受信機構などが新たに必要となる 9

従来のクライアントプログラミング IPv4 対応シングルスタックによるクライアントアプリの大まかな流れ ホスト名解決 サービス名解決 Socket 生成 ( ファイルデスクリプタ生成 ) Connect 実行 ( 通信相手指定 接続を確立 ) デスクリプタによる入出力 クローズ 10

ホスト名 サービス名解決 IPv4 ホスト名 :gethostbyname() で hostent 構造体を得る サービス : getservbyname() で servent 構造体を得る デュアルスタック getaddrinfo() を呼ぶと addrinfo 構造体のリストが得られる リストの開放は freeaddrinfo() 関数に引数でそのリストを与える 注意 gethostbyname2() は IPv6 を扱えるが使うべきではない 11

addrinfo 構造体と sockaddr 構造体 addrinfo 構造体 1インスタンスで1アドレス情報を持ち リストを構築している 内部でアドレスを保持するsockaddr 構造体へのリンクを持つ sockaddr 構造体 IPv4やIPv6など各種アドレス情報を汎化した構造体 実体はsockaddr_in6(v6) やsockaddr_in(v4) どのアドレスが入るかわからない場合はsockaddr_storageで定義 12

逆引き IPv4 アドレス :gethostbyaddr() で hostent 型構造体を得る サービス :getservbyport() で servent 構造体を得る デュアルスタック getnameinfo() に sockaddr 構造体を与えるとホスト名やサービス名の文字列を取得できる 文字列領域は呼び出し元が引数で与える いろいろなオプションが指定可能 NI_NOFQDN FQDN ではなくホスト名だけ NI_DGRAM UDP のポート情報を得る NI_NUMERICHOST 逆引きせずアドレスの文字列表現を返す etc... 13

ソケット生成 コネクト デュアルスタックの場合 addrinfo 構造体を参照する 例 :addrinfo ai; プロトコルファミリ : ai->ai_family ソケットタイプ : ai->ai_socktype プロトコル : ai->ai_protocol アドレス : ai->ai_addr アドレス長 : ai->ai_addrlen 実例 s=socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); connect(s, ai->ai_addr, ai->ai_addrlen); 14

クライアントのコード概要 struct addrinfo hints, *res, *resall; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; getaddrinfo( www.v6pc.jp, http, &hints, &resall); for (res = resall; res; res = res->ai_next) { 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); continue; } /* 読み書き */ close(s); break; } 15

デュアルスタッククライアントのまとめ getaddrinfo() で接続先 IP アドレスのリストを得る addrinfo 構造体のリスト リストの順にソケット生成 接続を行い 成功したら通信して終了する サンプルプログラム http://www.v6pc.jp/jp/upload/pdf/socketsample-20121203.pdf 16

BSD Socket による サーバアプリケーションの IPv6 対応 17

サーバのデュアルスタック化 いくつか手法がある inetd を使用する 自身のプロトコル アドレスの数だけ socket() を生成して 全ての FD に対して応答処理をする シングルスタック仕様のプログラムを複数プロセス走行させる IPv4 マップドアドレス (IPv4 Mapped IPv6 address) を使用して v6 ソケットで通信する 18

サーバアプリ実現手法の分類 inetd 2 socket 3 4 IPv4 inetd IPv6 IPv6 IPv4/ IPv6 inetd IPv4 IPv6 IPv4 19

inetd によるデュアルスタックサーバ 通信部分は変わらない 通信相手アドレスを取得する部分で注意が必要 getpeername() FD と sockaddr 構造体を引数で渡すと sockaddr 構造体に相手ピアアドレスを書く 引数は sockaddr 構造体ではなく sockaddr_storage 構造体を使用する sockaddr_storage 構造体はどんなプロトコルのアドレスでも記憶できる領域を持つ sockaddr_storage from; getpeername(0,(sockaddr*)&from,sizeof(from)); あとは getnameinfo() で文字列化 手法 1 20

複数 socket で待ち受けるサーバ もっとも典型的で理想的な対応 プログラム構成が変化する 複数のデスクリプタを同時待ち受けする機構 手法 2 完全な新規で設計する通信プログラムはこの構成が望ましい 21

複数ソケットを処理するサーバの流れ getaddrinfo() で自身のプロトコル アドレスを addrinfo 構造体のリストで得る hints パラメータで AI_PASSIVE を指定すると IN_ADDR_ANY と IN6ADDR_ANY_INIT が得られる リストで得られたプロトコル アドレス個別に下記を実施 socket() bind() listen() 得られた複数の FD を fd_set 構造体に保存 以降はループ fd_set 構造体を引数に select() で接続の待機 select() を抜けてきた fd に対して accept() 読み書き処理 クローズ 22

複数プロセスで待ち受けるサーバ シングルスタックアプリを複数走行させる getaddrinfo() で AF_INET と AF_INET6 のどちらかを設定する fork でひとつのプログラムが v4/v6 に分離するようにすればリソースの節約も可能 Copy on Write 機能による 手法 3 23

自分自身の IP アドレスを得るには? 環境依存 UNIX ライク OS なら ioctl 関数を利用するのが一般的 オープンソース OS の場合は ifconfig のソースを参照するとよい FreeBSD の場合 /usr/src/sbin/ifconfig/* ubuntu の場合 net-tools パッケージ 24

デュアルスタックサーバのまとめ いくつか手法があるので メリットとコスト リスクを比較して適切な選択をしましょう サンプルプログラム http://www.v6pc.jp/jp/upload/pdf/socketsample-20121203.pdf 25

名前解決の問題と最近のテクニック 26

getaddrinfo の並びは? getaddrinfo() は名前解決 出力される addrinfo 構造体のリストはどういう順序になるのか? 長らく RFC3484 で定義されていた RFC6724 が RFC3484 を Obsolete した デフォルトポリシーテーブルの修正 アドレス選択ルールの修正 フォールバック問題の記述 etc... 27

フォールバック問題 フォールバックとは クライアントが接続先 IP アドレスのリストを得る リストの先頭にある IP アドレスに接続しようとして 失敗すると次のリスト要素の IP アドレスを試す 原因 サーバがそのプロトコル IP アドレスでアプリサービスをしていない ネットワークの接続性が失われている 問題 タイムアウトを繰り返すので 接続まで時間がかかる 環境によっては数十秒かかる場合もありうる 28

フォールバックの回避 サーバがサービスしていない IP アドレスは DNS に登録しない IP の接続性を健全に保つ ポリシーテーブルを変更する ポリシーテーブルの参照法は下記のとおり Windows: netsh interface ipv6 show prefixpolicies Linux: ip addrlavel show FreeSBD: ip6addrctl show サーバサイドだけでの対応では完全には解決できない 29

Happy Eyeballs RFC6555 RFC6556 で定義 従来は TCP Syn の接続失敗を受けて次の TCP Syn を送っていた Happy Eyeballs は IPv6 / IPv4 アドレスに両方に対して一気に TCP Syn を送る Syn/Ack 応答が帰ってきた IP に TCP Ack を送って接続 詳細の動きが不明瞭で実装依存性が高い 複数 I/F の場合や IPv6 アドレスが複数ある場合は? IPv6 Syn/Ack が遅れて届いたら? 今後の展開や運用を注視すべき 30

組み込み用途での IPv6 対応 31

組み込み機器へのアドレス埋め込み 組み込みでは Socket を使うことが多い 組み込み機器はいろいろ大変 お客様の環境で DNS が使えない 名前解決処理に必要なリソースが不足している 組み込み機器で IP アドレスをハードコーディングしたいこともある しかしやめたほうがいい RFC4085 でこの問題が記述されている 32

アドレスハードコーディングの問題 そもそも IP アドレスは借り物 リナンバリングのリスクが伴う ホスト名は名前指定して 名前解決には getaddrinfo() を使うべき RFC6724 や RFC3484 に従った適切な処理が約束されている これを自作するということは RFC に従うコストやそれから外れるリスクを自己負担するということ これらのリスク コスト インターネットの道義的責任が ハードコーディングしないリスク コストを上回ったとき 十分な注意 サポートとともにやむをえずハードコーディングすることは考えられる 33

最後に IPv6 はどんどん浸透してきている アプリで IPv6 を先取りして 時代もお客様も先取りしよう 何かありましたらいつでもこちらまで IPv6 普及 高度化推進協議会の連絡先 https://www.v6pc.jp/jp/info/inquiry_web.phtml 大平の連絡先 ohhira@src.ricoh.co.jp 僕と契約して友達になってよ kohki@lemegeton.org Twitter: @torawarenoaya facebook: http://www.facebook.com/kohki.ohhira LinkedIn: http://jp.linkedin.com/pub/kohki-ohhira/10/7ba/6a2 34