アプリケーション → レゾルバ(resolver) → gethostbyname(),gethostbyaddr()
com | 商業組織 |
edu | 教育機関 |
gov | 米政府関係機関 |
int | 国際機関 |
mil | 米軍 |
net | ネットワーク |
org | その他の組織 |
jp | 日本 |
us | 米国 |
uk | 英国 |
to | トンガ共和国 |
... |
name serverは要求された情報を持っていない場合は、他のname serverに 問い合わせる。 全ての name server は、root name server (1999年9月時点で13台) のIPアドレス を知っており (ftp://ftp.nic.ad.jp/pub/internet/rs.internic.net/domain/named.root)、 root name server は第2レベルのドメインを管理する name serverの名前とIPアドレスを全て知っている。
したがって、name server が要求された情報を持っていない場合は、 root name server にコンタクトし、 どの name server にコンタクトをとればよいか教えてもらう。
name server は、情報(ホスト名に対応するIPアドレスなど)を受け取ると、 その情報をキャッシュ (cache)し、同じ情報の照会があった場合、キャッシュ した情報を返す。
ftp://ftp.nic.ad.jp/pub/internet/rs.internic.net/domain/named.root A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 .... M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 ←日本にあるroot name server
ヘッダ |
問い合わせ部 |
回答部RR |
権威部RR |
付加情報部RR |
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID | Flags | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | QDCount | ANCOUNT | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NSCount | ARCOUNT | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ID: 問い合わせ識別子 Flags: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Q|Opcode |A|T|R|R| Z | RCODE | |R| |A|C|D|A| | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ QR: Query(0) または Reply(1) Opcode: 問い合わせの種類を示すオペコード 0 QUERY: 標準問い合わせ 1 IQUERY: 逆問い合わせ 2 STATUS: サーバ状態の要求 3〜15: 予約 AA: 権威ある応答 (Authoritative Answer) TC: TrunCation (切断) ←不完全を意味する RD: 再帰問い合わせが望ましい RA: 再帰問い合わせが可能 Z: 予約(0でなくてはいけない) RCODE: 応答コード 0: エラーなし 1: フォーマットエラー 2: サーバの失敗 3: 名前のエラー 4: 未実装 5: 拒否 6〜15: 予約 QDCOUNT: 問い合わせ部のエントリー数 ANCOUNT: 回答部のエントリー数 NSCOUNT: 権威レコード中のネームサーバ資源レコードの数 ARCOUNT: 付加情報部の資源レコードの数
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | QNAME | ... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | QTYPE | QCLASS | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ QNAME: 問い合わせの名前 (可変長) QTYPE: 問い合わせのタイプ QCLASS: 問い合わせのクラス
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NAME | ... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TYPE | CLASS | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TTL | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | RDLENGTH | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | RDATA | ... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ NAME: 資源レコードが属しているドメイン名 (可変長) TYPE: 資源レコードのタイプ CLASS: RDATAレコードのクラス TTL: RRのTTL RDLENGTH: RDATAの長さ RDATA: 資源レコード (RR, Resource Record)
[例] www.foo.co.jp 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 3 | 'w' | 'w' | 'w' | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 3 | 'f' | 'o' | 'o' | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 2 | 'c' | 'o' | 2 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 'j' | 'p' | 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+あるDNSパケット中に同じドメインに属する複数の名前が現れる場合に、後続の 名前を圧縮することができる。 Length部のl最初の2ビットが 11 のとき、後続の8ビットと合わせた14ビットで DNSパケットの先頭からのオフセットを表す。
[例] www.foo.co.jpとns.foo.co.jp 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 3 | 'w' | 'w' | 'w' | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 3 | 'f' | 'o' | 'o' | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 2 | 'c' | 'o' | 2 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 'j' | 'p' | 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 2 | 'n' | 's' | 0xc0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0x05 | 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
A | 1 | IPアドレス |
NS | 2 | ネームサーバ |
CNAME | 5 | エリアスの正式名 (Canonical Name) |
PTR | 12 | ドメイン名のポインタ |
HINFO | 13 | ホスト情報 |
MX | 15 | メール・エクスチェンジャ |
AXFR | 252 | ゾーン転送の要求 |
* | 255 | 全てのレコードを要求 |
sun から gemini 上の daytime server と通信する例(p.223) sun% telnet gemini daytime ← sun の shell 上で入力 Trying 140.252.1.11 ... Connected to gemini.tuc.noao.edu. Escape character is '^]'. Wed Mar 2 10:44:17 1993 ← gemini上のdaytime serverからの出力 Connection closed by foreign host.sun上の resolver は /etc/resolv.conf で設定されている。
sun:/etc/resolv.conf nameserver 140.252.1.54 domain tuc.noao.edu検索される名前が不完全な場合('.'で終っていない場合)、domain行の 値が付け加えて検索できる。nameserverのIPアドレスは3個まで指定できる。
name server照会の tcpdump 出力 1 0.0 140.252.1.29.1447 > 140.252.1.54.53: 1+ A? gemini.tuc.noao.edu. (37) 2 0.290820 (.2908) 140.252.1.54.53 > 140.252.1.29.1447: 1* 2/0/0 A 140.252.1.11 (69)最初のパケットに関して、
[例] IPアドレスが 140.252.13.33 の場合、33.13.252.140.in-addr.arpa となる。
140.252.13.34 を gethostbyaddrしたときのtcpdump出力 1 0.0 140.252.1.29.1610 > 140.252.1.54.53: 1+ PTR? 34.13.252.140.in-addr.arpa. (4) 2 0.332288(0.3323) 140.252.1.54.53 > 140.252.1.29.1610: 1* 1/0/0 PTR srv4.tuc.noao.edu. (75)
[例] www.netscape.com(覚えやすい) → www-hk1.netscape.com (正式名)
nslookupでmxフィールドを引いてみる % nslookup > set q=mx > mit.edu. Server: dnss161.tsuda.ac.jp Address: 133.99.161.3 mit.edu preference = 100, mail exchanger = PACIFIC-CARRIER-ANNEX.mit.edu mit.edu preference = 100, mail exchanger = SOUTH-STATION-ANNEX.mit.edu mit.edu nameserver = W20NS.mit.edu mit.edu nameserver = BITSY.mit.edu mit.edu nameserver = STRAWB.mit.edu PACIFIC-CARRIER-ANNEX.mit.edu internet address = 18.69.0.28 SOUTH-STATION-ANNEX.mit.edu internet address = 18.72.1.2 W20NS.mit.edu internet address = 18.70.0.160 BITSY.mit.edu internet address = 18.72.0.3 STRAWB.mit.edu internet address = 18.71.0.151preference 値が小さい宛先に送ろうと試みる。
sun:/etc/resolv.conf domain.tuc.noao.edunameserverの記述がないため、localhostのname server を利用することになる。
ftp.uu.netをgethostbyname()した時のtcpdumpの出力 1 0.0 140.252.1.29.1788 > 192.112.36.4.53: 2 A? ftp.uu.net. (28) 2 0.559285 (0.5593) 192.112.36.4.53 > 140.252.1.29.1788: 2- 0/5/5 (229) 3 0.564449 (0.0052) 140.252.1.29.1789 > 137.39.1.3.53: 3+ a? ftp.uu.net. (28) 4 1.009476 (0.4450) 137.39.1.3.53 > 140.252.1.29.1789: 3* 1/0/0 A 192.48.96.9 (44) sun.tuc.noao.edu 140.252.1.29 NS.NIC.DDN.MIL 192.112.36.4 ns.UU.NET 137.39.1.3 ftp.UU.NET 192.48.96.9
また、primary name server から secondary name server へのデータの 移動では、データが大きくなるので tcp が用いられる。