SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

仮想ネットワークの実装で学ぶTCP/IP

仮想ネットワーク実装でTCP/IPを学ぼう(5)
― アプリケーション層の勘所

仮想ネットワーク実装でTCP/IPを学ぼう(5)


  • X ポスト
  • このエントリーをはてなブックマークに追加

DNSメッセージのフォーマット

 DNSの基本動作は、ドメイン名に対応するIPアドレスなどの要求する情報を照会することと、その照会要求に応答することです。どちらの動作もDNSでは同じメッセージ形式でやり取りを行います。 これからそのフォーマットを解説します。

DNSメッセージのフォーマット
項目 概要
識別子(16ビット) クライアントによって設定される、要求を識別するための値。
各種フラグ(16ビット) 詳細は後で説明します。
質問数(16ビット) 質問の数。
回答リソースレコード数(16ビット) 回答に関するリソースレコードの数。
権威リソースレコード数(16ビット) 権威に関するリソースレコードの数。
追加リソースレコード数(16ビット) その他追加で必要となるリソースレコードの数。
質問(32ビット) 質問の内容を表す情報。詳しい内容は後述します。
回答(可変長) 回答の内容を表す情報。詳しい内容は後述します。
権威(可変長) 権威の内容を表す情報。詳しい内容は後述します。
追加情報(可変長) 追加情報。詳しい内容は後述します。

 先ほど述べたDNSメッセージの各種フラグは次のとおりになります。

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メッセージの質問部分は次のとおりになっています。

DNSメッセージの質問部分
項目 概要
照会名(可変長) 照会するドメイン名です。ドメイン名は、ラベル単位でバイト数を指定し、0で終わる形式です。例えば、 codezine.jpの場合は、8codezine2jp0となります。
照会タイプ(16ビット) 照会する情報を表す名前付きの値です。例えば、1は名前がAでIPアドレスを表し、2は名前がNSで正式なネームサーバを表します。
照会クラス(16ビット) 通常は1でインターネットを表しています。

 回答、権威、追加情報に関する部分は、リソースレコードもしくはRRと呼ばれており、次のとおりになっています。

リソースレコード
項目 概要
ドメイン名(32ビット) リソースデータの内容に対応する名前。形式は照会名と同じです。
タイプ(16ビット) リソースデータのタイプを表します。それらの値は、照会クラスと同じです。
クラス(16ビット) 通常はInternetを表す1に設定されます。
生存時間(32ビット) クライアントによって保持される秒数を示します。
リソースデータ長(16ビット) リソースデータの長さです。このデータの形式はタイプに依存します。
リソースデータ(可変長) リソースレコードの内容です。

 これでDNSメッセージのフォーマットの解説が終わりましたので、次項からはDNSの動作についてサンプルコードを交えつつ解説します。

次のページ
DNSで使用するトランスポート層のプロトコル

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
仮想ネットワークの実装で学ぶTCP/IP連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5034 2010/04/27 12:07

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング