WebサーバーのIPアドレス・DNSサーバー

WebサーバーのIPアドレスはDNSサーバーから調べる

IPアドレスの基本

HTTPのメッセージを作ったら、それをOSに依頼してアクセス先のWebサーバーに向けて送信してもらいます。ブラウザ自体はHTTPのメッセージを送信してくれる機能は持たないので、代わりにOSに依頼して送信してもらいます。その際、URLの中に記述してあるサーバーのドメイン名からIPアドレスを調べる必要があるということです。OSに送信依頼する場合には、送信先のWebサーバーのドメイン名ではなく、IPアドレスでメッセージを届けることになっているからです。なので、HTTPメッセージを作成した次の作業はドメイン名からIPアドレスを調べるという作業になります。

TCP/IPの基本的な考え方

IPアドレスの説明には先にTCP/IPの基本となる考え方が必要になります。インターネットや社内LANはTCP/IPの考え方に基づいて作られています。下図のようにTCP・IPはサブネットという小さなネットワークをルーターで接続することによって全体のネットワークができあがっていると考えます。ここで、サブネットというのは、ハブという装置に何台かのパソコンが接続されたものと考えればいいです。それをひとつの単位と考えて、サブネットと呼びます。そして、それをルーターでつないでいくと、ネットワーク全体ができあがるということです。

  • TCP/IPネットワークの図

 

ひとつのコンピュータに「〇〇丁目××番地」というようにネットワーク上の住所ともいうアドレス番号を割り当てます。「丁目」に回答する番号をサブネットに割り当てて、「番地」に相当する番号をコンピュータに割り当てたものが、ネットワーク上の住所になります。

この「丁目」に相当する番号をネットワーク番号と呼び、「番地」に相当する番号をホスト番号と呼びます。これらのアドレスがIPアドレスと呼ばれるものです。

アクセス先のサーバーまでメッセージを送信するときは、このIPアドレスによってアクセス先が何処にあるのかを判断して、メッセージを運んでいきます。送信持つがメッセージを送ったら、サブネットの中にあるハブがメッセージを運んでいき、送信元から一番近いルーターまで届けます。ルーターはIPアドレスを元にして、次にメッセージを届けるルーターを見定めて判断し、そこに届けるように送信指示を出して実行すると、再びサブネット内のハブがそのルーターまでメッセージを届けてくれます。これの繰り返しにより最終的に相手にルータが届くことになります。

実際のIPアドレス

実際のIPアドレスは32ビットのデジタルデータです。それを8ビット(=1バイト)ずつドットで区切って10進数で表記します。この表記の形式が通常目にすることができるIPアドレスなのですが、このままでは何処がネットワーク番号なのかホスト番号なのかが分かりません。IPアドレスのルールでは、ネットワーク番号とホスト番号を合わせて32ビットと決まっているだけであって、その内訳は区別されません。ネットワークを構築する際に、ユーザーが自分自身でその内訳を決めることができるということです。なので、その内訳を表す情報を必要に応じてIPアドレスに付加します。

IPアドレスに付加する情報をネットマスクと呼びます。

  • 図1:IPアドレスの構造

 

  • 図2:IPアドレスの表記方法

 

ネットマスクは上図1のIPアドレスと同じ32ビット分のデジタルデータで、左側に1が並び、右側に0が並ぶ値をとります。そして、そのネットマスクが「0」の箇所がホスト番号を表し、「1」の箇所がネットワーク番号を表すことになっています。このネットマスクをIPアドレスと同じように8ビットずつドットで区切って表記し、IPアドレスの右側に併記したものが上図2の(b)ですが、この表記法だと長くなってしまうので、上図1のネットマスクのネットワーク番号の中の「1」で表記されている部分のビット数(「0」の部分は除く)8ビット×3=24ビットを10進数の24としてIPアドレスの右側に併記したものが上図2の(c)になります。両方とも表記方法が違うだけで、意味は変わりません。

また、ホスト番号部分のビット値がすべて0の場合のIPアドレスは個々の機器を表すのではなく、サブネット自体を表します。(上図2の(d))また、ホスト番号部分がすべて1の場合は、サブネット上にある機器全員にパケットを送るブロードキャストを表します。

  • IPアドレスのホスト番号
    • すべて「0」:サブネット自体を表す。
    • すべて「1」:サブネット上にある機器全員にパケットを送付する「ブロードキャスト」を表す。

ドメイン名とIPアドレスの使い分け

TCP/IPのネットワークはこのIPアドレスで通信相手を特定することになっているので、IPアドレスが分からないと相手にメッセージを届けることができません。ですので、OSにメッセージ送信を依頼する場合には、IPアドレスを調べておかないといけないのです。

URLを記述する欄のなかにはサーバー名ではなく、IPアドレスを記述しても正しく動くのですが、IPアドレスは数値の列なので、ユーザーにとっては覚えにくいのです。従って、分かりやすいサーバーの名前で書けるようにしておいた方がいいのです。

IPアドレスの代わりにドメイン名使って通信すると仮定した場合、IPアドレスは4バイト(=32ビット)しかありませんが、ドメイン名は数十バイトから、最大で255バイトモあります。つまり、数十〜255バイトの文字データを扱わなければならないことになります。そうなるとルーターの付加がIPアドレスを扱うよりも増大してしまい。データを運ぶ動作に大きな付加が生じてしまいます。その結果、データ送信効率は下がり、ネットワークの速度は遅くなってしまいます。そのため、人間はドメイン名を使って、ルーターはIPアドレスを使用するという方法が考え出されて定着しています。

そこでDNSという仕組みがドメイン名が分かればIPアドレスが分かる。あるいはその逆の操作を担っているということです。

DNS(Domein Name System)

サーバー名(ドメイン名)とIPアドレスとを紐付けるためにDNSを使うというのが一般的ですが、メールアドレスとメールサーバーを紐付けるなど、様々な情報を名前に対応付けて登録することができます。

Soketライブラリの機能によってIPアドレスを提供する

IPアドレスを調べる方法は、最寄りのDNSサーバーに「www.lab.glasscom.com」というサーバーのIPアドレスを教えて下さい。と問い合わせるだけです。これを受けてDNSサーバーがIPアドレスを教えてくれます。

DNSサーバーに問い合わせるということは、DNSサーバーにリクエストメッセージを送り、それに対してレスポンスメッセージを受け取るということです。これは、DNSサーバーをクライアントとして動作するということであり、このDNSクライアントに相当するものをDNSリゾルバ(単にリゾルバ)と呼びます。

DNSの仕組みを使ってIPアドレスを調べることをネーム・リゾリューション(直訳して名前解決)といいます。

リゾルバとSoketライブラリ

リゾルバの実体はSocketライブラリに入っている部品化したプログラムです。ライブラリというのは、様々なアプリケーションから利用できるように部品化したプログラムを多数集めたものを指します。つまり、すでにできあがったプログラムの部品をあつめてつなぎ合わせてアプリケーションを作ることになるので、プログラミングの作業自体を簡素化することができるし、プログラムの標準化を図ることができます。その他様々な効果を期待できるので、ライブラリの活用はソフトウエアの全分野で普及していて、実に様々なライブラリが存在しています。

ここで、Soketライブラリというのは、数多くあるライブラリの一種で、OSに組み込まれているネットワーク機能をアプリケーションから呼び出すための部品を集めたものです。リゾルバはその中に組み込まれているプログラム部品のひとつです。

  • Soketライブラリ:各OSに組み込まれているネットワーク機能を呼び出すためのプログラム集
  • リゾルバ(DNSリゾルバ):Soketライブラリの中に組み込まれているプログラムのひとつで、DNSサーバーに問い合わせてIPアドレスを調べる役割を持っている。
リゾルバを使ってDNSサーバーに追い合わせる

Soketライブラリに入っているプログラムは部品化されていて、簡単にアプリケーションから呼び出して使うことができます。このプログラムを使うことでリゾルバを呼び出します。リゾルバを呼び出せば、リゾルバがDNSサーバーにリクエストメッセージを送り、帰ってきたレスポンスメッセージの中にIPアドレスが格納されています。リゾルバはこれをとりだして、ブラウザから指定されたメモリー領域の中に書き込みます。これでIPアドレスを調べることができます。

 

ブラウザがWebサーバーにメッセージを送るときは、このメモリー領域からIPアドレスを取り出して、HTTPのリクエストメッセージと一緒にOSに渡して送信を依頼するだけになります。

  • ドメイン名からIPアドレスを調べるとき、ブラウザはSoketライブラリ内のリゾルバを利用する

 リゾルバ内部の動き

  • アプリケーションから呼び出されたリゾルバの動作するときのプログラムの流れ

 

ネットワークアプリケーションがリゾルバを呼び出すとその制御はリゾルバの内部に移ります。アプリケーションプログラムがリゾルバを呼び出す部分にさしかかり、その行を実行すると、そこでアプリケーションの動作が一次的に停止して(上図①)Soket内部にあるリゾルバが動作をはじめてアプリケーションから依頼された作業を実行します。(上図②)

プログラムの「制御が移る」とはプログラムの実行途中で、別のプログラムを呼び出すことで、呼び出し元のプログラムは動作を休止し、呼び出し先のプログラムが実行に移ることをいいます。

リゾルバに制御が移ったら、そこでDNSサーバーへリクエストメッセージが作成されます。DNSの仕様に従って、「www.lab.glass.com」というサーバーのIPアドレスを問い合わせるためのデータを作成して、DNSサーバーに送ります(上図③)

実際のメッセージ送信動作は、リゾルバが自体の実行ではなく、OS内部に組み込まれたプロトコル・スタックを呼び出して実行を依頼します。これは、リゾルバやブラウザとは違って、ネットワークに対してデータを送受信する機能を持っています。リゾルバがプロトコル・スタックを呼び出すと、今度はそこに制御が移り、そこでメッセージを送信する動作を実行して、LANアダプタを通じてDNSサーバーにメッセージが送信されます。

  • DNSサーバーへのリクエストメッセージ:HTTPはテキストでメッセージを記述しますが、DNSメッセージはバイナリ・データです。
  • プロトコル・スタック:OS内部に組み込まれたネットワーク制御用ソフトウェアで「プロトコルドライバ」「TCP/IPソフト」とも呼ばれる

メッセージを受けたDNSサーバーは、メッセージアクセス先のWebサーバーの中に登録されているので、メッセージの回答をレスポンスメッセージに返してクライアントに送り返します。(上図⑥)クライアント側に届いたレスポンスメッセージは、プロトコル・スタックを経由してリゾルバに渡され(⑦⑧)そこからIPアドレスを取り出して、アプリケーションに渡します。そして、指定されたメモリ領域にIPアドレスを格納します。

このリゾルバがIPアドレスを調べて渡すという一連の動作が終わると、プログラムの制御はアプリケーション(ブラウザ)に戻ります。これでアプリケーションはメモリ領域に格納されたIPアドレスを必要な時に取り出すことができるのです。

なお、DNSサーバーへメッセージを送信するときも、DNSサーバーのIPアドレスが必要になるのですが、これはTCP/IPの設定項目のひとつとしてコンピュータにあらかじめ設定されているので、改めて調べる必要はありません。このTCP/IPの設定方法はOSの種類によって異なりますが、Macの場合は下図の画面で設定することができます。リゾルバは個々で設定したDNSサーバーのIPアドレスにリクエストメッセージを送る。という見方をしていきます。

 

  • コンピュータの内部構造はこのように多層構造になっていて、この層ごとに多数のプログラムが存在して、それぞれに役割分担を担っています。上位層が依頼された仕事は、その層と下位層に実行を依頼しながら処理を実行していきます。

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です