DNSメッセージのフォーマット
DNSの基本動作は、ドメイン名に対応するIPアドレスなどの要求する情報を照会することと、その照会要求に応答することです。どちらの動作もDNSでは同じメッセージ形式でやり取りを行います。 これからそのフォーマットを解説します。
項目 | 概要 |
識別子(16ビット) | クライアントによって設定される、要求を識別するための値。 |
各種フラグ(16ビット) | 詳細は後で説明します。 |
質問数(16ビット) | 質問の数。 |
回答リソースレコード数(16ビット) | 回答に関するリソースレコードの数。 |
権威リソースレコード数(16ビット) | 権威に関するリソースレコードの数。 |
追加リソースレコード数(16ビット) | その他追加で必要となるリソースレコードの数。 |
質問(32ビット) | 質問の内容を表す情報。詳しい内容は後述します。 |
回答(可変長) | 回答の内容を表す情報。詳しい内容は後述します。 |
権威(可変長) | 権威の内容を表す情報。詳しい内容は後述します。 |
追加情報(可変長) | 追加情報。詳しい内容は後述します。 |
先ほど述べたDNSメッセージの各種フラグは次のとおりになります。
フラグ | 概要 |
QR(1ビット) | 照会/応答を表すフラグです。0の場合はメッセージが照会であることを表し、1の場合はメッセージが応答であることを表しています。 |
オプコード(4ビット) | メッセージの種類を表しています。例えば、0は標準照会、1は逆照会、2はサーバ・ステータス要求を表します。 |
AA(1ビット) | 権威ある回答を表しています。問い合わせられたネームサーバが、自分が管理しているゾーン内の情報についての問い合わせを受けた時1にして応答をします。 |
TC(1ビット) | このフラグ1の時は、データが不完全であり、完全なデータを得るには、他のパケットを必要としていることを表しています。TCP/IPではパケットが分割される場合がありますので、このフラグがあります。 |
RD(1ビット) | 再帰要求を意味するフラグです。このフラグは、ネームサーバに対して照会するように指示するもので、照会時に設定されます。この要求を受け取ったネームサーバは、権威ある回答ができない場合、その回答を得るために問い合わせるべきネームサーバのリストを返します。これを「反復照会」と言います。 |
RA(1ビット) | 再帰可能を表すフラグです。ネームサーバが再帰をサポートしている時1にして、クライアントへメッセージを送ります。 |
予約(3ビット) | 将来のために予約されている3ビットの値。今のところ使われていませんので必ず0となります。 |
リターンコード(4ビット) | 回答の種類を表す値です。例えば、0はエラーがなかったことを表し、1はサーバエラーを表しています。 |
DNSメッセージの質問部分は次のとおりになっています。
項目 | 概要 |
照会名(可変長) | 照会するドメイン名です。ドメイン名は、ラベル単位でバイト数を指定し、0で終わる形式です。例えば、 codezine.jpの場合は、8codezine2jp0となります。 |
照会タイプ(16ビット) | 照会する情報を表す名前付きの値です。例えば、1は名前がAでIPアドレスを表し、2は名前がNSで正式なネームサーバを表します。 |
照会クラス(16ビット) | 通常は1でインターネットを表しています。 |
回答、権威、追加情報に関する部分は、リソースレコードもしくはRRと呼ばれており、次のとおりになっています。
項目 | 概要 |
ドメイン名(32ビット) | リソースデータの内容に対応する名前。形式は照会名と同じです。 |
タイプ(16ビット) | リソースデータのタイプを表します。それらの値は、照会クラスと同じです。 |
クラス(16ビット) | 通常はInternetを表す1に設定されます。 |
生存時間(32ビット) | クライアントによって保持される秒数を示します。 |
リソースデータ長(16ビット) | リソースデータの長さです。このデータの形式はタイプに依存します。 |
リソースデータ(可変長) | リソースレコードの内容です。 |
これでDNSメッセージのフォーマットの解説が終わりましたので、次項からはDNSの動作についてサンプルコードを交えつつ解説します。