MENU
「安心のセキュリティをお得な価格」でご提供!
Fortinet商品など
ENGAGE fotinet

DNSのUDPとTCPについて

DNSでは、ドメイン名をIPアドレスに変換するための通信に、主に UDPTCP の2つのプロトコルが使われます。

一般的な名前解決ではUDPが多く使われますが、状況によってはTCPが使われることもあります。

そのため、DNSを正しく理解するには、「DNSはUDPで動く」と覚えるだけでは不十分です。

実際には、用途や通信内容に応じてUDPとTCPを使い分けている と考えるのが正確です。

DNSでUDPとTCPの両方が使われる理由

DNSは、Webサイトの閲覧やメール送信など、インターネット上のさまざまな通信の前提となる仕組みです。

たとえば、ブラウザでWebサイトを開くときは、まずそのドメイン名に対応するIPアドレスを調べるためにDNSへの問い合わせが行われます。

このときDNSは、通信方法としてUDPまたはTCPを利用します。

どちらを使うかは、応答データの大きさや通信の目的によって変わります。

大まかにいうと、次のように整理できます。

  • 通常の名前解決ではUDPがよく使われる
  • 大きな応答を扱う場合やゾーン転送ではTCPが使われる

つまりDNSは、軽量で高速な通信と、信頼性の高い通信を状況に応じて使い分けているのです。

UDPとは

UDPは User Datagram Protocol の略で、通信相手との接続を事前に確立せずにデータを送る方式です。

UDPには次のような特徴があります。

  • 通信開始時の手続きが少ない
  • 処理が軽い
  • 低遅延で通信しやすい
  • データが確実に届いたかどうかはUDP自体では保証しない
  • 再送や順序保証の仕組みを持たない

DNSの問い合わせは、1回あたりのデータ量が比較的小さいことが多いため、こうしたUDPの性質と相性がよいとされています。

DNSでUDPがよく使われる理由

DNSでUDPが広く使われてきた最大の理由は、軽量で効率的だから です。

DNSの名前解決は、Webアクセスのたびに何度も発生する可能性があります。

そのたびに接続確立の処理を行うと、応答速度やサーバー負荷に影響しやすくなります。

UDPであれば、接続を張るための事前手続きなしに問い合わせを送れるため、次のようなメリットがあります。

  • 名前解決を素早く行いやすい
  • サーバー側の処理負荷を抑えやすい
  • 多数の問い合わせを効率よく処理しやすい

このため、AレコードやAAAAレコード、MXレコード、CNAMEレコードなど、一般的なDNS問い合わせではUDPが使われることが多くなっています。

TCPとは

TCPは Transmission Control Protocol の略で、通信相手との接続を確立したうえで、データの到達や順序を確認しながら通信する方式です。

TCPの主な特徴は次の通りです。

  • 通信前に接続確立が必要
  • データの到達確認を行う
  • 欠損があれば再送する
  • データを順序通りに扱える
  • 信頼性が高い
  • UDPに比べると処理負荷や通信コストが大きくなりやすい

UDPよりも手軽さでは劣りますが、より確実にデータをやり取りしたい場面ではTCPが適しています。

DNSでTCPが使われる主なケース

DNSはUDPだけで動作するわけではありません。

実際には、次のような場面でTCPが重要な役割を果たします。

応答データが大きい場合

DNS応答が大きくなり、UDPでは収まりきらないことがあります。

このような場合、DNSサーバーは応答が途中で切り詰められたことを示す TC(Truncated)フラグ を返すことがあります。

クライアントはこの情報を受け取り、必要に応じてTCPで再度問い合わせを行います。

大きな応答が発生しやすい例としては、次のようなものがあります。

  • DNSSEC関連の応答
  • 多数のレコードを含む応答
  • サイズの大きいTXTレコード
  • 複雑な委任情報を含む応答

ゾーン転送を行う場合

DNSサーバー同士でゾーン情報をやり取りする ゾーン転送 では、TCPが使われます。

代表的なゾーン転送には、次の2種類があります。

  • AXFR:ゾーン全体を転送する方式
  • IXFR:変更差分のみを転送する方式

ゾーン転送では、大量のDNS情報を正確に送受信する必要があるため、信頼性の高いTCPが適しています。

EDNS(0)を使ってもUDPで収まらない場合

従来のDNS over UDPでは、扱えるメッセージサイズに制限がありました。

その後、EDNS(0) によって、UDPで扱える応答サイズを拡張できるようになりました。

ただし、EDNS(0)を使っても、すべての大きな応答を安定してUDPで扱えるとは限りません。

ネットワーク機器の制限やフラグメントの問題などにより、最終的にTCPでの再問い合わせが必要になることがあります。

UDPとTCPの違いをDNSの観点から比較

DNSにおけるUDPとTCPの違いを簡潔に整理すると、次のようになります。

UDPの特徴

  • 接続確立が不要
  • 処理が軽い
  • 応答が速くなりやすい
  • 一般的なDNS問い合わせでよく使われる
  • 大きな応答には不向きな場合がある
  • パケットロスや断片化の影響を受けやすい

TCPの特徴

  • 接続確立が必要
  • 到達確認や再送がある
  • 信頼性が高い
  • 大きな応答やゾーン転送に向いている
  • UDPよりオーバーヘッドが大きい
  • DNSでも重要な輸送手段のひとつである

「DNSはUDPだけ」と考えるのは正確ではない

DNSについて簡単に説明するとき、「DNSはUDPを使う」と紹介されることがあります。

これは間違いとは言えませんが、正確には不十分です。

実際には、DNSは歴史的にUDPを広く使ってきた一方で、TCPも正式な通信手段として利用されています。

特に現在では、大きな応答への対応や運用上の要件を考えると、TCPは単なる例外ではなく、DNSにとって重要な役割を持つ存在です。

そのため、DNSを説明する際は、次のように理解するのが適切です。

DNSでは通常の名前解決でUDPが多く使われるが、必要に応じてTCPも使われる。
つまりDNSは、UDPとTCPを使い分けて動作する仕組みである。

DNS通信の典型的な流れ

一般的なDNS通信の流れは、次のようになります。

  1. クライアントがDNSサーバーへ問い合わせを送る
  2. 通常はUDPで応答を受け取る
  3. もし応答が大きすぎる場合は、切り詰め情報が返される
  4. 必要に応じてクライアントがTCPで再問い合わせする
  5. TCPで完全な応答を受け取る

多くのケースではUDPだけで処理が完了しますが、応答内容によってはTCPが必要になります。

UDP利用時に注意したいポイント

UDPは高速で効率的ですが、DNSで利用する際にはいくつか注意点もあります。

パケットロスの影響を受けやすい

UDP自体には再送制御がないため、途中でパケットが失われる可能性があります。

その場合、再試行はDNSクライアントやリゾルバ側の実装によって行われます。

フラグメントの問題が起こることがある

大きなUDPパケットは、IPレベルで分割される場合があります。

この断片化が途中で失敗すると、名前解決エラーの原因になることがあります。

送信元偽装を悪用した攻撃に利用されやすい

UDPは接続状態を持たないため、過去にはDNSを悪用した増幅攻撃の踏み台として問題になることがありました。

TCP利用時に注意したいポイント

TCPは信頼性が高い一方で、次のような特徴があります。

接続確立のコストがある

UDPと比べると、通信開始までの処理が増えるため、単発の問い合わせでは不利になりやすいです。

サーバー側の負荷が増えやすい

TCPは接続状態を管理する必要があるため、サーバーのメモリや処理資源をより使います。

応答遅延が増える場合がある

運用や実装によっては、UDPより遅く感じられることがあります。

ただし、接続の再利用などによって影響を抑えられる場合もあります。

実務で押さえたいポイント

DNSのUDPとTCPを理解するうえで、実務上は次の点を押さえておくと役立ちます。

通常の名前解決ではUDPが多い

一般的なWeb閲覧やアプリ利用時のDNS問い合わせは、まずUDPで行われることが多いです。

TCPも正式で重要な通信手段

TCPは例外的なものではなく、DNSの正常な運用に必要な仕組みのひとつです。

ゾーン転送ではTCPが重要

DNSサーバー運用に関わる場合は、AXFRやIXFRといったゾーン転送とTCPの関係を理解しておく必要があります。

ファイアウォールではUDP 53だけでなくTCP 53も考慮する

DNS関連の通信では、UDP 53だけ許可していれば十分とは限りません。

環境によってはTCP 53も必要になるため、設定時には両方を意識することが大切です。

まとめ

DNSでは、一般的な名前解決においてはUDPがよく使われます。

これは、UDPが接続確立不要で軽量なため、すばやく効率的に問い合わせを処理しやすいからです。

一方で、応答データが大きい場合やゾーン転送を行う場合には、信頼性の高いTCPが使われます。

そのため、DNSはUDPだけで動く仕組みではなく、用途に応じてUDPとTCPを使い分ける仕組み と理解するのが正確です。

以上、DNSのUDPとTCPについてでした。

最後までお読みいただき、ありがとうございました。

カテゴリ一覧

ページトップへ