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

Back to index page

  1. 本日の作業内容



  2. 出席確認

    電子メールで出席確認をします.宛先など以下の情報を用いてメールを作成し, 出席申告してください.なお,キーワードは授業中に紹介します.

    提出形式

    宛先 justice@mag.shimane-u.ac.jp
    件名 AttendA_06-17_net_s0340** Aクラス
    AttendB_06-17_net_s0340** Bクラス
    本文 学生番号
    氏名
    キーワード
     
    (改行)
    (改行)
    キーワードは授業中に紹介
    注意 「件名」の**をそのままにしないで,必ず自分の学生番号 に修正して下さい.また,ABクラス別は指示にしたがって下さい.

  3. 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番台サーバのエラー

      たとえば,リンクをクリックしたときにリンク先として指定したページが無けれ ばエラーが表示されます.Webページは日々変化していますので,古いブックマー クやサーチエンジンからのリンクをクリックした場合にはそのようなことがよく おこります.その際,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言語で記述された内容を解釈し ているだけです.とりあえず,上記のままではページ内容を見にくいので,スク リプトを少しだけ改良して,ブラウザみたいな仕事をさせてみます.日本語も含 めた表現形式に少しは対応できるように変更したものを次に示します.ダウンロードも可能です.

      
      require 'socket'
      require 'nkf'
      
      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"
      
      data = NKF::nkf("-e", s.read)
      print data.gsub(/<.*?>/,' ')

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

    • 保護モード

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

      $ mkdir ~/public_html

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

      ディレクトリを削除するときには rm コマンドにオプションが必要で す.中身ごと再帰的に動作させるために,

      $ rm -r hoge

      のようにしてください.

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

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

      当然,**の部分は自分の番号に直してください.なお,人の番号を入力する とその人のページを見ることができます.

      さて,準備ができたら状況を確認します.まずは,次のコマ ンドにより public_html ディレクトリの状態を確認します.

      $ ls -ld ~/public_html

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

      drwxr-xr-x 2 b0399 b0399 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
      rwx 7
      111
      rw- 6
      110
      r-x 5
      101
      r-- 4
      100
      -wx 3
      011
      -w- 2
      010
      --x 1
      001
      --- 0
      000

      これにより,現在の 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 です.

    授業で行った作業の後,ログアウトする前に必ず,自分のホームディレクトリの 属性を再確認して下さい.間違った操作を行ったままでログアウトし,次回ログ インすると,ログイン時に読み取るべき設定ファイルが読み込まれず,GNOMEな どの起動が出来なくなります.確認作業のやり方が分からなければ,とりあえず,

    $ chmod 755 /virtual/home/b0399

    を実行して下さい.もちろん,学生番号は自分のものに直してから実行して下さ い.

  4. 小テスト

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

    Aクラス小テスト
    Bクラス小テスト

  5. 宿題

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

    Aクラス宿題
    Bクラス宿題


目次ページへ戻る