広告
広告
https://www.7key.jp/nw/technology/protocol/resolver.html#what
リゾルバは、ユーザプログラムがドメイン名からIPアドレスを調べたい場合に、ユーザプログラムに代わってネームサーバからIPアドレスを聞き出すためのソフトウェアを指します。つまり、リゾルバはネームサーバ用のクライアントソフトとして動作します(通常リゾルバというとスタブリゾルバのことを指します)。
https://www.7key.jp/nw/technology/protocol/resolver.html#rule
リゾルバからネームサーバへ問合せを行う際に使われる方式です。
ネームサーバは、リゾルバから受け取った問合せに対する回答を自分の管理する範囲で行うことができなければ、他のネームサーバに問合せを行わなければなりません。他のネームサーバに問合せを行う際に使われる方式を反復問合せと言います。
ドメインの説明でふれましたが、ドメイン名は分散管理されています。つまり、「www.7key.co.jp」というドメイン名を担当するネームサーバを「7key.co.jp」ドメイン内のネームサーバに登録し、「7key.co.jp」というドメイン名を担当するネームサーバを「co.jp」ドメイン内のネームサーバに登録し、「co.jp」というドメイン名を担当するネームサーバを「jp」ドメイン内のネームサーバに登録し、「jp」というドメイン名を担当するルートサーバを配置するといったように役割分担がきっちり決められています。
よって、「www.7key.co.jp」というドメイン名のIPアドレスを調べる際に、自分の持っている情報でクライアントに返答ができない場合は別のネームサーバからIPアドレスを聞かなければなりません。ネームサーバはまずルートサーバに「jp」を担当しているネームサーバのIPアドレスを聞きます。返答が返ってくれば次に「jp」を担当しているネームサーバに「co.jp」を担当しているネームサーバのIPアドレスを聞きます。返答が返ってくれば次に・・・と目当てのドメイン名のIPアドレスが返ってくるまでネームサーバが担当のネームサーバに聞き、目当てのIPアドレスが分かる仕組みになっています。
https://www.7key.jp/nw/technology/protocol/resolver.html#message
DNS上での問合せや回答といった情報のやり取りはDNSメッセージが使われます。ほとんどの場合UDPプロトコルで運ばれ、53番ポートが使われます。ゾーン転送の際は信頼性を確保するためにTCPプロトコル(53番ポート)が使われます。メッセージのタイプによっては空になるセクションもありますが、次のようなフォーマットが使われます(括弧内はオクテット数、ヘッダ部分は必須)。
DNSヘッダ | 問合せID(2) | フラグ(2) |
質問セクション数(2) | 回答セクション数(2) | |
オーソリティセクション数(2) | 追加情報数(2) | |
セクション | 質問セクション(可変長) | |
回答セクション(可変長) | ||
オーソリティセクション(可変長) | ||
追加セクション(可変長) |
問合せに対して設定するユニークな番号です。その問合せに対する応答でも同じ値を使うことにより、どの問合せへの応答かを判別するために使います。
以下のパラメータを用いて、クライアントサーバ双方に必要な情報を通知し合うために使用します(括弧内はbit数)。
コード | 名前 | 意味 |
---|---|---|
QR(1) | 問合せ/応答 | 0:問合せ 1:応答 |
OPcode(4) | オペレーションコード | 0:標準問合せ 1:逆順問合せ 2:サーバステータス問合せ 3:拡張用の予約 4:DNS Notify 5:DNS Update 6-15:拡張用の予約 |
AA(1) | Authoritative Answer | 0:反復の結果応答 1:回答にオーソリティ有り |
TC(1) | Trancation | 0:データサイズ512オクテット以下 1:データサイズ512オクテット以上 |
RD(1) | 再帰要望 | 0:反復問合せ 1:再帰問合せ |
RA(1) | 再帰有効 | 0:再帰検索不可能 1:再帰検索可能 |
-(2) | 予約 | 全てのbitを0 |
Rcode(4) | 戻りコード | 下表参照 |
通常リゾルバはネームサーバのUDP53番と通信を行いますが、DNSメッセージが512オクテットを超えた場合はTCP53番に対してスリーウェイハンドシェイクを行い、TCPプロトコルを使用してDNSを行います。
RCODE | Name | Description | Reference |
---|---|---|---|
0 | NoError | エラー無し | RFC1035 |
1 | FormErr | ネームサーバが問い合わせを解釈できなかった | RFC1035 |
2 | ServFail | 問題が発生し、ネームサーバが問い合わせを処理できなかった | RFC1035 |
3 | NXDomain | 指定されたドメイン名が存在しない | RFC1035 |
4 | NotImp | 要求された問い合わせタイプをネームサーバは未実装 | RFC1035 |
5 | Refused | 要求された問い合わせは何らかの理由でネームサーバに拒絶された | RFC1035 |
6 | YXDomain | Name Exists when it should not | RFC2136 |
7 | YXRRSet | RR Set Exists when it should not | RFC2136 |
8 | NXRRSet | RR Set that should exist does not | RFC2136 |
9 | NotAuth | Server Not Authoritative for zone | RFC2136 |
10 | NotZone | Name not contained in zone | RFC2136 |
11-15 | available for assignment | ||
16 | BADVERS | Bad OPT Version | RFC2671 |
16 | BADSIG | TSIG Signature Failure | RFC2845 |
17 | BADKEY | Key not recognized | RFC2845 |
18 | BADTIME | Signature out of time window | RFC2845 |
19 | BADMODE | Bad TKEY Mode | RFC2930 |
20 | BADNAME | Duplicate key name | RFC2930 |
21 | BADALG | Algorithm not supported | RFC2930 |
22-3840 | available for assignment | ||
3841-4095 | Private Use | ||
4096-65535 | available for assignment |
問合せるドメイン名の数を入れ、基本的には1
が入ります。
それぞれ、問合せに対する回答の数、問合せに対する回答の数、問合せに対する回答の数が入ります。
Qname(質問名)[可変長] | Qtype(質問タイプ)[2オクテット] | Qclass(質問クラス)[2オクテット] |
問い合わせの内容に関するパラメータが入り、上記のフォーマットで示します。Qnameには問い合わせ対象のドメイン名をASCIIコードで入れます。ドメイン名はドットで分割し(これをラベルと呼ぶ)、それぞれのラベルは1オクテットのラベル長とそれに続く実際のラベルで構成されます。フィールドの最後には0が区切り文字として配置され、パディングはありません。
0x03www0x047key0x02jp0x00
質問タイプと質問クラスには、問い合わせのタイプを示す値が入れられ、値はリソースレコードのタイプとクラスが使われます。下記例はwww.7key.jpのAレコードを問い合わせる際の質問セクション記述例です。
0x03www0x047key0x02jp0x00 | |
0x0001 | 0x0001 |
それぞれ、質問への回答としてのリソースレコード、オーソリティをポイントするリソースレコード、追加情報をもつリソースレコードとなっています。フォーマットは下記の通りですが、Ownerフィールドは質問セクションと同様の記述となります。
名前 | 長さ | 意味 |
---|---|---|
Owner | 可変長 | そのドメインの名前で最長255オクテット。この文字列はNull文字で終了する。 |
Type | 16bit | このレコードに保存されているリソースのタイプ。 |
Class | 16bit | プロトコルファミリーを示すために使われる。16bitにコード化された値で示され、通常は0x0001の値をとる |
TTL | 32bit | リゾルバはこの秒数だけリソースレコードのキャッシュを保持し、その後破棄する。 |
RDLength | 16bit | RDATAの長さ |
RDATA | 可変長 | TypeとClassによって変化するデータで、リソースの中身となる部分。 |
また、DNSではメッセージサイズを小さくするために、重複するドメイン名を省略する機能が用意されています。これをメッセージの圧縮と呼びます。例えば、回答セクションでwww.7key.jpというドメイン名が入り、オーソリティセクションで7key.jpというドメイン名を入れる場合、7key.jp部分が重複となります。これを2度記述することを防ぐために、オーソリティセクションにはDNS圧縮ポインタを置きます。
1 | 1 | オフセット(14bit) |
最初の2bitは標準ラベルとの混同を避けるためのフラグです。オフセットフィールドはメッセージの先頭を起点に名前の残りのラベルがどこにあるのかを数値で示すこととなっています。
https://www.7key.jp/nw/technology/protocol/resolver.html#supplement
広告