DNSプロトコル技術ガイド (RFC 1035)
本ドキュメントはRFC 1035の詳細な技術ガイドであり、メッセージ形式、リソースレコードタイプ、実用例、ツール使用方法を含みます。RFC公式章の翻訳については、各章ドキュメントを参照してください。
ドキュメント情報
- RFC番号: 1035
- タイトル: Domain Names - Implementation and Specification
- タイトル(日本語): ドメイン名 - 実装と仕様
- 公開日: 1987年11月
- 著者: P. Mockapetris (USC/Information Sciences Institute)
- ステータス: INTERNET STANDARD (STD 13)
概要
本RFCはDNS (Domain Name System)の実装詳細を定義し、メッセージ形式、リソースレコード形式、ネームサーバーとリゾルバの動作仕様を含みます。本ドキュメントはRFC 1034 (DNS概念と設備)と対になっており、RFC 1034が概念を定義し、本ドキュメントが具体的な実装を定義します。
核心概念: RFC 1035はDNSの実装仕様であり、メッセージ形式、レコードタイプ、実装詳細を定義します。
RFC 1034との関係
RFC 1034 (概念) RFC 1035 (実装)
───────────────── ─────────────────
✓ DNSとは何か → ✓ メッセージ形式
✓ ドメイン名構造 → ✓ リソースレコード形式
✓ ネームサーバー構造 → ✓ 解決アルゴリズム
✓ キャッシュ戦略 → ✓ 圧縮メカニズム
✓ クエリタイプ → ✓ プロトコル詳細
推奨:
先にRFC 1034で概念を理解
次にRFC 1035で実装を理解
DNSメッセージ形式
メッセージ構造
すべてのDNSメッセージは同じ形式を使用します:
+---------------------+
| Header | 12バイト、固定
+---------------------+
| Question | クエリ部分(可変長)
+---------------------+
| Answer | 回答部分(可変長)
+---------------------+
| Authority | 権威部分(可変長)
+---------------------+
| Additional | 追加部分(可変長)
+---------------------+
Headerフォーマット
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
合計長: 12バイト
フィールド詳細
ID (16ビット): クエリと応答のマッチングに使用。範囲: 0-65535
QR (1ビット): 0 = Query、1 = Response
Opcode (4ビット): 0 = QUERY (標準クエリ)、1 = IQUERY (廃止)、2 = STATUS
AA (1ビット): Authoritative Answer - 権威回答フラグ
TC (1ビット): Truncation - 切り詰めフラグ(UDP 512バイト超過時)
RD (1ビット): Recursion Desired - 再帰希望
RA (1ビット): Recursion Available - 再帰利用可能
Z (3ビット): 予約(0である必要)
RCODE (4ビット): Response Code
| RCODE | 意味 | 説明 |
|---|---|---|
| 0 | NOERROR | 成功 |
| 1 | FORMERR | フォーマットエラー |
| 2 | SERVFAIL | サーバー障害 |
| 3 | NXDOMAIN | ドメイン名不存在 |
| 4 | NOTIMP | サポートされていない |
| 5 | REFUSED | クエリ拒否 |
Question Sectionフォーマット
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ QNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
QNAME: クエリするドメイン名(可変長)
QTYPE: クエリタイプ(16ビット)
QCLASS: クエリクラス(16ビット、通常は1=IN)
QNAMEエンコーディング
ドメイン名: www.example.com
エンコード:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|03| w w w |07| e x a m p l e |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|02| c o m |00|
+--+--+--+--+--+
形式:
- 各ラベルの前に長さ(1バイト)
- ラベル内容(ASCII文字)
- 0で終了
例: "www.example.com" = 3 "www" 7 "example" 3 "com" 0
ルートドメイン名: 0(単一の0バイト)
QTYPE(クエリタイプ)
| 値 | タイプ | 説明 |
|---|---|---|
| 1 | A | IPv4アドレス |
| 2 | NS | ネームサーバー |
| 5 | CNAME | 正規名(エイリアス) |
| 6 | SOA | 権威の開始 |
| 12 | PTR | ポインター(逆引き) |
| 15 | MX | メール交換 |
| 16 | TXT | テキストレコード |
| 28 | AAAA | IPv6アドレス |
| 255 | ANY | すべてのレコード(非推奨) |
リソースレコードタイプ詳細
Aレコード - IPv4アドレス
TYPE = 1
RDLENGTH = 4(バイト)
RDATA = 32ビットIPv4アドレス
例:
NAME: example.com
TYPE: A (1)
CLASS: IN (1)
TTL: 3600
RDLENGTH: 4
RDATA: 93.184.216.34
エンコード(RDATA):
93.184.216.34 → 0x5DB8D822
NSレコード - ネームサーバー
TYPE = 2
RDATA = ネームサーバーのドメイン名
例:
NAME: example.com
TYPE: NS (2)
TTL: 86400
RDATA: ns1.example.com
意味: example.comの権威サーバーはns1.example.com
CNAMEレコード - エイリアス
TYPE = 5
RDATA = 正規名
例:
NAME: www.example.com
TYPE: CNAME (5)
TTL: 3600
RDATA: example.com
意味: www.example.comはexample.comのエイリアス
クエリフロー:
www.example.com A をクエリ
→ CNAME example.com を返す
→ example.com A を継続クエリ
→ 93.184.216.34 を返す
SOAレコード - 権威の開始
TYPE = 6
RDATA形式:
MNAME: プライマリネームサーバー
RNAME: 責任者メールボックス
SERIAL: シリアル番号
REFRESH: リフレッシュ間隔
RETRY: リトライ間隔
EXPIRE: 有効期限
MINIMUM: 最小TTL
例:
NAME: example.com
TYPE: SOA (6)
TTL: 86400
RDATA:
MNAME: ns1.example.com
RNAME: admin.example.com ([email protected])
SERIAL: 2024010101
REFRESH: 3600
RETRY: 600
EXPIRE: 604800
MINIMUM: 86400
用途:
- ゾーン権威情報の識別
- ゾーン転送の制御
- キャッシュポリシーの設定
MXレコード - メール交換
TYPE = 15
RDATA形式:
PREFERENCE: 優先度(16ビット)
EXCHANGE: メールサーバードメイン名
例:
NAME: example.com
TYPE: MX (15)
TTL: 3600
RDATA:
PREFERENCE: 10
EXCHANGE: mail1.example.com
複数のMXレコード:
example.com MX 10 mail1.example.com
example.com MX 20 mail2.example.com
example.com MX 30 mail3.example.com
処理:
- 数値が小さいものを優先
- 同じ優先度はランダム選択
- 失敗時は次を試行
DNSメッセージ圧縮
重複するドメイン名を圧縮するため、DNSはポインターを使用します:
圧縮形式:
ドメイン名ラベル長:
- 00-3F: 通常のラベル長(0-63)
- C0-FF: ポインター(11xxxxxx xxxxxxxx)
ポインター形式:
11 <14ビットオフセット>
例:
元のメッセージ:
Offset 12: 3 "www" 7 "example" 3 "com" 0
Offset 30: 7 "example" 3 "com" 0
圧縮後:
Offset 12: 3 "www" 7 "example" 3 "com" 0
Offset 30: C0 0x11 (offset 12+4="example"を指す)
節約:
30: "example.com" (12バイト)
圧縮: C0 0x11 (2バイト)
節約: 10バイト
実用ツール
digコマンド詳細
# 基本クエリ
dig example.com
# レコードタイプ指定
dig example.com A # IPv4
dig example.com AAAA # IPv6
dig example.com MX # メールサーバー
dig example.com NS # ネームサーバー
dig example.com TXT # テキストレコード
# DNSサーバー指定
dig @8.8.8.8 example.com
# クエリパス追跡
dig +trace example.com
# 短形式出力
dig +short example.com
# 逆引き
dig -x 93.184.216.34
# TCP クエリ
dig +tcp example.com
# 完全な応答表示
dig +noall +answer +additional example.com
nslookup使用
# 対話モード
nslookup
> example.com
> set type=MX
> example.com
> exit
# コマンドラインモード
nslookup example.com
nslookup -type=MX example.com
nslookup -type=NS example.com
hostコマンド
# 簡単なクエリ
host example.com
# 詳細出力
host -v example.com
# レコードタイプ指定
host -t MX example.com
host -t NS example.com
参考文献
コアRFC:
- [RFC 1034] Domain Names - Concepts and Facilities
- [RFC 1035] Domain Names - Implementation and Specification ← 本ドキュメント
拡張と更新:
- [RFC 2181] Clarifications to the DNS Specification
- [RFC 2308] Negative Caching of DNS Queries (DNS NCACHE)
- [RFC 4033] DNS Security Introduction and Requirements
- [RFC 4034] Resource Records for the DNS Security Extensions
- [RFC 4035] Protocol Modifications for the DNS Security Extensions
- [RFC 6891] Extension Mechanisms for DNS (EDNS(0))
関連プロトコル:
- [RFC 8484] DNS Queries over HTTPS (DoH)
- [RFC 7858] Specification for DNS over Transport Layer Security (TLS)
まとめ: RFC 1035はDNSの実装詳細を定義し、DNSプロトコルの動作原理を理解するための重要なドキュメントです。メッセージ形式からリソースレコード、クエリフローから圧縮メカニズムまで、本RFCはすべてのDNS実装に詳細な仕様を提供します。RFC 1034と合わせて、DNSシステムを完全に理解できます!