コンピュータネットワーク基礎
2003.6.6

Back to index page

  1. 本日の作業内容



  2. WWW

    • WWWサーバ

      今日の「インターネット」の普及はWWWによるところが大きいでしょう.それま で,電子メールやFTP,また,Gopherなどが使用されていましたが,テキストに 埋め込まれた「ハイパーリンク」の機能により参照先に自由に移動でき,画像も 扱うことができる機能により,WWWは多くの人の注目を集め,またたくまにネッ ト利用の中心を担うようになってきました.今では,音声や動画像も扱うことが でき,CGIによりインタラクティブな利用法も可能です.現在も,次々と新しい 技術が開発されており,今後も発展を続けていくことでしょう.

      ここでは,その基本的な仕組みに限定し,WWWにおいて,サーバとクライアント がどのような仕事をしているのか,自分で実際にネットワークプロトコルを試し てみて,実感することとします.そのための最初の操作は,HTTP (Hyper Text Transfer Protocol) によるサーバとの通信です.

      教室のパソコンでWWWにアクセスする際にはNetscape NavigatorもしくはMozillaを使用すること が最も多いと思われます.それ以外にも方法はありますが,画像表示や表の再現 などを考えると,他の選択肢は機能が少し貧弱です.このようなNavigatorのよ うなアプリケーションをクライアント(顧客)といい,ページのデータを提供する アプリケーションをHTTPサーバと言います.(サーバとは「仕える者」の意味です から,現実世界ではクライアントの方が「偉い」のですが,ネットワークのクラ イアント/サーバシステムではサーバの方が威張っています.)

      また,上記のようなサーバプログラムは表だって動く必要はなく,目につかない ところでひっそりと接続を待ち受けて処理を行います.そのような処理を「バッ クグラウンド処理」と言いますが,サーバプログラムについては,特に,「デー モン」という言葉が用いられます.デーモンとはdaemonのことで,ギリシャ神話 にある神々と人間の間に介在する二次的な神のことです.demonと語源は同じで すが,意味が少し変ってきますので,綴りには注意してください.

    • WWWクライアント

      一方,クライアントプログラムの作業はサーバからダウンロードしたページデータを解 釈して,画面上に整形して表示すること,リンクとして埋め込まれているURLを クリックするとそのページにアクセスすることが主な仕事です.その際にクライ アント側がサーバに対して要求している項目は種々ありますが,実際に使用され ているものはわずかです.以下に代表的な例を示します.

      GET情報を得る
      HEADヘッダのみ得る
      POSTデータを送る
      PUTデータを格納するように要求する

      クライアントが送信するのは,これらのメソッドとHTTPのバージョンです.また, 要求などの命令の区切りは「改行」になりますが,HTTPではDOSのような \r\n が使われます.要求の終了は,改行のみの行により行います.

    • 応答メッセージ

      サーバ側はクライアントに対して返答しますが,その際のメッセージのコード番 号が重要な意味を持っています.以下に代表的な応答コードの意味を示します.

      200番台成功
      400番台クライアントのエラー
      500番台サーバのエラー

      たとえば,このページの最後の方には宿題ページへのリンクが用意されています が,実際にアナウンスの時間になるまでページ自体は用意されません.そうする と,リンクをクリックしたときにはエラーが表示されます.LinuxのNetscapeで はページに大きく「Not Found」と表示されますが,ウィンドウの枠にあるタイ トルには「404 Not Found」と表示されています.上の400番台のエラーはそのよ うなときに登場します.ちなみに,WindowsのInternet Explorerでは図1のよう なページが表示され,エラー番号も良く見ると記述されています.

      図1 404エラーの画面

      Mozillaでは残念ながらそのようなエラーコードは表示されず,アラートウィン ドウが表示されるだけのようです.

      ヘッダ情報として,さらに,サーバ側からページのデータとして返してくるデータ本体のサイズも伝え られます.それは,

      Content-Length:

      のような行で表示されます.クライアントが読み込むべきページのデータ量にな るものです.これらの情報が含まれる部分を「ヘッダ」と呼び,空行 (改行だけ の行) の後で,サーバは本体を送信します.

    • 実際の処理確認

      上記の流れを試すために,以下のスクリプトを作成して実行してみましょう.こ のスクリプトは,まつも とゆきひろ/石塚圭樹著,「オブジェクト指向スクリプト言語Ruby」(ASCII出版 局)のp.89に紹介されているものの誤植を訂正したものです.

      
      require 'socket'
      
      host = "localhost"
      port = 80
      path = "/"
      
      if %r!http://(.*?)(?::(\d+))?(/.*)! =~ ARGV[0]
        host = $1
        port = Integer($2) if $2
        path = $3
      end
      
      s = TCPsocket::open(host, port)
      s.print "GET #{path} HTTP/ 1.0\r\n\r\n"
      print s.read
      

      使用しているのはGETメソッドだけです.ダウンロードして使ってみましょう.これをたとえば,client.rb という名前で保存したとすると,

      $ ruby client.rb http://www.ecs.shimane-u.ac.jp/

      や,もっと手近なサーバであれば,

      $ ruby client.rb http://localhost/~nawate/

      のようにして使用します.自分の好きなページのデータを表示させてみてくださ い.

      上のスクリプトは単純にデータを取得するだけですので,画面にはヘッダとHTML データがそのまま出てきます.ヘッダ部分を見ると上で説明した内容が記述され ているのが分かると思いますが,ページのデータが多い場合には画面がスクロー ルアウトして見えないかも知れません.パイプライン処理により結果を less などのページャに流すと見やすくなります.

    • コンテンツの閲覧

      このようなページデータを受け取ったあと,見やすい形に整形する機能が通常の クライアントに備わっていますが,そこではHTML言語で記述された内容を解釈し ているだけです.とりあえず,上記のままではページ内容を見にくいので,スク リプトを少しだけ改良して,ブラウザみたいな仕事をさせてみます.最後の 行を次のような2行に変更してみましょう.

      
      data = s.read
      print data.gsub(/<.*>/,' ')
      

      先ほどと同じようにパイプライン処理で less を通して見てください. 少しはWWWクライアントらしくなったでしょうか.

    • 保護モード

      また,先ほどのエラー検出に関係してファイルの保護モードとの関係を試してみ ましょう.そのために,自分のWWWページを作成します.次のように作業してく ださい.

      $ mkdir ~/public_html

      によりディレクトリを作成したら,このリンク先をそのディレクトリに保存しま す.右クリックで出てくるメニューから作業してください.

      ここまで終わったら,先ほどのスクリプトを利用してページにアクセスしてみま しょう.また,比較のため,NetscapeやMozillaでアクセスしてみても良いでしょ う.

      $ ruby client.rb http://localhost/~b01**/

      当然,**の部分は自分の番号に直してください.なお,人の番号を入力する とその人のページを見ることができます.現状を確認します.まずは,次のコマ ンドにより public_html ディレクトリの状態を確認します.

      $ ls -ld ~/public_html

      表示結果は大体以下のようになるはずです.

      drwxr-xr-x 2 b0199 b0199 4096 Jun 4 19:01 /virtual/home/b0399/public_html//

      最初の10文字の記号のうち,d以外の9文字が保護モードに関する属性となってい ます.意味は,表1のようになります.

      表1 保護モードの意味

      所有者グループその他のユーザ
      rwxr-xr-x
      r: 読み取り権限あり
      w: 書き込み権限あり
      x: 実行権限あり
      r: 読み取り権限あり
      -: 書き込み権限なし
      x: 実行権限あり
      r: 読み取り権限あり
      -: 書き込み権限なし
      x: 実行権限あり
      自分で好きなようにできる 修正を加えることはできないが,
      中を見ることはできる
      修正を加えることはできないが,
      中を見ることはできる

      また,これらを数値化してモードとすることも可能です.表2を参考にしてくだ さい.

      表2 保護モードの数値化(8進数表記)

      r4
      w2
      x1
      rwx7
      rw-6
      r-x5
      r--4
      -wx3
      -w-2
      --x1
      ---0

      これにより,現在の public_html ディレクトリは755ということにな ります.なお,ディレクトリの x 権限は「ディレクトリの中に移動する ことが可能」という意味ですが,ファイルではそれがなんらかの実行プログラム であることを意味します.

      さて,次のようなコマンド操作を実行します.

      $ chmod 700 ~/public_html

      このコマンドの意味は,jman chmod で確認してください.再び,先ほ どと同様に自分のページにアクセスしてみましょう.元に戻すには,

      $ chmod 755 ~/public_html

      です.また,次のようにも変更してみましょう.

      $ chmod 600 ~/public_html/index.html

      こちらはもともとは644の状態にありました.他のモードに変えてみて試してみ るのも良いでしょう.

      教室の環境では,public_html というディレクトリや index.html というファイルを置くだけでWWWサーバによる表示ができるようになって いました.これは,システムが用意しているデフォルトの保護モードと関係が あります.次のコマンドを実行してみましょう.

      $ umask

      コマンドの意味はいつものように jman umask で確認してください. 結果は,

      022

      という素っ気ないものですが,これは以前に行ったネットマスクと同じ様に,ユー ザ権限 (保護モード) にマスクを掛けるものです.全ての権限が全てのユーザに 許されているとした場合には,8進表記でモードが777になることは分かるでしょ う.それに対して022のマスクを掛ける,すなわち,その部分を覆うことにより, モードが755となります.このマスクの値や表記法はシステムに依存します.メー ルサーバのmatsuではどのようになるかも一度調べてみましょう.

      ファイルにおいては,前述のように実行権限は通常は考えないので,マスクの 022がかかるとモードは644となります.Rubyのスクリプトファイルの例を用意し ました.この example.rb ダウンロードして,実行権限を与えてコマンドとして動作するか どうかを試してみてください.カレントディレクトリはコマンドパスに含まれて いないので,

      $ ./example.rb

      のようにパスをつけて実行する必要があります.

    • 教室のサーバプログラム

      保護モードを変更して様々なモードで閲覧要求を出したらどうなるかを実習しま した.自分のディレクトリにある自分のファイルでも,WWWサーバに閲覧要求を 出す場合には一般ユーザに権限が無いと見えませんでした.これは,WWWサーバ プログラムがまずページを閲覧する許可を持っていないと表示できないためです. 教室では,世界的にもっとも高いシェアを持っているApcheというプログラムが 走っていますが,これはnobodyというユーザで動いていますので,そのユーザが 見えるページのみが表示可能なページとなっています.プロセスを確認してみま しょう.

      $ ps ax | grep httpd

      $ ps aux | grep nobody

      $ less /etc/passwd

      のようなコマンドで確認できます.ps コマンドの動作についてはいつ ものように jman ps です.

  3. 小テスト

    授業の終了20分前くらいにAクラスBクラス別の小テストを実施します.アナウ ンスに注意してください.また,提出は電子メールにより行いますので,メール の送信準備は忘れないでいて下さい.

  4. 宿題

    授業の終りに宿題(AクラスBクラス)の説明をしますので,アナウンスに注意してください.


目次ページへ戻る