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

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

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

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

■復習

DNSの仕組み

■今日の重要な話

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

■目標のレビュー

■クライアントとサーバ

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

例:

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

元々の意味

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

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

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

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

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

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

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

TCP/IP では、通信するプログラムとプログラムの間は、電話で会話をするよ うに通信が行われる。両方同時に話をすることは、(可能ではあるが)あまり 行われない。次のようなことを、繰り返すことになる。

クライアント
先に要求を送る、後で結果を受け取る
サーバ
先に要求を受け取る、後で結果を返す

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

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

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

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

◆能動的・受動的

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

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

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

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

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

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

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

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

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

■ファイル・サーバ

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, 04 Jan 2002 12:53:07 GMT
Server: Apache/1.3.3
Last-Modified: Sun, 31 May 2002 05:35:29 GMT
Content-Length: 1234
Content-Type: text/html

<HTML>
<HEAD>
<TITLE>Univ of Tsukuba</TITLE>
</HEAD>
<BODY>

<H1>Welcome</H1>
....
</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.3) Gecko/20040910
[←]

◆アクセスログ

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

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

エラー・ログの例:

[Tue Jan  5 00:47:26 2002] [notice] Apache/1.3.3 (Unix) configured -- resuming normal operations
[Tue Jan  5 01:27:52 2002] [notice] httpd: caught SIGTERM, shutting down
[Tue Jan  5 05:57:11 2002] [error] [client 127.0.0.1] File does not exist: /usr/local/apache/htdocs/printenv
[Tue Jan  5 05:57:55 2002] [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 も観察しなさい。

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

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

サーバの telnet を使う方法。

  1. telnet (Tera Term) でサーバ (icho) に接続してログインする。 ユーザ名とパスワードを打つ。 以下の一連の作業が終わったら、最後に、ログインを解除する(ログアウト) する。そのためには、exit コマンドかlogout コマンドを使う。
    % exit [←]
    
  2. 次のように telnet コマンドを実行する。tail コマンドの強制終了は、 ^] キー(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[←]

◆課題5 目標に関する中間報告

個々の目標に関して Wiki による講義の掲示板に、中間報告を行いなさい。 具体的に調べた事柄を列挙しなさい。 締め切りは、2005年1月17日15:00とする。


↑[もどる] ←[12月13日] ・[12月20日] [1月17日]
Last updated: 2004/12/20 17:48:38
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>