DNS over TCPとは?DNSでTCP通信が必要になるケースとUDPとの違いを解説

通信プロトコル

DNS(Domain Name System)は通常UDPを利用して名前解決を行いますが、状況によってはDNS over TCPと呼ばれるTCP通信が必要になります。DNSは常にUDPだけで動作しているわけではなく、信頼性やデータ量の問題を解決するためにTCPが使われる場面があります。

この記事では、DNSでUDPが一般的に利用される理由と、DNS over TCPが必要になる具体的なケース、UDPとTCPの違いについて初心者にもわかりやすく解説します。

DNSでUDPが一般的に使われる理由

DNSの名前解決では、クライアントがDNSサーバーへ問い合わせを行い、ドメイン名に対応するIPアドレスを取得します。この処理は短い問い合わせと短い応答で完了することが多いため、UDPが利用されています。

UDPはTCPのように接続確立の手順を必要としないため、高速に通信を開始できます。例えば、Webサイトへアクセスする際には最初にDNS問い合わせが発生しますが、ここでTCP接続を毎回確立すると通信開始までの時間が増えてしまいます。

また、DNS問い合わせは基本的に1回の要求と1回の応答で完結するため、信頼性よりも高速性が重視され、UDPが適しています。

DNS over TCPが必要になる主な状況

DNSでは通常UDPが使われますが、以下のような場合にはTCPへ切り替えて通信します。

  • DNS応答データがUDPのサイズ制限を超える場合
  • ゾーン転送を行う場合
  • DNSSECなどで応答サイズが大きくなる場合
  • UDP通信で正常に応答を受け取れない場合

特に重要なのが、DNSレスポンスが大きくなった場合です。従来のDNSではUDPパケットのサイズに制限があり、収まりきらない場合はTCPで再問い合わせを行います。

DNSの応答サイズが大きい場合にTCPが使われる仕組み

DNSにはUDP通信で応答できるサイズに制限があります。以前は512バイトが基本的な上限でしたが、現在ではEDNS(Extension Mechanisms for DNS)によってより大きなサイズを扱えるようになっています。

しかし、DNSSECによる電子署名情報や多数のレコードを含む応答では、それでもUDPのサイズを超えることがあります。

この場合、DNSサーバーは応答にTC(Truncated:切り詰め)フラグを設定します。クライアント側はこの情報を確認すると、同じ問い合わせをTCPで再実行します。

例えば、大量のメールサーバー情報(MXレコード)やDNSSEC情報を取得する場合、通常のUDP応答では不足し、TCPによる取得が必要になることがあります。

ゾーン転送ではDNS over TCPが必須

DNSサーバー間でゾーン情報をコピーするゾーン転送では、TCPが利用されます。これは、DNSサーバーが大量のレコード情報を正確に転送する必要があるためです。

ゾーン転送にはAXFRやIXFRという仕組みがありますが、これらはデータ量が多く、途中でデータが欠落するとDNS情報の不整合につながります。そのため、信頼性の高いTCP通信が使用されます。

例えば企業内でプライマリDNSサーバーとセカンダリDNSサーバーを運用している場合、DNS情報の同期にはTCPによるゾーン転送が利用されます。

DNSSECによってTCP利用が増える理由

DNSSEC(DNS Security Extensions)は、DNS応答が正しいサーバーから送信されたものか確認するためのセキュリティ機能です。

DNSSECでは署名情報などの追加データが含まれるため、通常のDNSよりも応答サイズが大きくなります。その結果、UDPでは送信できずTCPへ切り替わるケースがあります。

現在のインターネットではDNSSEC対応サイトも増えているため、DNSサーバーやファイアウォールではTCPの53番ポートも適切に許可しておく必要があります。

DNSで利用されるポート番号の違い

DNSではUDPとTCPの両方でポート番号53番を使用します。プロトコルが異なるだけで、利用するポート番号自体は同じです。

通信方式 ポート番号 主な用途
UDP 53番 通常の名前解決
TCP 53番 大容量応答、ゾーン転送など

ネットワーク機器の設定でDNS通信を許可する場合、UDPだけではなくTCPの53番ポートも許可することが重要です。

DNS over TCPとDNS over HTTPSなどの違い

近年ではDNS over HTTPS(DoH)やDNS over TLS(DoT)など、DNS通信自体を暗号化する技術も利用されています。

DNS over TCPは暗号化技術ではなく、DNS通信をTCPプロトコルで行う仕組みです。一方、DoHやDoTは第三者による盗聴や改ざんを防ぐ目的でDNS問い合わせを保護します。

つまり、DNS over TCPは主に通信方式の変更、DoHやDoTはセキュリティ強化を目的とした仕組みという違いがあります。

まとめ

DNSでは高速な名前解決を行うため、通常はUDPが利用されています。しかし、DNS応答が大きくなる場合やゾーン転送を行う場合などでは、信頼性の高いTCP通信が必要になります。

特にDNSSECを利用している環境や、大規模なDNSサーバー運用ではTCPの53番ポートが重要になります。

DNSはUDPだけで動作していると思われがちですが、実際にはUDPとTCPを状況に応じて使い分けることで、効率と信頼性を両立しています。

コメント

タイトルとURLをコピーしました