Mímisbrunnr知恵の泉

← コンピュータネットワーク 一覧

🎓 レベル:基礎 | 重要度:A(必須) 📎 前提:UDP

要点(BLUF)

なぜDNSが要るのか

人は名前で覚え、機械はIPで通信します。さらにIPは引っ越し(サーバ移転・冗長化)で変わります。名前とIPを切り離し、名前は固定のままIPだけ差し替えられるようにするのがDNSの価値です。電話帳のように「名前を引けば今の番号が分かる」仕組みです。

階層構造と名前解決の流れ

ドメインは右から左へ階層化されています(www.example.com. の末尾ドットがルート)。

graph TD
  R["ルートサーバ(.)"]
  T["TLDサーバ(.com)"]
  A["権威サーバ(example.com)"]
  C["フルサービスリゾルバ(キャッシュ)"]
  C -->|"1. .comはどこ?"| R
  C -->|"2. example.comはどこ?"| T
  C -->|"3. wwwのAレコードは?"| A

クライアントは普段、再帰でリゾルバに任せ、リゾルバが反復で世界を辿ります。

主なレコードタイプ

レコード役割
A名前 → IPv4アドレス
AAAA名前 → IPv6アドレス
CNAME別名 → 正規名(エイリアス)
MXメールの配送先サーバ
NSそのゾーンの権威サーバ
PTRIP → 名前(逆引き)
TXT任意テキスト(SPF・所有確認等)

キャッシュとTTL

各レコードには**TTL(生存時間)**があり、リゾルバやOSはその間答えを再利用します。TTLが長いほど問い合わせは減りますが、IP変更の反映が遅れます。サーバ移転前にTTLを短くしておくのは運用の定石です。

# Linux/Windows での名前解決の確認
nslookup www.example.com
dig www.example.com A +short

他層との関係

DNSの問い合わせは小さく1往復で済むため、コネクション確立の往復が無駄なUDPが基本(53番)。応答が大きい(512バイト超)場合やゾーン転送はTCPへフォールバックします。名前解決は通信の最初の一歩で、ここが詰まると「ネットにつながらない」体感になります(実際は到達性はあるのに名前が引けないだけ、ということも多い)。

なぜ分散・階層なのか(設計の直観)

全世界の名前を1台で管理したら、負荷・障害・管理権限のすべてが破綻します。階層化して各組織が自分のゾーンだけを管理し、キャッシュで負荷を分散すれば、地球規模でもスケールします。これはIPアドレスの階層化(集約)と同じ「分割して各自が責任を持つ」思想です。

⚠️ よくある誤解

対応 lab

関連