DNSのしくみ
 DNS(ドメイン名システム)は,ドメイン名からそのドメイン名に対応するIPアドレスに変換するサービスを提供します.DNSのしくみを図3に示します.DNSはサーバ・クライアントモデルとなっていて,DNSサーバとDNSクライアントからなります.

〔図3〕DNSサーバとDNSクライアント間の通信

〔図3〕DNSサーバとDNSクライアント間の通信

 DNSサーバは,UDPの53番ポートをウェルノウンポートとして通信に使用します.また,DNSサーバは自分の管轄するドメインに含まれるホスト名やサブドメインの情報を持っています.
 cqpub.co.jpのDNSサーバの例では, 
  www.cqpub.co.jp
  ns.cqpub.co.jp
  proxy.cqpub.co.jp
といったホスト名や,
  sales.cqpub.co.jp
といったサブドメインです.

● クライアントからDNSサーバへ問う
 ドメイン名からIPアドレスに変換するときには,DNSクライアントからDNSサーバに対して変換要求を送ります.
 DNSサーバは受け取った要求パケットを解析し,自分の保有するデータベースを検索してドメイン名からIPアドレスに変換します.そして,変換結果から応答パケットを生成してDNSクライアントに返答します.

● DNSへの問い合わせはUDP
 DNSサーバとDNSクライアントの通信には,通常UDPが使われます.なぜ通信の信頼性のあるTCPではなくUDPが使われるのでしょうか.TCPでは通信を始めるまでに,図4のようにセッションの開始の手続きが必要で,クライアントが通信をしようと思い立ってから,実際の通信ができるようになるまでに時間がかかってしまいます.本来の通信の量が多く,時間がかかるものであれば,セッション開始までのオーバヘッドは無視できます.
 しかし,DNSサーバとDNSクライアントの通信では,DNSクライアントからDNSサーバに対して変換要求パケットが送られ,これに対してサーバからクライアントに返答パケットが返されます.
 つまり,1往復の通信しか起きていません.DNSのように,要求1パケットに対して,返答を1パケットしか送り返さないような非常に軽い通信(送り合う本文のデータ量が少ない)の場合は,通信開始までのオーバーヘッドが無視できなくなります.

〔図4〕TCPとUDPによる通信開始までのオーバヘッドの違い

〔図4〕TCPとUDPによる通信開始までのオーバヘッドの違い


● 返事はタイマで見ている
 そこでDNSでは,通信の信頼性はありませんが,通信開始までのオーバヘッドのないUDPを用います.UDPでは通信の信頼性を確保するために,アプリケーションのレベルでその機能を実装する必要があります.
 DNSでは,図5のようにタイマを用いて通信の信頼性を確保します.DNSクライアントは,DNSサーバに対してドメイン名変換の要求を送信すると同時に,タイマをスタートさせます.もし,タイマがタイムアウトする前にサーバから回答が返ってくれば,通信が成功したと見なします.
 しかし,サーバから応答がなく,タイマがタイムアウトすると,通信に失敗したと見なしサーバに再度要求を送ります.もし,サーバが機能ダウンしていたり,サーバまでのIP的な通信ができなかったとすると,何度要求を送ったとしても回答は返ってきません.
 再送を無限に繰り返さないようにするために,再送した回数をカウンタで覚えておきます.もし,カウンタがある値を超えた場合は,サーバと通信ができないものと判断してドメイン名変換をあきらめ,変換を要求したソフトウェアに対して変換失敗を通知します.
〔図5〕DNSにおける通信の信頼性確保のしくみ

〔図5〕DNSにおける通信の信頼性確保のしくみ


 CQ出版 TOP OPENDESIGN TOPOPENDESIGN Online目次に戻る
 
Copyright CQ Publishing Co.,Ltd. 1997-2001