DNSプロトコルのリソースレコードのフォーマット

DNSプロトコルのリソースレコードのフォーマットについて調べた。
 

全体像

DNSプロトコルの全体像
    +---------------------+
    |        Header       |
    +---------------------+
    |       Question      |
    +---------------------+
    |        Answer       | ←今回はここ
    +---------------------+
    |      Authority      | ←今回はここ
    +---------------------+
    |      Additional     | ←今回はここ
    +---------------------+

 

リソースレコードの全体像

レコードの種類によって、RDATAの中身が変わる。

                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                                               |
    /                                               /
    /                      NAME                     /
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TYPE                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     CLASS                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TTL                      |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                   RDLENGTH                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
    /                     RDATA                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

 

NAME

QuestionのQNAMEと同じものが入る。
ラベルの圧縮をする。
 

TYPE

QuestionのQTYPEと同じものが入る。
 

CLASS

QuestionのQCLASSと同じものが入る。
 

TTL

レコードに対するTime to liveの値。
Bindでは、Zoneファイルの1行目の「$TTL 86400」などと書く部分。
 

RDLENGTH

RDATAの長さ。
 

RDATA

レコードの種類によって中身が異なる。
 

A

NAMEに対するIPアドレス
 
4バイト固定。

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    ADDRESS                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

 

NS

NAMEを管理するネームサーバのドメイン名。
 
可変長。

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                   NSDNAME                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

 

CNAME

NAMEに対する本名ドメイン名。
 
可変長。

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                     CNAME                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

 

SOA

NAMEを管理するドメインの情報。
 
MNAME => NAMEを管理するドメイン名。可変長。
RNAME => このゾーンの管理者メールアドレス。可変長。
SERIAL => ゾーンのバージョン番号。4バイト。
REFRESH => ゾーンの更新を問い合わせる期間。4バイト。
RETRY => REFRESHに失敗した際に再度REFRESHする期間。4バイト。
EXPIRE => REFRESHに失敗した際にセカンダリネームサーバが転送されたゾーン情報を使用可能な期間。4バイト。
MINIMUM(Negative cache TTL) => ドメイン名が存在しないという情報をキャッシュする期間。4バイト。

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                     MNAME                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                     RNAME                     /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    SERIAL                     |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    REFRESH                    |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     RETRY                     |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    EXPIRE                     |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    MINIMUM                    |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

 

MX

NAMEに対するメールサーバのドメイン名。
 
PREFERENCE => 優先度。2バイト。
EXCHANGE => メールサーバドメイン名。可変長。

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                  PREFERENCE                   |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                   EXCHANGE                    /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

 

TXT

NAMEに対するTXTレコード。
 
可変長。
なぜか先頭に「#」が付いている。

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                   TXT-DATA                    /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

 

参考URL

RFC1035 ドメイン名−実装と仕様書
http://www5d.biglobe.ne.jp/~stssk/rfc/rfc1035j.html#497
 
@IT:DNS Tips:SOAレコードには何が記述されている?
http://www.atmarkit.co.jp/fnetwork/dnstips/014.html