DNSが“対照的な通信プロトコル”「TCP」と「UDP」をあえて使い分ける理由:TCP、UDPの違いとDNS【後編】
一般的なネットワークサービスで「TCP」と「UDP」のいずれかが使われるのに対し、「DNS」はこれらのプロトコルを使い分けている。その理由や、具体的な使用シーンを解説する。
インターネット上でドメイン名とIPアドレスを対応付ける仕組みである「DNS」(Domain Name System)。一般的にはトランスポート層(OSI参照モデルの第4層)のプロトコルとして「TCP」(Transmission Control Protocol)と「UDP」(User Datagram Protocol)のいずれかを使用するサービスが多い中で、DNSはその両方を使用する。
簡単に言えば、TCPは送信元と送信先の間で接続を確立した上でデータをやりとりする仕組みで、UDPはその接続を確立せずに送信する仕組みだ。TCPとUDPの違いを解説した前編「『TCP』と『UDP』の違いとは? DNSに学ぶ“プロトコルの基礎”」に続き、後編となる本稿は、なぜDNSがTCPとUDPの両方のトランスポート層プロトコルを使い分けているのかを解説する。
DNSはなぜ「TCP」と「UDP」を使い分ける?
併せて読みたいお薦め記事
ポート番号の基本を押さえる
DNSは、通信内容や目的に応じてUDPとTCPを使い分けている。小さくて高速なやりとりが求められる「名前解決」のクエリとレスポンスはUDPを使用し、大量のデータや確実な配信が必要な「DNSゾーン転送」は信頼性の高いTCPを利用する。ただし、この使い分けには幾つかの例外も存在する。
DNSとUDP
DNSサーバは、ドメイン名とIPアドレスを対応付けたデータベースを持っている。ユーザーがWebサイトやサーバに名前で接続しようとすると、そのデバイスはDNSサーバからその名前に対応するIPアドレスを取得する。パケットには宛先となるIPアドレスを必ずヘッダに含める必要があるためだ。
その問い合わせは通常、小規模で高速だ。クライアントが応答を受信しなかった場合は、クエリを再送信するため、信頼性は問題にならない。UDPはこの種の通信に適している。
DNSとTCP
名前解決のデータベースのコピーが1台のサーバにしかない場合、DNSサービスの信頼性は低くなる。ほとんどのネットワークには、信頼性を確保するために2台以上のDNSサーバがある。複数のDNSサーバを使う場合、片方のサーバで登録情報が更新されることがある。この新しい情報は、ゾーン転送と呼ばれる仕組みで他のサーバにも複製される。
ゾーン転送でやりとりされるデータは通常は小さいが、場合によってはゾーン全体を丸ごと転送する「完全ゾーン転送」が必要になることもある。このような大規模なデータ転送では、データ欠落や順序の乱れがないよう、信頼性の高いTCP接続が使われる。
UDPによるDNSのやりとりには、1回に扱えるデータ量が最大512バイトという制限がある。通常のクエリやレスポンスはこの範囲に収まるが、サイズが上限を超えることがある。こうした場合は、データが途中で切れてしまわないよう、DNSはTCPを使用する。
両プロトコルを押さえるのが基本
DNSの仕様書やネットワーク機器の設定画面では、ポート53/TCPとポート53/UDPの両方が登場することが多い。2つのプロトコルの利点を考えると、両方の管理が求められている理由は明らかだ。標準的なクエリはUDP通信を利用し、ゾーン転送やより複雑なクエリにはTCPを使用する。完全なDNSの機能を実現するには、基本的には両方のプロトコルのトラフィックを許可するようにパケットフィルターとファイアウォールを設定する必要がある。
ただし、DNSのセキュリティを強化する拡張機能である「DNSSEC」(Domain Name System Security Extensions)や「DoT」(DNS over TLS)では、メッセージサイズが大きくなる。その場合は、従来は主にUDPが使われていた名前解決のクエリやレスポンスでも、TCPのポート53を利用するケースがある。
Copyright © ITmedia, Inc. All Rights Reserved.