ブラウザにURLを入力してからホームページが表示されるまでの流れを超ザックリと並べました。
HTTPリクエスト・メッセージを作成する
URLの入力等の動作が行われたら、まずはブラウザがHTTPリクエスト・メッセージを作成する。
次は、それをOSに依頼してアクセス先のWebサーバーに向けて送信してもらう。
が、、OSに送信を依頼するときは、ドメイン名ではなくIPアドレスでメッセージを届ける相手を指定しなければいけない。
WebサーバーのIPアドレスをDNSサーバーに問い合わせる
DNSリゾルバ(Socketライブラリに入っているプログラム)を呼び出すと、リゾルバがDNSサーバーに問い合わせのメッセージを送ってくれる。
応答が返ってくると、リゾルバはその中からIPアドレスを取り出して、ブラウザから指定されたメモリー領域の中に書き込む。
→ブラウザは上で受け取ったIPアドレスをメモリー領域から取り出して、HTTPのリクエスト・メッセージと一緒にOSに渡す。
*DNSサーバーへリゾルバがメッセージを送信する時も、DNSサーバーのIPアドレスが必要。
ただこれはTCP/IP設定項目のひとつとしてコンピューターに予め設定されている。後から変更することも可能。
目的のDNSサーバーに辿り着くまでの流れ
例えばwww.ken.engineer.com
- 最寄りのDNSサーバー
- ルート・ドメイン
- com
- engineer
- ken
プロトコル・スタックにメッセージ送信を依頼する
OS内部のプロトコル・スタックにメッセージ送信動作を依頼するときは、Socketライブラリのプログラム部品を決められた順番で呼び出す。
データの送受信動作は次の4つのフェーズに分かれている
- ソケットを作る(Socketライブラリのsocketというプログラム部品を呼び出す→ディスプリタが返ってくる。)
- サーバー側のソケットにパイプを繋ぐ(connectとうプログラム部品を呼び出す、IPアドレス、ポート番号、ディスプリタの情報を使って接続する)
- データを送受信する(writeを呼び出す、ディスプリタとHTTPのリクエストメッセージなどの送信データを指定する。その後readを呼び出して、受信料する。)
- パイプを外してソケットを抹消する(closeを呼び出す)
*ディスプリタとはソケットを識別するもの(例えばブラウザでウィンドウを二つ同時に開く場合など、1台のコンピューターの中に複数のソケットが存在することがあるので)
*ポート番号は接続相手側からソケットを識別するために使う
ハブとスイッチ、ルーター
-
コンピューターから出てきた信号は、ケーブルを伝わってリピーター・ハブの中を流れる
-
スイッチング・ハブのパケット中継動作。
スイッチング・ハブは信号を流すのではなく、パケットの信号を受信してデジタル・データの姿に戻し、再び信号に直して送信するという動作によってパケットを運ぶ。 -
ルーターのパケット中継動作
スイッチング・ハブはイーサネットの仕組みに基づいて作られた機器であるが、ルーターはIPの考え方に基づいて作られている。 -
ルーターの付加機能
ルーターには、プライベート・アドレスをグローバル・アドレスに書き換えるアドレス変換機能や、危険なパケットを遮断するパケット・フィルタリング機能を利用するのが通例。
*家庭のルーターは、リピーター・ハブやスイッチング・ハブを内臓していることが多い。
アクセス回線を通ってインターネットの内部へ
- ADSL技術を用いたアクセス回線の構造と動作
- 光ファイバを用いたアクセス回線(FTTH)
- アクセス回線で用いるPPPとトンネリング
- プロバイダの内部
- プロバイダを跨って流れるパケット
サーバー側
- アクセス先となるサーバーの所在地には大きく3パターンある。
- ルーターで直結する。(社内LAN)
- ファイアウォールで分離する。(社内LANと公開サーバー用LANで分離する)
- 接続事業者のデータ・センターに設置する。
- ファイアーウォールとは?
- 関所の役割を果たすもの。特定のサーバー上で動くアプリケーションにアクセスするパケットだけを通し、それ以外のパケットを遮断する役割を持っている。宛先IPアドレス、送信元IPアドレス、ポート番号、TCPコントロール・ビット(接続方向)等で制限をかける。
- 複数サーバーにリクエストを振り分けてサーバーの負荷を分散する
- DNSサーバーに同じ名前でWebサーバーを複数登録する。この方法をラウンドロビンという。
- 負荷分散装置(ロードバランサー)を使う。
- キャッシュ・サーバーを利用してサーバーの負荷分散を行う。
- プロキシという仕組みを使って、データをキャッシュするサーバーのこと。
- プロキシとはWebサーバーとクライアントの間に入って、Webサーバーへのアクセス動作を仲介する役割を持つもの。
サーバーにリクエストが到着
- サーバーの受信動作
- プロトコル・スタックが受信したメッセージを、Socketライブラリを通じてWebサーバー・アプリケーションに渡す。
- Webサーバー・ソフトがリクエスト・メッセージの意味を解釈して要求に答える。
3.ブラウザがレスポンス・メッセージを受け取り画面に表示