第11回ネットワークプログラミング 中村 修.

Slides:



Advertisements
Similar presentations
Step.5 パケットダンプ Wiresharkでパケットをキャプチャする PC 1 PC 2 PC 3 PC 4 ネットワーク
Advertisements

アルゴリズムとデータ構造 第2回 線形リスト(復習).
情報ネットワーク論 第4回 ー n進法(3) 8進法と16進法 ー.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
システムコール 低水準入力 ファイルディスクリプタ ソケット
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
前回の課題 IPv6アドレス IP ARP ICMP NAT インターネット層 2003年12月4日 情報ネットワーク論 新村太郎.
データ構造とアルゴリズム 第10回 mallocとfree
ネットワークプログラミング 第7回「ネットワークとプログラミング(2)」
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
ネットワーク層.
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
第2回ネットワークプログラミング 中村 修.
第8回 プログラミングⅡ 第8回
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
輪講: 詳解TCP/IP ACE B3 suzuk.
HTTPプロトコルとJSP (1) データベース論 第3回.
データ構造とアルゴリズム 第13回 スタックとキュー
スキルアップ.
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
Network Programming in C ネットワークプログラミング Lecture 8, Network Programming (3) 第8回「ネットワークとプログラミング(3)」 2010年秋学期 Rodney Van Meter.
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第5回ネットワークプログラミング 中村 修.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 構造体, 構造体とポインタの組み合わせ,.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Linux リテラシ 2006 第4回 ネットワーク CIS RAT.
ネットワークプログラミング C言語 第1回「イントロダクション」
ネットワークプログラミング 中村 修.
IPv6 ネットワークにおける エニーキャスト通信実現のための プロトコル設計と実装
第7回ネットワークプログラミング 中村 修.
DNS に関する質問 授業の後に寄せられた質問に答えます
UDPエコーサーバ UDP-echoサーバのプログラムモデル(Cプログラム) サーバで利用するソケット関数(Cプログラム)
ネットワークプログラミング 第4回「C言語の基礎~ポインタと配列」
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
イーサネットフレームの構造とデータリンク層アドレス
岡村耕二 トランスポート層 ソケットプログラミング 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
精密工学科プログラミング基礎 第10回資料 (12/18実施)
プログラミング 4 記憶の割り付け.
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
第7回 プログラミングⅡ 第7回
第11回 プログラミングⅡ 第11回
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
Network Programming in C Lecture 6: Network Programming (1) ネットワークプログラミング 第6回「ネットワークとプログラミング(1)」 2010年秋学期 Rodney Van Meter.
最低限インターネット ネットワークにつなぎましょ!
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
データ構造とアルゴリズム 第11回 リスト構造(1)
アルゴリズムとデータ構造1 2009年6月15日
R8C I/Oポートの仕組み SFR定義ファイルの中身.
ネットワーク・プログラミング Cプログラミングの基礎.
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
ネットワーク・プログラミング TCPサーバ.
アルゴリズムとデータ構造 2010年6月17日
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
牧野ゼミ 2年 産業情報 学科 韓 憲浩(カン ケンコウ)
TCP/IPの通信手順 (tcpdump)
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
ポートスキャン実習 2002年9月19日 修士1年 兼子 譲 牧之内研究室「インターネット実習」Webページ
プロトコル番号 長野 英彦.
高度プログラミング演習 (10).
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
Presentation transcript:

第11回ネットワークプログラミング 中村 修

今日のお題 講義 ---------休憩-------------------------------- 実習:ミニプロを作る&相談タイム IPv6 IPv6概要 プロトコルの独立性 練習1:getaddrinfo ---------休憩-------------------------------- 実習:ミニプロを作る&相談タイム 19:30まで

IPv4アドレスとIPv6アドレス IPv4アドレス32bit IPv6アドレス128bit

133. 27. 4. 212 IPv4アドレス アドレスの数は2の32乗(約42億) IPアドレスの表記 32bits 世界の人口の数より少ない(約64億) アドレスはコンピュータだけ!? IPアドレスの表記 32bits 133. 27. 4. 212

IPv6アドレス アドレスの数は2の128乗(約340澗(カン))(340,282,366,920,938,463,463,374,607,431,768,211,456 ) 1人あたり5垓(ガイ)個 アドレスはコンピュータ以外のものにも使える IPアドレスの表記 128bit を 16進数で表す 4桁(16bit)ごとに 「 : (コロン)」 で区切る 3ffe:501:100c:e320:2e0:18ff:fe98:936d

階層的なプロトコル設計 transport layer IPv4 network layer data link layer process TCP UDP transport layer ICMP IPv4 IGMP network layer ARP RARP data link layer hardware interface media

階層的なプロトコル設計 transport layer IPv6 network layer data link layer process TCP UDP transport layer ICMP IPv6 IGMP network layer ARP RARP data link layer hardware interface media

IPv4とIPv6のプログラミングの違い IPv4の時は 以下の構造体のメンバの情報を 以下の関数を用いて集め 以下のように使っていた struct hostent *hp; struct sockaddr_in servaddr; 以下の関数を用いて集め hp = gethostbyname(hostname)); 以下のように使っていた connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

IPv6、IPv4両方に対応するには 以下の構造体のメンバの情報を 以下の関数を用いてあつめ 以下のように使う struct addrinfo hints, *ai ; 以下の関数を用いてあつめ getaddrinfo(hostname, port, &hints, &ai)); 以下のように使う socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); connect(socketfd, ai->ai_addr, ai->ai_addrlen) ;

addrinfo構造体 <netdb.h> struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* PF_xxx */ int ai_socktype; /* SOCK_xxx */ int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ size_t ai_addrlen; /* length of ai_addr */ char *ai_canonname; /* canonical name for hostname */ struct sockaddr *ai_addr; /* binary address */ struct addrinfo *ai_next; /* next structure in linked list */ };

getaddrinfo getaddrinfo(const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res); nodename=ホスト名, servname=ポート, hintsは情報のタイプに関するヒント, resは結果のaddrinfoのリストが格納される 返り値:成功すると 0 を返し、失敗すると以下の非 0 のエラーコードのいずれかを返す。 サーバの場合は nodenameはNULL hintsにAI_PASSIVEフラグを設定する

getaddrinfoの取り扱い方 複数のアドレスが戻ってくる(RFC2553) 帰って来る順番はDNSの実装に依存 帰ってきたそれぞれに対してconnectしてみる for(ai = ai_save; ai != NULL; ai->ai_next){ sockfd = socket(ai->ai_family, ai->ai_socktype,ai->ai_protocol); if(sockfd < 0){continue;} if(connect(sockfd, ai->ai_addr, ai->ai_addrlen)){ break;} close(sockfd); }

freeaddrinfo void freeaddrinfo(struct addrinfo *ai) getaddrinfoで動的に割り当てられた領域を開放する

gaistrerror char * gai_strerror(int ecode); getaddrinfoの返り値のエラーコードを人間に可読な文字列に変換する

練習:getaddrinfoに慣れよう 入手し、コンパイルして、読む 次にgetaddrinfoだけをしたサンプルソースを まず、以下のソース(IPv4版echoクライアント)を 入手し、コンパイルして、読む /home/kaizaki/osamuNP/11/echo_client_v4.c 次にgetaddrinfoだけをしたサンプルソースを /home/kaizaki/osamuNP/11/getaddrinfo.c 最後に、echoクライアントをIPv6対応にしてみよう!

練習ヒント(というか答え) 一応、答えは以下に(エラー処理もあり版) 両方のサンプルソースのコメント部をよく見ると、、、 どこから、どこまで変更すればいいか書いてある。。。 一応、答えは以下に(エラー処理もあり版) /home/kaizaki/osamuNP/11/echo_client.c