よくある質問・用語集

  • もっと調べる

EDNS0とは

EDNS0とは、DNSで扱うメッセージサイズを拡張するプロトコルで、RFC2535で規定されている。もともとDNSは、UDPを使って小さなメッセージを交換するプロトコルとして実装されている。しかし、DNSSECやIPv6の導入により、DNSで扱うデータの量は飛躍的に大きくなった。だが、DNSではUDPを使う場合には512バイトまでのデータしか扱うことができない。EDNS0は、このメッセージサイズの制限を緩和することができる。

従来のDNS通信

DNSはARPANETの時代から使われている名前解決のためのプロトコルである。そのため、当時の通信環境でも確実に通信ができるようにメッセージサイズが決められた。これは、TCP/IPのデータグラムの既定に由来している。IPv4のデータグラムの規定では、576バイトまでのデータグラムは一度に受信できることを保証している。そのため、576バイト以下のデータであれば、どのネットワークでも必ず利用することができた。そのため、非常に重要なプロトコルであるDNSは、この576バイト以下で動作するように作られた。576バイトのうち、ヘッダが64バイトあるため、実際に扱えるデータ量は512バイトとなっている。

TCPフォールバック

DNSでは、大きなデータを扱う場合にはTCPを使うことができる。DNSサーバは、応答メッセージが大きくなると、512バイトに情報を切り詰めて、TCビットをセットして応答を返す。これを受け取ったクライアントは、同じ問い合わせをTCPで行う。TCPでは、メッセージサイズの上限はないため、クライアントは確実に情報を受けとることができる。これを、TCPフォールバックと言う。
しかし、TCPはコネクション型のプロトコルであるため、高速なレスポンスが求められるDNSには向いていない。そのため、UDPでより大きなデータを扱うことが求められた。

EDNS0の特徴

現在のネットワーク環境では、Ethernetが広く普及していている。Ethernetでは、1500バイトまでのデータを扱うことができる。PPPoEなどのオーバーヘッドを考えても、1280~1410バイトであればほとんどの環境で利用できる。そのため、メッセージサイズの制限を取り除こうとしたのがEDNS0である。

EDNS0に対応したDNSキャッシュサーバは、権威DNSサーバとの間でEDNS0が使えるかを調べるために、OPTレコードという擬似リソースレコードを使う。権威DNSサーバが、OPTレコードの問い合わせに応答すればEDNS0が使えると判断される。EDNS0が利用できることが分かると、その後の通信ではTCPフォールバックではなく、EDNS0が使われる。

EDNS0では、UDPでも512バイト以上のデータを利用することができるようになる。MTUを越える大きなDNS応答も送受信することができる。その場合には、IPフラグメンテーションが発生する可能性もある。

注意点

ネットワーク機器によっては、512バイトよりも大きなUDPのDNSパケットを扱えない機器がある。そのため、サーバ間でEDNS0を使うことを合意しても、実際に通信が行えることが確定している訳ではない。特に、通信経路上に未対応の機器があると、DNSが誤動作をしたり名前解決ができない場合もある。
こうしたトラブルを防ぐため、必要に応じてネットワーク全体を点検し、EDNS0に対応していない機器がないかを確認しておく必要がある。
また、EDNS0は必ず使えるわけではないので、TCPのDNSに対する許可も行う必要がある。

【カテゴリ】:DNS  ネットワーク  

  • もっと調べる

【Webセミナー】Rocket.Chatだけじゃない!OSSビジネスチャットの最新情報

日程: 12月19日(木)Webセミナー「BigBlueButton」を使用します。
内容: Rocket.Chatの機能制限でお困りの方も必見!ライセンスフリーで利用できるOSSのビジネスチャットを紹介します。
ご興味のあるかたはぜひご参加ください。

セミナー申込

関連用語

EDNS0に関連するページ(事例など)

EDNS0とは先頭へ