前回は、サーバー側のLANの機能であるファイアウォールと負荷分散についてまとめた。ここでは、Webサーバーに到着し、応答データがWebブラウザに戻る過程について説明する。
1 サーバーの概要
クライアントとサーバーの違い
ハードウェアやOSの部分は違うものもあるが、ネットワークに関する部分は同じである。主な違いは以下の通り。1)アプリケーションから呼び出すSocketライブラリのプログラム部品が異なる。2)サーバーのアプリケーションは同時に多数のクライアント・パソコンとやり取りする。
サーバー・アプリケーションの構造
サーバー・アプリケーションは、クライアントごとに別の部分でデータをやりとりする。サーバーOSはマルチタスクあるいはマルチスレッドという機能によって、多数のプログラムを同時並行して動かすことができる。マルチタスク(マルチプロセス)とは、OSが備える機能のひとつで、複数のタスク(プログラム)を同時並行して実行する機能のこと。マルチスレッドとは、複数のスレッドを同時並行して実行させる機能のこと。タスクは一つひとつが別のプログラムとして扱われるのに対して、スレッドは1つのプログラム中をいくつかの部分に分けたものとして扱われる。
サーバー側のソケットとポート番号
アプリケーションとプロトコル・スタックの間で、ソケットを識別するためにディスクリプタを使う理由は、以下の2つである。1)接続待ちのソケットにはクライアント側のIPアドレスとポート番号が記録されていないから。2)ディスクリプタという1つの情報で識別する方が簡単だから。
2 サーバーの受信動作
LANアダプタで受信信号をデジタル・データに変換
LANアダプタのMAC部分が、パケットを信号からデジタル・データに戻し、FCSをチェックし、バッファ・メモリーに置く。そして、割り込みという方法を使って、LANアダプタからCPUにパケットの到着を知らせる。そしてLANドライバが、MACヘッダーからプロトコルを判断しプロトコル・スタックにパケットを渡す。
IP担当部分の受信動作
プロトコル・スタックのIP担当部分は、IPヘッダーをチェックし、1)自分宛のものか判断し、2)フラグメンテーションによるパケットの分割の有無を調べた後、3)TCP担当部分あるいはUDP担当部分にパケットを渡す。
TCP担当部分が接続パケットを受信したときの動き
パケットが接続動作のものだった場合、TCP担当部分は、1)TCPヘッダーのSYNのコントロール・ビットを確認した後、2)宛先ポート番号を調べ、3)該当する接続待ちのソケットをコピーして新しいソケットを作成し、4)送信元のIPアドレスやポート番号などを記録する。
TCP担当部分がデータパケットを受信したときの動き
データのパケットを受信した場合、TCP担当部分は、1)届いたパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号から該当するソケットを判断し、2)データの断片をつなぐようにして受信バッファに保管し、3)クライアントに対してACKを返す。
TCP担当部分の切断動作
切断動作はクライアント側と同じである。しばらく待ってソケットを抹消する。
3 Webサーバー・ソフトがリクエスト・メッセージの意味を解釈して要求に応える
問い合わせのURIを実際のファイル名に変換
リクエスト・メッセージには、メソッドという一種のコマンドと、データ源を表すURIというファイルのパス名のようなものが書いてあり、その内容に従ってデータをクライアントに送り返す。また、クライアントから見えるWebサーバーのディレクトリは実際の構成とは違う。
CGIプログラムを起動する場合
CGI(Common Gateway Interface)プログラムの場合、HTTPのリクエスト・メッセージの中にプログラムに処理させるデータを入れて、ブラウザからWebサーバーに送るのが一般的である。Webサーバー・ソフトは、パケットを組み立ててデータを復元すると、その中で指定されたプログラムを起動する(OSに依頼)。そして、Webサーバーは起動したプログラムにデータを渡す。
Webサーバーで行うアクセス制御
アクセス制御とは、条件によってアクセス動作の可否を設定する機能である。会員制の情報提供サービスなどで、特定のユーザーにだけアクセスを許可する場合に使う。Webサーバーで設定する条件は、主に次の3つである。1)クライアントのIPアドレス、2)クライアントのドメイン名、3)ユーザー名とパスワード。パスワードを確認するときもHTTPを利用する。
レスポンス・メッセージを送り返す
最初にクライアントがリクエスト・メッセージをWebサーバーに送る動きと同じ考え方である。
4 ブラウザがレスポンス・メッセージを受け取り画面に表示
レスポンスのデータ・タイプを見て中身を判断
データの種類を判断する原則は、レスポンス・メッセージの先頭部分にある「Content-Type」というヘッダー・フィールドの値で判断するのが原則である。例えば、text、image、audio、video、model、application、message、multipartなどである。その後、「Content-Encoding」というヘッダー・フィールドの値も調べる(MIMEで規定)。他の判断材料も使って総合的にデータの種類を判断することもある。
ブラウザ画面にWebページを表示
データの種類が判明したら、その種類に応じて画面表示のプログラムを呼び出して、データを表示させるだけである。例えば、HTMLドキュメントの場合、文章のレイアウトやフォントの種類などを記したタグが埋め込まれているため、そのタグの意味を解釈して文章をレイアウトして画面に表示する。画像などを埋め込んである場合も同じである。ワードやエクセルなどの場合、アプリケーションを呼び出して表示する。これでブラウザは表示動作を終わり、ユーザーが次のアクションを取るのを待つ。
最後に
パケットがWebサーバー・マシンにたどり着いたら、パケットの中身を取り出し、元のリクエスト・メッセージを復元して、Webサーバー・アプリケーションに渡す(OSのプロトコル・スタックの役割)。次に、Webサーバー・アプリケーションがリクエスト・メッセージの意味を読み取り、そこに書いてある指示内容に従ってデータをレスポンス・メッセージに入れてクライアントに送り返す。そして、レスポンスがクライアントに返ってきたら、そこからページのデータを取り出して画面に表示する。以上が、Webサーバーとブラウザの働きである。
6回にわたり、戸根 勤著「ネットワークはなぜつながるのか」についてまとめた。著書で取り上げられている主なキーワードは79個にわたる。ブラウザからサーバーに要求が送られ、その応答がブラウザに返るまでを、1)Webブラウザ、2)プロトコル・スタック、LANアダプタ、3)ハブ、スイッチ、ルーター、4)アクセス回線、プロバイダ、5)ファイアウォール、キャッシュ・サーバー、6)Webサーバーという流れで解説している。ネットワークについて理解を深めたい方には、ぜひともおすすめする。
![]() |