通信用語の基礎知識 全国のICカードこれひとつ 戻る

DNSプロトコル
辞書:通信用語の基礎知識 通信手順上編 (CPINFO)
読み:ディーエンエス-プロトコル
外語:DNS protocol
品詞:名詞

DNSを照会する際に用いる通信プロトコル

目次
概要

TCP/IPのポート53(53/tcpおよび53/udp)が使われる。

DNSでは、問い合わせや応答について、DNSプロトコルと呼ばれるプロトコルを使う。その仕様は、美しさに欠け、解読にも苦慮するが、少しでもデータサイズを縮めるための努力が込められている(らしい)。

512バイトの壁
原因

DNSプロトコル自体は、UDPでもTCPでも利用できる。しかし、通常は速度優先でUDPを用いている。

速度と信頼性はトレードオフの関係にあり、UDPはシンプルなプロトコルであるため高速だが信頼性に欠く。それでも、速度のためにUDPがよく使われている。この影響で逆に、TCPでDNSプロトコルが利用できない実装も少なくないという状況を作り出した。ここで発生するのが、DNSが返すデータのサイズが、DNSの想定する最小MTUを越えてしまった場合の動作である。

IPv4用DNSプロトコルは、IPv4の最小MTUである548オクテット以内で動作することを想定している。このため、データサイズが512オクテットを越える場合、そのリザルトはパケット分割に対応したTCPにする(TCPフォールバック)か、UDPの場合でもEDNS0という手法を使わざるを得なくなる。どちらも一長一短がある。

TCPフォールバック

リザルトを53/tcpで返信することで、通信の継続を図る手法である。最小MTU以下にTCP層で分割して送信することで、512バイトを越える場合でも情報のやりとりが可能となる。

しかしTCPのコネクション処理が必要になるため、どうしてもレスポンスの低下が発生してしまう。

更に、主要な実装(各種ネットワーク装置や、安物ルーターなども含む)はTCPのDNSプロトコル(53/tcp)に対応していない可能性が高い。仮にルーター自体は対応していても、セキュリティのために53/tcpを通さない設定になっていることもありうる。このためDNSのレコードが膨らみ512バイトを超えてしまうと、正常に通信できない問題が頻発することになる。

クライアントはUDPで要求を投げ、UDPでレスポンスが戻ることを期待している。この状況でTCPでリザルトを返して来ても、それを受け取る処理がない。結果、いくら待ってもクライアントが期待した(UDPの)応答が返って来ないため、通信することが出来ないことになる。これが「512バイトの壁」である。

基本的にクライアント側の問題であるため、サーバー側で打てる手はない。512バイトを越えないようにする消極的対応しか無いが、IPv6対応なども進む中、レコードサイズは増える状況にあり、512バイト以内に収めることは困難となってきた。

EDNS0 (Extension mechanism for DNS)

EDNS0は、STD 75(RFC 6891)で標準化されたDNSの拡張技術で、512バイトを超えるUDPでのDNSプロトコルを実現するものである。

そもそもEthernetのMTUは1500バイトあるので、UDPのDNSでも1500バイトのパケットを扱うことは難しいことではない(はずである)。問題は、クライアント側、サーバー側の双方が、512バイトを越えるMTUがあるかどうか、である。そこで、互いのMTUを送受信する機能を、DNSプロトコルの水準で設けた。これがEDNS0である。

転送可能バイト数は16ビットの長さが用意されるため、最大で65535まで可能である。ただし、あまり大きいとパケットのフラグメントが発生する。特にEthernetならMTUが1500バイトなので、これを超えれば確実にフラグメントが発生するため、パケットドロップ率が高い環境の場合、あまり実用的でなくなる。

仕様
資源レコード

DNSが提供する各情報を、リソースレコード(RR)という。

zoneファイルに書かれた情報を、DNSプロトコルでクライアントに送信することが主たる目的となり、そのための手法が用意されている。

プロトコル構造

DNSプロトコルのメッセージフォーマットは、大きく5つのセクションがある。DNSメッセージヘッダーのみ必須で、それ以外は空となるセクションが存在する。

DNSメッセージヘッダー

ヘッダー内の各項目は、全て16ビット長である。したがって12オクテット、96ビット固定長である。フラグは、MSB→LSBの順に記載する。

質問欄
リソースレコード

回答欄、オーソリティ、追加情報は次の共通の構造となる。


構造

リソースレコード(資源レコード)は可変長である。

RDATAの大きさや内容、構造などはTYPEごとに様々である。詳細なフォーマットについては、RFC 1035の3.3章に記載がある。


TYPE

リソースレコードに使われるTYPE値。

以下は、質問(Query)時に使われるQTYPE値。


CLASS

リソースレコードに使われるCLASS値。

以下は、質問(Query)時に使われるCLASS値。

リンク
用語の所属
DNS
関連する用語
EDNS0

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic