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と同じものが入る。
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