• 検索結果がありません。

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
23
0
0

読み込み中.... (全文を見る)

全文

(1)

情報ネットワーク演習

(2)

2

本日の内容

課題1 低水準入出力 課題2 名前解決 (ホスト名⇔IPアドレス) 課題3 ソケットを用いた プロセス間通信 課題4 HTTPサーバのビルド 課題5 HTTPクライアント ハイパーテキストへのアクセス

(3)

第2回課題

• 実施内容と意図

– IPアドレスとホスト名の相互変換をするプログラムを拡張 する. – この課題を通じて,IPv4における名前解決の方法,および 関連するライブラリルーチンや構造体の仕様を学ぶ.

(4)

4

ホスト名とは

• 例

– nachi00 – nachi00.sys.wakayama-u.ac.jp – www.wakayama-u.ac.jp – www.google.co.jp – localhost

• 書式

– 英数字等を「.」でつなぐ.

• 人間にとって見やすい.

演習室内では これらは同じ計算機 (ホスト,ノード) を指す FQDN (Fully Qualified Domain Name)と呼ば れる

(5)

IPアドレスとは(文字列)

• 例

– 133.42.159.1 – 66.249.89.104 – 127.0.0.1

• 書式

– 0~255の整数を4つ書き,「.」でつなぐ.

• ドット付き10進記法(dotted decimal notation)ともい

う.

• 人間にとって見やすい.

(6)

6

IPアドレス(バイナリ)

• 例

– 10000110 00101010 10011111 00000001

• 文字列によるIPアドレスを4オクテット(4バイト)で表

現し,順番に(ネットワークバイトオーダ,またはビッ

グエンディアン)メモリに格納する.

• 計算機が処理するのに適している.

(7)

IPアドレスとホスト名を知るコマンド

• host

– Vine Linuxでも利用可 – host nachi00 – host 133.42.159.1 – host www.google.co.jp

• nslookup

– 古い(obsolete)コマンド.最近のLinuxでは非推奨

(8)

8

DNS (Domain Name System)

• インターネットにおけるホスト名とIPアドレスとを対応

させるシステム

– ホスト名 ⇒ IPアドレス を「正引き」, IPアドレス ⇒ ホスト名 を「逆引き」という.

• 「DNSサーバ」に「リゾルバ(resolver)」が問い合わ

せて情報を得る.

– DNSサーバ間で情報交換をすることも – 演習室環境で,通信するDNSサーバを知りたければ cat /etc/resolv.conf

• ソフトウェアではBIND (Berkeley Internet Name

Domain)が有名

(9)

ホスト名と

IPアドレスは多対多(1)

mail.sys.wakayama-u.ac.jp ntp.sys.wakayama-u.ac.jp www.l.google.com www.google.com www.google.co.jp 66.249.89.104 66.249.89.99 一つのホスト名に 複数のIPアドレス ホスト名とIPアドレスは 一対多 「多対多」は 二つの 「一対多」に 分ける 133.42.159.1 ns.sys.wakayama-u.ac.jp

(10)

ホスト名と

IPアドレスは多対多(2)

• 実用上は

– ホスト名からIPアドレスの一つ, IPアドレスからホスト名の一つ(正式なホスト名) を求めれば十分

• 利用例は

– クライアント: サーバのホスト名 ⇒ IPアドレス – サーバ: 例えばアクセスをログに記録する際, クライアントのIPアドレス ⇒ ホスト名

(11)

IPv4とIPv6

• 本演習では,IPv4のみを対象とする.

• IPv4

– アドレス長: 32ビット (アドレス空間: 232

• IPv6

– アドレス長: 128ビット (アドレス空間: 2128 – IPアドレスは「.」ではなく「:」で区切って表記する. 省略記法もある. – IPv6に移行しても,ホスト名は変わらない

(12)

12

相互変換プログラムを

Cで書くには

• 数個のライブラリルーチンと構造体を理解すること

– ライブラリルーチン: getaddrinfo, getnameinfo, inet_ntoa, freeaddrinfo

– 構造体: struct addrinfo

(13)

getaddrinfoライブラリルーチン

• int getaddrinfo(const char *node, const char

*service, const struct addrinfo *hints, struct

addrinfo **res);

– ソケットアドレス構造体を生成する. – node は,ホスト名または文字列形式のIPアドレスの文字 列. – serviceは,サービス名もしくはポート番号の文字列. 今回はNULLにする. – hintsに,ヒント情報を格納して呼び出す(ポインタ渡し).

(14)

addrinfo構造体

• 戻り値(線形リスト)

struct addrinfo {

int ai_flags; /* フラグ */

int ai_family; /* プロトコルファミリ */ int ai_socktype; /* TCP, UDPの別 */ int ai_protocol; /* プロトコル詳細 */

size_t ai_addrlen; /* ai_addrのバイト数 */ struct sockaddr *ai_addr; /* IPアドレス(バイナリ) */ char *ai_canonname; /* ホスト名文字列 */

struct addrinfo *ai_next; /* 次へのリンク */ }; . . . ai_addr: 133042159002 . . . ai_next: . . . ai_addr: 133042160002 . . . ai_next: NULL 実際にはバイナリ形式 structは不可欠(「struct addrinfo型」を宣言している) 適切なホスト名 が格納されて いる保証はない

(15)

getnameinfoライブラリルーチン

• int getnameinfo(const struct sockaddr *sa,

socklen_t salen, char *host, size_t hostlen, char

*serv, size_t servlen, int flags);

– アドレスから名前へ変換する. – saはIPアドレス(バイナリ),salenはその長さ. • addrinfo構造体のai_addr, ai_addrlenに対応する. – hostにホスト名が格納される.配列などにより,あらかじ め領域を確保しておく.hostlenはその長さを指定する. – servとservlenは,hostとhostlenと同様.今回は使用しな いので,NULLと0を指定する.

(16)

16

inet_ntoaライブラリルーチン

• char *inet_ntoa(struct in_addr in);

– IPアドレスをバイナリ値から文字列形式に変換する. – “internet: network address to ascii string”

(17)

再入可能性

• inet_ntoaは,再入可能でない.

– 配列領域を別のところで(static領域などに)確保しており, そのアドレスを返す. – 連続して呼び出すと,前の結果は上書きされる.

• getaddrinfo,getnameinfoは,再入可能である.

– 連続して呼び出しても,問題ない. – 戻り値の領域を,呼び出し側が確保し,引数に与える.ポ インタ渡しになる. – getaddrinfoの内部でmallocなどによりソケットアドレス構

(18)

18

課題2(1)

• ~takehiko/network-enshu2007/2/resolver

は,ホス

ト名を引数にとり,その

IPアドレス(複数あっても一つ

だけ)をドット付き10進記法で出力する.

– cd ~takehiko/network-enshu2007/2 – ./resolver nachi00.sys.wakayama-u.ac.jp • 133.42.125.50 – ./resolver www.google.com • 66.249.89.147 – host www.google.com ...結果は各自確認のこと

(19)

課題2(2)

• ~takehiko/network-enshu2007/2/resolver.c

をコピ

ーして

~/network-enshu2007/2/resolver.c

とし,以

下の仕様を満たすよう,修正をしなさい.

– ホスト名が複数のIPアドレスに結び付けられているとき, それぞれを出力する(1行1アドレスで). – 1行を「IPアドレス (ホスト名)」の形で出力する. • ~takehiko/network-enshu2007/2/command01-answer を参考 に – コメントを変更(作成者,作成日時)し,作業メモを残す.

(20)

20

課題2の追加事項とヒント

• 課題はこれでできた,と思ったら,

~takehiko/network-enshu2007/bin/validator2

を実行してみよう.

• 余力のある人は,inet_ntoa を使うことなく,ドット付

き10進記法の

IPアドレスを出力するようにしてみよ

う.(ヒント:

inet_ntoa を getnameinfo に置き換える.

jman 3 getnameinfo

.)

(21)

期限

• 2007年10月12日(金)19:30の回収までに完成させ

ておくこと.

• 期限後のプログラム修正は?

– 最終的な回収までの修正(コメントの充実,デバッグなど) はOK.

(22)

22

テストプログラムについて

• ~takehiko/network-enshu2007/bin/validatorα

テストする.

– 実行中に参照するファイル • ~/network-enshu2007/α/ソースファイル.c • ~takehiko/network-enshu2007/α/commandβ • ~takehiko/network-enshu2007/α/commandβ-answer – 生成されるファイル • ~/network-enshu2007/α/ソースファイル • ~/network-enshu2007/α/ソースファイル_code.c • ~/network-enshu2007/α/ソースファイル_comment.c • ~/network-enshu2007/α/error+warning • ~/network-enshu2007/α/.commandβ-answer

– 「Everything is just fine!」を目指せ!

課題番号 今は「1」か「2」

ドットファイル.「ls -a」で 確認できる.

(23)

余談

• 昨年度まで当演習では,gethostbyname,

gethostbyaddrといったライブラリ関数を用いていた.

これらは,

IPv4にしか対応していないことや,再入

可能でない(連続して呼び出せない)といった問題

があった.

• getnameinfoなどを使うと,IPv4/IPv6の両方に対応

するようになった.また,第3回課題のサーバプログ

ラムがすっきり記述できるようになる.

参照

関連したドキュメント

7ORDER LIVE FACTORY 「脱色と着色」~FINAL~ 追加公演情報 11月3日(木・祝)【1回目】開場 13:00/開演 14:00 【2回目】開場 17:30/開演

報告日付: 2017年 11月 6日 事業ID:

「1 つでも、2 つでも、世界を変えるような 事柄について考えましょう。素晴らしいアイデ

大正13年 3月20日 大正 4年 3月20日 大正 4年 5月18日 大正10年10月10日 大正10年12月 7日 大正13年 1月 8日 大正13年 6月27日 大正13年 1月 8日 大正14年 7月17日 大正15年

出所:香港BS & Food and Environmental Hygiene Department にもとづきジェトロ作成(2021年11月10日).. (A)

第1回 平成27年6月11日 第2回 平成28年4月26日 第3回 平成28年6月24日 第4回 平成28年8月29日

具体的な取組の 状況とその効果 に対する評価.

3号機使用済燃料プールにおいて、平成27年10月15日にCUWF/D