World Wide Web の仕組み(1)、クライアント・サーバ・モデル

共通科目情報処理(上級)、インターネットの仕組み、2005年12月20日

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/ipe/inet-2005/2005-12-20
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
http://www.ipe.tsukuba.ac.jp/~yshinjo/

■復習

DNSの仕組み IPアドレスが変更できる。同じネットワークの中で重ならないように注意する 必要がある。

注意: コマンドラインの説明で、 プロンプトを意味する「%」 は打たなくてもよい。 たとえば、

% exit [←]
の場合、次のように打つ。
exit[←]
プロンプトは、実際には次のようにいろいろ変化する。 説明では、プロンプトが「% 」であると仮定して書かれている。

■今日の重要な話

次の言葉の意味を理解すること。

■目標のレビュー

■クライアントとサーバ

インターネットで通信をプログラムを利用する時、 「クライアント」と「サーバ」という分けて考えることが多い。

例:

コンピュータが1台しかない場合、プログラムは1つでよい。通信をする場合 には、プログラム(コンピュータ)が2つになる。そのうちの1つのプログラ ム(またはコンピュータ)を、「クライアント」、もう1つを「サーバ」とい う。

◆クライアントとサーバに分けて考える意義

混沌とした通信を「構造化」してわかりやすくする。

図? プロセス5つ、構造化されていない通信パタン

図? 構造化されていないもの

図? プロセス5つ、構造化された通信パタン

図? 構造化されたもの

構造化プログラミング:分かりにくいgoto文をつかわないで、わかりやすい goto文だけ使う。

◆サービスの授受

元々の意味
クライアント(client)
サービスを受ける方、顧客
サーバ(server)
サービス(service)を提供する方

図? サービスの授受によるクライアントとサーバの定義

図? サービスの授受によるクライアントとサーバの定義

◆利用者数

サービスを提供する方は、1つのプログラム(コンピュータ)で複数の利用者 の面倒をみる。その結果、1台のサーバに複数のクライアントがつながる。

クライアント
一人で使うもの
サーバ
複数人で共有するもの

図? 複数のクライアントによるサーバの共有

図? 複数のクライアントによるサーバの共有

◆通信パタン

TCP/IP では、通信するプログラムとプログラムの間は、電話で会話をするよ うに通信が行われる。両方同時に話をすることは、(可能ではあるが)あまり 行われない。次のようなことを、繰り返すことになる。
クライアント
先に要求を送る、後で結果を受け取る
サーバ
先に要求を受け取る、後で結果を返す

図? 通信のパタンからみたクライアントとサーバの定義

図? 通信のパタンからみたクライアントとサーバの定義

◆接続方法

TCP/IP の通信では、通信を始める前に、まず、通信路を作る作る必要がある。 これは、電話で話をする前に、まず、電話をかける操作を行うことと似ている。
クライアント
電話を掛ける方に相当する
サーバ
電話を待っている方

以上のように、クライアントとサーバは、いろいろな意味で使われる。これら の意味は、多くの場合、一致しているが、一致していないこともある。

◆能動的・受動的

通信を開始するパタンで、コンピュータ、プログラム、人間は、次の2つに分 類される。

能動的(active)
ほっといても自分でメッセージを発信し始める
受動的(passive)、受け身
何か言われると答えるが、自分ではメッセージを発信し始めることはない
クライアントとサーバから作られたシステムは、クライアントが能動的になり、 サーバは、受動的になることが多い。

図? 能動的なクライアントと受動的なサーバ

図? 能動的なクライアントと受動的なサーバ

例:WWWサーバは、WWWクライアントから何か要求が来ない限り、ずっと 黙っている。

コンピュータを使う時には、人間が能動的になり、コンピュータが受動的にな る。

テレビを見ている時には、人間が受動的になり、テレビが能動的になる。

講義形式の授業では、サービスの授受では、教官がサーバで、学生がクライア ントになる。通信の開始の方法では、教官が能動的になり、学生が受動的にな る。

大学以上では、学生は、能動的になることが求められている。

◆Peer to Peer (P2P)

P2P (Peer to Peer) という用語の意味は、怪しい。

混沌とした通信を 構造化 してわかりやすくしたものが、クライアント・サーバ・モデルである。

サーバあるシステムでは、サーバが落ちるとシステム全体が動作しなくなる。 このように複数の要素から構成されているシステムで、ある要素が故障した時 に、全体が動作しなくなるような場所を、単一障害個所(single point of failure) という。

コンピュータサイエンスでは、古くから、単一障害個所を避けるための研究が 行われてきている。もっとも成功している方法は、サーバを複数用意する方法 である。

サーバがないシステムでは、下手に作るとどの要素が故障してもシステム全体 が止まってしまうことになる。

サーバがないシステムで成功している例はある。

peer は、「対等の仲間」の意味。「通信相手」という意味もある。

検索は、サーバで索引を集めた方が速い。Web 上の検索エンジンなど。

サーバがない方法の利点(特徴)

サーバがない方法の問題点 Napster

Napster は、学問的には、特に目立った新技術はない。

■ファイル・サーバ

Windows 2000 を使っている時、Z: ドライブのデータは、ファイル・サーバに 置かれている。ここにあるファイルは、どのクライアントPCを使っていても、 同じように参照できる。

デスクトップに置いたデータは、ログオン時にサーバからクライアントへコピー される。ログオフ時には、クライアントからサーバへコピーされる。大きなデー タをデスクトップに置くと、ログオンとログオフが遅くなる。

Z: ドライブに置いたデータは、ログオン時/ログオフ時にコピーされない。

■HTTPとApache

WWW ページのデータは、 WWW サーバ ( httpd ) が保存している。 WWW クライアント(ブラウザ)は、WWW サーバから WWW ページのデータを取り寄せる。

この時使われる通信プロトコルをHTTP ( Hyper Text Transfer Protocol ) という。

WWW サーバには何種類もある。筑波大学教育用計算機システムで使っている WWWサーバのプログラムの名前は、Apache

■Apache の動作

起動時に設定ファイルを読み込み、要求を待つための TCP/IPのポートをいくつか(標準ではポー ト番号80番)を作成する。

図? 図? Apache の動作

図? Apache の動作

◆HTTP

WWW のクライアント(普通はWWWブラウザ)からの要求は、 HTTP によりサーバに伝えられる。 普段は、これら のプロトコルを直接人間が手で打ち込む必要はないが、WWWサーバの設 定を行なう過程では、確認のために telnet コマンドで接続して、直接手で打つ。

◆HTTPの要求

プロトコルは、実際には比較的簡単である。 よく使われるクライアントからサーバに送られる要求 ( メソッド(method) ) は、2種類だけ。 例:次のような URL のページをアクセスする。
http://www.domain/dir1/file1.html
クライアントは、URL のうちのホスト部分を抜きだし、これと標準の 80ポート番号(80)を使って、TCP/IP のコネクションを張る。

クライアントは、HTTP で次のような要求を送る。

GET /dir1/file1.html HTTP/1.0[←]
[←]
([←] (Return, Enter)は、2つ必要。)

◆ファイルとの対応

WWWサーバは、普通は、このファイルは、あるディレクトリを起点にしたファ イル名になっている。 この起点となるディレクトリを ドキュメント・ルート・ディレクトリ(document root directory) という。 このディレクトリは、Apache では、標準で次のようになる。
/usr/local/apache/htdocs/
上の GET 要求に相当するファイルは、次のファイルになります。
/usr/local/apache/htdocs/dir1/file1.html

◆応答

Apache は、このファイルを開き、内容を読み込む。そして、こ の内容を、HTTP の応答(response)として、クライアントに返す。
HTTP/1.1 200 OK
Date: Mon, 19 Dec 2005 14:02:34 GMT
Server: Apache/1.3.31 (Unix) mod_ssl/2.8.19 OpenSSL/0.9.7c
Last-Modified: Thu, 01 Dec 2005 06:41:26 GMT
ETag: "91a0f-145a-438e9b16"
Accept-Ranges: bytes
Content-Length: 5210
Connection: close
Content-Type: text/html

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
<title>S.I.P.C. 教育用計算機システム</title>
</head>
....
</body>
</html>

◆ステータス、メタデータ、データ

HTTP の応答の第一行は、ステータス(成功か失敗かを表す)。 200 は、エラーがなく成功したという意味。

アクセスされた日付、データの日付、データの型と長さが現れる。 Content-Type:text/htmlならば、 HTML で書かれたページの意味。 インラインイメージなら、 なら image/gifimage/jpeg になる。

このような情報は、情報そのものではなくて、情報に関する情報という意味で メタ情報(メタデータ)という。

空行の後に、実際のデータが続く。

◆HTTP要求のオプション

HTTP の要求の最初の行は、必須のパラメタ(引数(ひきすう))で、 要求行(request line)と呼ばれる。 それに続き、付加的なパラメタ(オプション)を渡すことができる。

例:ブラウザは、テキストしか受け付けない。

GET /dir1/file1.html HTTP/1.0[←]
Accept: text/*
[←]
例:日本語と英語が受け入れ可能である
GET /dir1/file1.html HTTP/1.0[←]
Accept-Language: Japanese, en
[←]
例:ブラウザの種類は、Mozilla
GET /dir1/file1.html HTTP/1.0[←]
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP; rv:1.7.10) Gecko/20050716
[←]

◆アクセスログ

クライアントからどのようなアクセスが行なわれたかは、 アクセス・ログ(access log) ( 転送ログ(transfer log) ) に記録される。たとえば、次のような情報が記録される。
192.168.10.20 - - [05/Dec/2005:01:08:11 +0900] "GET /dir1/file.html HTTP/1.0" 200 1622
このように、ホストの IP アドレス、日付、要求行、ステータス、転送された バイト数などが記録される。

エラーが起きた時や起動・終了の情報は、 エラー・ログ(error log) に記録される。

エラー・ログの例:

[Tue Dec  5 00:47:26 2005] [notice] Apache/1.3.3 (Unix) configured -- resuming normal operations
[Tue Dec  5 01:27:52 2005] [notice] httpd: caught SIGTERM, shutting down
[Tue Dec  5 05:57:11 2005] [error] [client 127.0.0.1] File does not exist: /usr/local/apache/htdocs/printenv
[Tue Dec  5 05:57:55 2005] [error] [client 127.0.0.1] Options ExecCGI is off in this directory: /usr/local/apache/htdocs/printenv.cgi
トラブルが起きた時には、このログを見て原因を探る

■実習

◆Telnet(Tera Term) による遠隔ログイン

遠隔ログインにより、サーバに接続し、文字による対話(キーボードと文字ディ スプレイ)で利用可能なサービスを利用する。 Windows 2000 では、デスクトップにある Telnet (Tera Term) を実行する。

サーバ icho (OS は Unix) に接続してログインする。

人間とコンピュータの対話方法 以下にあるいくつかの命令を試す。

終了は、exit [←]

◆WWW サーバ上のデータの観察

http://www.ipe.tsukuba.ac.jp/ のページは、サーバ (icho) 上の /usr/local/apache/htdocs/ 以下にある。次のようにして観察する。
  1. telnet (Tera Term) でサーバ (icho) に接続してログインする。 ユーザ名とパスワードを打つ。 以下の一連の作業が終わったら、最後に、ログインを解除する(ログアウト) する。そのためには、exit コマンドかlogout コマンドを使う。
    % exit [←]
    
  2. less コマンドを実行する。less コマンド終了は、q キーを押す。
    % less /usr/local/apache/htdocs/index.html [←]
    
  3. WWW ブラウザ(Netscape など)を実行して、 http://www.ipe.tsukuba.ac.jp/を開く。
  4. WWW ブラウザで、ページのソース(HTML) を表示させる。Netscape なら 「表示」メニューから「ページのソース」を選ぶ。
  5. 2. と 4. を比較する。
Internet Explore の場合、文字化けしてソース・プログラムがうまく表示で きないかもしれない。

◆WWW サーバに残されたアクセスログの観察

アクセスログは、サーバ上の /usr/local/apache/logs/access_log というファイルにためられる。 次のようにして観察する。 http://www.ipe.tsukuba.ac.jp/ のページは、サーバ (icho) 上の /usr/local/apache/htdocs/ 以下にある。次のようにして観察する。
  1. telnet (Tera Term) でサーバ (icho) に接続してログインする。 ユーザ名とパスワードを打つ。 以下の一連の作業が終わったら、最後に、ログインを解除する(ログアウト) する。そのためには、exit コマンドかlogout コマンドを使う。
    % exit [←]
    
  2. 次のように tail コマンドを実行する。tail コマンド終了は、^C キー (Controlキーを押しながら C キーを押す)。
    % tail -f /usr/local/apache/logs/access_log [←]
    
  3. WWW ブラウザ(Netscape など)を実行して、 http://www.ipe.tsukuba.ac.jp/を開く。
  4. 「再読込み」を行う。
  5. データが流れていく時には、適当な所で ^C で tail コマンドを終了させる。
  6. 自分のコンピュータのホスト名が表示されるかを見る。telnet (Tera Term) のスクロール機能を使う(注意: telnet の中では、マウスはうまく働か ない。基本的にはキーボードからの文字しかサーバに送られない。)。
どんなデータがサーバに残されるか。

余裕があれば、/usr/local/apache/logs/error_log も観察しなさい。

egrep コマンドを使えば、特定の文字列を含む行を検索し表示することができる。

% egrep yshinjo /usr/local/apache/logs/access_log [←]

◆HTTP による WWW ページのアクセス

telnet コマンドを使って、WWW サーバにアクセスしてページを取り寄せる。 telnet コマンドには、Windows 2000 の Tera Term ではなく、次のいずれか を使う。(両方ではなくいいずれか)

サーバの telnet を使う方法。

  1. telnet (Tera Term) でサーバ (icho) に接続してログインする。 ユーザ名とパスワードを打つ。 以下の一連の作業が終わったら、最後に、ログインを解除する(ログアウト) する。そのためには、exit コマンドかlogout コマンドを使う。
    % exit [←]
    
  2. 次のように telnet コマンドを実行する。telnet コマンドの強制終了は、 ^] キー(Controlキーを押しながら ] キー)を押した後に、「quit リターン」 と打つ。
    % telnet www.ipe.tsukuba.ac.jp 80 [←]
    
  3. 「Escape character is '^]'.」と表示されたら、次のように打つ。
    GET /index.html HTTP/1.0[←]
    [←]
    
    ([←] (Return, Enter)は、2つ必要。)
  4. 画面に WWW ページのデータが現れるのを確認する。 画面の最後に、 画面に「Connection closed by foreign host.」と表示され、 telnet コマンドを打つ以前の状態に戻っている。
これができたら、2. で、接続する WWW サーバを変えたり、3. で GET するファ イルの名前を変えてみる。icho の場合、ファイルの名前として、 「/~s012345/index.html」とすると、個人の ホーム・ページが表示できる。

Windows 2000 のコマンドプロンプトの中で telnet コマンドを使う方法。

  1. スタート−>プログラム−>アクセサリ−>コマンドプロンプトと選択し、 コマンドプロンプトを動作する。
  2. その中で、telnet [←] と打つ。
  3. 「 Microsoft Telnet> 」と表示されたら、次のように打つ。
    set local_echo[←]
    set codeset Japanese EUC[←]
    
  4. 「Microsoft Telnet>」に対して、open に 続き、サーバ名とポート番号 80 を打つ。
    open www.ipe.tsukuba.ac.jp 80[←]
    
  5. 画面が消えたら、次のように HTTP の命令を打つ。
    GET /index.html HTTP/1.0[←]
    [←]
    
    ([←] (Return, Enter)は、2つ必要。)
  6. 画面に WWW ページのデータが現れるのを確認する。
  7. 画面に「ホストとの接続が切断されました。続行するには何かキーを押して 下さい...」と表示されたら、何かキーを押す。 すると open コマンドを打つ以前の状態に戻っている。
  8. telnet コマンドを終了させ、コマンドプロンプトの 状態に戻すには、 「Microsoft Telnet>」に対して、quit リターンと打つ。
これができたら、4. で、接続する WWW サーバを変えたり、5. で GET するファ イルの名前を変えてみる。icho の場合、ファイルの名前として、 「/~s0401234/index.html」とすると、個人の ホーム・ページが表示できる。

◆DNS 名前サーバとの対話

Unix (Linux) または、Windows 2000 のコマンドプロンプトから nslookup プログラムを実行する。終了は、exit。

z:\>nslookup[←]
>exit[←]
z:\>

記号 > が出ている時には、nslookup プログラム特有の命令が使 える。

次の IP アドレスを打ち、ドメイン名に変換しなさい。

◆複数の名前サーバ

ipe.tsukuba.ac.jp ドメインの名前サーバが2つあることを確かめる。 NS レコード(Name Server Record)を調べる。
z:\>nslookup[←]
>set type=ns[←]
>ipe.tsukuba.ac.jp[←]
名前サーバを切替えてみる
z:\>nslookup[←]
>server 130.158.65.2[←]
>ipe.tsukuba.ac.jp[←]
>server 130.158.65.3[←]
>ipe.tsukuba.ac.jp[←]

↑[もどる] ←[12月13日] ・[12月13日] →[1月10日]
Last updated: 2005/12/20 16:32:57
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>