共通科目情報処理(上級)、インターネットの仕組み、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/
注意: コマンドラインの説明で、 プロンプトを意味する「%」 は打たなくてもよい。 たとえば、
% exitの場合、次のように打つ。![]()
exitプロンプトは、実際には次のようにいろいろ変化する。![]()
インターネットで通信をプログラムを利用する時、 「クライアント」と「サーバ」という分けて考えることが多い。
例:
コンピュータが1台しかない場合、プログラムは1つでよい。通信をする場合 には、プログラム(コンピュータ)が2つになる。そのうちの1つのプログラ ム(またはコンピュータ)を、「クライアント」、もう1つを「サーバ」とい う。
構造化プログラミング:分かりにくいgoto文をつかわないで、わかりやすい goto文だけ使う。
図? サービスの授受によるクライアントとサーバの定義
図? 複数のクライアントによるサーバの共有
図? 通信のパタンからみたクライアントとサーバの定義
以上のように、クライアントとサーバは、いろいろな意味で使われる。これら の意味は、多くの場合、一致しているが、一致していないこともある。
通信を開始するパタンで、コンピュータ、プログラム、人間は、次の2つに分 類される。
図? 能動的なクライアントと受動的なサーバ
例:WWWサーバは、WWWクライアントから何か要求が来ない限り、ずっと 黙っている。
コンピュータを使う時には、人間が能動的になり、コンピュータが受動的にな る。
テレビを見ている時には、人間が受動的になり、テレビが能動的になる。
講義形式の授業では、サービスの授受では、教官がサーバで、学生がクライア ントになる。通信の開始の方法では、教官が能動的になり、学生が受動的にな る。
大学以上では、学生は、能動的になることが求められている。
混沌とした通信を 構造化 してわかりやすくしたものが、クライアント・サーバ・モデルである。
サーバあるシステムでは、サーバが落ちるとシステム全体が動作しなくなる。 このように複数の要素から構成されているシステムで、ある要素が故障した時 に、全体が動作しなくなるような場所を、単一障害個所(single point of failure) という。
コンピュータサイエンスでは、古くから、単一障害個所を避けるための研究が 行われてきている。もっとも成功している方法は、サーバを複数用意する方法 である。
サーバがないシステムでは、下手に作るとどの要素が故障してもシステム全体 が止まってしまうことになる。
サーバがないシステムで成功している例はある。
peer は、「対等の仲間」の意味。「通信相手」という意味もある。
検索は、サーバで索引を集めた方が速い。Web 上の検索エンジンなど。
サーバがない方法の利点(特徴)
Windows 2000 を使っている時、Z: ドライブのデータは、ファイル・サーバに 置かれている。ここにあるファイルは、どのクライアントPCを使っていても、 同じように参照できる。
デスクトップに置いたデータは、ログオン時にサーバからクライアントへコピー される。ログオフ時には、クライアントからサーバへコピーされる。大きなデー タをデスクトップに置くと、ログオンとログオフが遅くなる。
Z: ドライブに置いたデータは、ログオン時/ログオフ時にコピーされない。
この時使われる通信プロトコルをHTTP ( Hyper Text Transfer Protocol ) という。
WWW サーバには何種類もある。筑波大学教育用計算機システムで使っている WWWサーバのプログラムの名前は、Apache 。
http://www.domain/dir1/file1.htmlクライアントは、URL のうちのホスト部分を抜きだし、これと標準の 80ポート番号(80)を使って、TCP/IP のコネクションを張る。
クライアントは、HTTP で次のような要求を送る。
GET /dir1/file1.html HTTP/1.0(![]()
![]()
/usr/local/apache/htdocs/上の GET 要求に相当するファイルは、次のファイルになります。
/usr/local/apache/htdocs/dir1/file1.html
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>
200
は、エラーがなく成功したという意味。
アクセスされた日付、データの日付、データの型と長さが現れる。
Content-Type:
が text/html
ならば、
HTML で書かれたページの意味。
インラインイメージなら、
なら image/gif
や image/jpeg
になる。
このような情報は、情報そのものではなくて、情報に関する情報という意味で メタ情報(メタデータ)という。
空行の後に、実際のデータが続く。
例:ブラウザは、テキストしか受け付けない。
GET /dir1/file1.html HTTP/1.0例:日本語と英語が受け入れ可能であるAccept: text/*
![]()
GET /dir1/file1.html HTTP/1.0例:ブラウザの種類は、MozillaAccept-Language: Japanese, en
![]()
GET /dir1/file1.html HTTP/1.0User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP; rv:1.7.10) Gecko/20050716
![]()
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トラブルが起きた時には、このログを見て原因を探る
サーバ icho (OS は Unix) に接続してログインする。
人間とコンピュータの対話方法 以下にあるいくつかの命令を試す。
終了は、exit 。
% exit![]()
% less /usr/local/apache/htdocs/index.html![]()
http://www.ipe.tsukuba.ac.jp/
を開く。
/usr/local/apache/logs/access_log
というファイルにためられる。
次のようにして観察する。
http://www.ipe.tsukuba.ac.jp/ のページは、サーバ (icho) 上の
/usr/local/apache/htdocs/ 以下にある。次のようにして観察する。
% exit![]()
% tail -f /usr/local/apache/logs/access_log![]()
http://www.ipe.tsukuba.ac.jp/
を開く。
余裕があれば、/usr/local/apache/logs/error_log も観察しなさい。
egrep コマンドを使えば、特定の文字列を含む行を検索し表示することができる。
% egrep yshinjo /usr/local/apache/logs/access_log![]()
% exit![]()
% telnet www.ipe.tsukuba.ac.jp 80![]()
GET /index.html HTTP/1.0(![]()
![]()
Windows 2000 のコマンドプロンプトの中で telnet コマンドを使う方法。
set local_echoset codeset Japanese EUC
![]()
open www.ipe.tsukuba.ac.jp 80![]()
GET /index.html HTTP/1.0(![]()
![]()
z:\>nslookup>exit
z:\>
記号 > が出ている時には、nslookup プログラム特有の命令が使 える。
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
![]()