ダウンロード サンプルファイル(C#) (86.8 KB)
ダウンロード サンプルファイル(VB) (104.9 KB)
DNSで使用するトランスポート層のプロトコル
DNSはトランスポート層のプロトコルであるTCPとUDPの内どちらでも使用できますが、問い合わせはオーバーヘッドが少ないことが好まれますので、一般的にはUDPが使用されています。
ただし、UDPだけが使用されているのではありません。他の項で少し触れましたが、ネームサーバは障害時にそなえて、複数用意できます。その時、セカンダリサーバにプライマリサーバが管理している情報を転送しなくてはなりません。これを「ゾーン転送」と呼びます。ゾーン転送時には、信頼性が求められますので、信頼性が高いTCPが使用されます。また、問い合わせ結果として512バイトを超える応答データ返された場合、リゾルバは一般的にはTCPを使用して要求を再発行します。
これから、DNSのデータ通信を解説するに先だってUDPを使用した通信を、サンプルプロジェクト「UdpTest」を用いて解説します。記事に添付されているサンプルコードをダウンロードして、実行してみてください(C#版とVB.NET版を用意しています)。
前回紹介したサンプルプロジェクトTcpTestの実行結果と見比べると、UDPがオーバーヘッドがほとんどないプロトコルであることが分かります。 ただし、信頼性を確保しようとすれば、プログラマ自身が処理をしなくてはなりません。DNSの問い合わせはUDPを使用しているので、パフォーマンスは高いものの信頼性が低く、パケットがロストする危険があることを頭の隅に置いてください。
これで、DNSでの通信方法を理解する下地ができましたので、次項でDNSの問い合わせ処理について解説します。
DNSの問い合わせ処理
DNSでホスト名のIPアドレスを問い合わせる様をプログラムで表現しましたので、まずはサンプルプロジェクトの「QueryTest」を実行してみてください。
DNSのIPアドレス問い合わせの様子が窺えます。ただし、これはあくまでも解説のための例であり、実際とは異なる点に注意してください。これから、このプログラムを基にDNSのIPアドレス問い合わせについて解説していきます。
この記事は参考になりましたか?
- 仮想ネットワークの実装で学ぶTCP/IP連載記事一覧
-
- 仮想ネットワーク実装でTCP/IPを学ぼう(7) ― GDI+と独自プロトコルの定義
- 仮想ネットワーク実装でTCP/IPを学ぼう(6) ― セキュリティの基礎と仮想ネットワーク...
- 仮想ネットワーク実装でTCP/IPを学ぼう(5) ― アプリケーション層の勘所
- この記事の著者
-
インドリ(インドリ)
分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア




