パスワードを忘れた? アカウント作成
451138 journal

pasasの日記: Cプログラムとリゾルバ(その2)

日記 by pasas

answer に含まれるデータのうち、問い合わせ部は以下の情報が含まれている。

  • ドメイン名(可変長)
  • 問い合わせのタイプ(2オクテット)
  • 問い合わせのクラス(2オクテット)

この中で問い合わせのタイプは arpa/nameser.h の中で定義されている値で、MX レコードの場合には T_MX(0x0f)になる。
問い合わせのクラスも同様に arpa/nameser.h の中で定義されているけど、この場合は C_IN(0x01)になる。

回答部、権威部、付加情報部は以下のような情報が含まれている。

  • ドメイン名(可変長)
  • タイプ(2オクテット)
  • クラス(2オクテット)
  • TTL(4オクテット)
  • 資源データの長さ(2オクテット)
  • 資源データ(可変長)

この中のタイプとクラスは上記の通りである。

ドメイン名は長さ・ラベルの組み合わせで表現されている。
そして、長さ 0が現れた時点でドメイン名が終了であることを示す。
つまり、

  5 yahoo 2 co 2 jp 0

といった形で表現されることになる。

ところで、問い合わせをした結果、複数のエントリを返す場合が多い。
また、その中には重複するラベルが含まれている場合が多い。
そのため、以前に現れたラベルを示すポインタを置くことで、冗長なデータをなくすようにしている。
これをドメイン名の圧縮と呼ぶ(らしい)。
ポインタはメッセージの先頭からのオクテットで表す。

圧縮はラベルの長さが 63 オクテットまでに制限されていることを利用している。
つまり長さフィールドの上位 2ビットが 1 のときには、その後に続くビットと、
次のオクテットを合わせた 14ビットで長さを表している。

眠くなってきたので続きはまた次回。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

Stableって古いって意味だっけ? -- Debian初級

読み込み中...