メインコンテンツまでスキップ

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意味説明
0NOERROR成功
1FORMERRフォーマットエラー
2SERVFAILサーバー障害
3NXDOMAINドメイン名不存在
4NOTIMPサポートされていない
5REFUSEDクエリ拒否

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(クエリタイプ)

タイプ説明
1AIPv4アドレス
2NSネームサーバー
5CNAME正規名(エイリアス)
6SOA権威の開始
12PTRポインター(逆引き)
15MXメール交換
16TXTテキストレコード
28AAAAIPv6アドレス
255ANYすべてのレコード(非推奨)

リソースレコードタイプ詳細

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システムを完全に理解できます!