Web
ウェブ

出席調査

出席確認として学生証を教室後ろの入り口近くの出席用PCのリーダにタッチせよ. 出席していない回の実験レポートは提出を認めず,0点として計算されるので 注意すること.

初期設定

システム設定→ ネットワーク→ 有線→ オプション→ IPv4設定で,「方式」を「自動」にして授業ページを読める状態にせよ.

講義

ウェブ

TCP/IP の階層

OSI参照モデルとの対応

「ネットワーク設定」の実習で説明したように TCP/IP の階層モデルは OSI 参照モデルに基づいているがインターネットの 実装に特化するために,OSI 5 層 以上は TCP/IP では分離せずに アプリケーション層で扱うこと,OSI 1 層に対応する規定が無い, という違いがある.両者の対応をおおまかに示すと表 9.1 のようになる.

表 9.1. OSI参照モデル(左)とTCP/IPの階層モデル(右)の比較
7. アプリケーション層アプリケーション層
6. プレゼンテーション層
5. セッション層
4. トランスポート層トランスポート層
3. ネットワーク層インターネット層
2. データリンク層ネットワークインターフェース層
1. 物理層(対応無し)

TCP/IP での階層構造では,最上位のアプリケーションプログラムが 直接呼び出してデータを渡すのは OSI 参照モデルでいう 第 4 層のプロトコル(TCP,UDP等)であり, 第 4 層のプロトコルは第 3 層のプロトコル(ARP, ICMP)を呼び出す. 第 3 層のプロトコルは第 2 層にあたるデバイスドライバにデータを渡す.

TCP/IP を理解する上で重要なのは,今扱っている通信プロトコルが 第 2 層なのか 第 3 層なのか 第 4 層なのかを把握することである. それを理解するためにはまずインターネットが多数の (狭義の)ネットワークの相互接続であるということを理解し, この「ネットワーク」という概念を正確に理解する必要がある.

2層と3層の違い

自ホストとインターネットで繋がっているホストといっても, 同じネットワークに属していて直接通信できるホストと, 別のネットワークに属していて情報を適切なネットワークを 通過させることで間接的に通信できるホストがある.

インターネットに接続しているホストは何らかのネットワークに所属している. グローバル IP をもつホストのうち,ネットワークアドレスが同じホストは 同じネットワークに所属し,異なるホストは異なるネットワークに所属している. ホストがNIC(ネットワークインターフェースカード) などのネットワーク機器に情報を送信すると,同じネットワークのホストが 共有しているネットワーク媒体にデバイスドライバ等を通して電気信号等に変換された ものが送信される. 受信するときはその媒体を流れている電気信号から情報をデバイスドライバが 読み取る. 基本的には同じネットワークのホストでは所属ホストすべてからの情報を 全てのホストが読むことができる.

同じネットワークでしかできない通信が第 2 層,異なるネットワークでも 行える通信が第 3 層以上と理解しておけばよい.デバイスドライバによる通信は 同じネットワーク上のホストへしか通信できないので第 2 層の通信機能である. また,経路制御は第3層の代表的な機能である.

3 層と4層の違い

送信先の IP アドレスを与えれば 3 層の機能でパケットを 相手ホストに送ることはできる.しかし,一台のホストでは通常 複数のアプリケーションが動作している.例えばあるホストでメールを取り込みながら ウェブ検索を行っていると,メールプログラムに対する返答パケットと ウェブブラウザに対する返答パケットは同じ宛先IPアドレスであるが 区別して処理する必要がある.同じホストの中で動作している 複数のアプリケーションをポート番号を使って区別して処理することが 4 層の最も基本的な役割である.

大きなデータを通信する場合,ひとかたまりのデータとして通信する と効率が悪いため,TCP/IP では適度な大きさの情報に分けて通信する. この情報の単位をパケットとよぶ. もともとのデータをパケットに分割したり, 分割,送信されたデータの到達性,順序の保証を行うのも第 4 層 の重要な仕事である.インターネットブラウザ,メールソフトなどの アプリケーションはライブラリ関数を利用して第 4 層の機能を呼び出す. このような,OS が用意しているインターフェース用のライブラリ関数を API (Application Programming Interface) と呼ぶ.

TCP と UDP

TCP と UDP は, TCP/IP の第 4 層(トランスポート層)のプロトコルとして重要なものである.

TCP はコネクション指向で信頼性があるが,接続準備のオーバーヘッドが 大きく,UDP は高速に動作する代わりに信頼性がないのが特徴であり, それぞれ向き不向きがある.TCP はプログラムデータの通信など 信頼性が必要な場面で使われ,UDP は IP 電話など,多少のエラー が許容されるがリアルタイム性が求められる場面で使われる.

ポート番号

MAC アドレスや IP アドレスでホストを特定することはできるが, 同じホストとの間で複数の通信が同時に行われる場合, これを区別する必要がある.例えば,一台の計算機から ウェブブラウザや,メールソフトなどで同時に通信を行うことが できる.これらの通信の区別に用いられるのがポート番号である. 送信側,受信側の両方にポート番号が適当に割り当てられ, 同じ IP アドレスの計算機間でもポート番号を識別することで 正しく通信を区別する.

TCP や UDP では

のどれかが異なれば別の通信として区別される.

0 から 1023 までのポート番号は使用するソフトが歴史的に決まっているので 勝手に使えない.有名なものでは 20,21(ftp), 22(ssh), 23(telnet), 80(http) などがある.TCP と UDP の両方で使われる場合は同じポート番号が割り当て られている.

今回の実習では TCP を利用するアプリケーションとして ウェブサーバを使った実習を行う.ウェブサーバが利用するプロトコルである http では TCP の 80 番ポートを使う.

ウェブサーバ

この実習ではウェブサーバとして広く普及されている apache を使用する. 実習で行うとおりにインストールすると, 基本的な設定ファイルは /etc/apache2 以下におかれる.

設定ファイルが細かく分割されていることと,設定ファイルの有効無効の 切り替えをシンボリックリンクで実現していることに注意を要する. apache サーバの最も基本的な設定ファイルが /etc/apache2/apache2.conf である.このファイルに記述されている ServerRoot は apache サーバの設定ファイル等が置かれる基本ディレクトリの起点を示す.

/etc/apache2/sites-available 以下に設定機能ごとに設定ファイルが 用意されているが,ここにファイルがあるだけでは実際の設定には反映されない. 反映したい設定ファイルのシンボリックリンク(Window でいう別名,エイリアス) を /etc/apache2/sites-enabled 以下に置くことで初めて反映される. 実習の環境では /etc/apache2/sites-available/000-default.conf への リンクが張られているはずである.

上記設定ファイル中,重要な項目の意味は以下のとおり.

DocumentRoot
ウェブサーバのコンテンツのトップのディレクトリ. URL にウェブサーバのみを書いた場合,ここのディレクトリの ファイルが検索される.
ErrorLog
エラーログを記録するファイル.
CustomLog
アクセスログその他を記録するファイル

標準状態ではユーザのホームディレクトリの文書は公開されない. 例えばユーザ user1 がホームディレクトリに public_html という ディレクトリを作成し,そこに置いたファイル page.html を http://「ウェブサーバ」/%7Euser1/page.html として アクセスできるようにしたい場合は a2enmod コマンドを userdir という引数で実行すればよい.

作成した html 文書が公開されるためには,ルートディレクトリから その文書があるディレクトリまですべてのディレクトリに 「読込」「移動」のパーミッションがあること,公開する文書ファイルに 「読込」のパーミッションがることが必要である.

html 文書をウェブサーバにリクエストするにはサーバに GET, POST などの コマンドと,要求するファイルなどの情報を送信する. サーバはそれに対する応答としてステータスコードを返し, アクセスが成功であれば要求されたファイルの内容が送信される. よく使われるステータスコードとその意味を下に示す.

表 6.2. 主なステータスコード
200OK (正常)
404 Not Found (ファイルが存在しない場合など)
500 Internal Server Error(CGI スクリプトの文法エラーなど)

これらの処理は,通常ユーザがブラウザに URL を入力したり,リンクたどったときに ブラウザによって自動的に行われる.

http では 1 つのファイルあたり 1 つのアクセス (TCP, つまり第 4 層のレベルのアクセス)が行われる. 図等,本文とは別のファイルが一緒に表示される文書の場合, ブラウザを見れば 1 回のアクセスに見えるが実際には ファイルの数だけのアクセスが行われている.

実習

各 pc の名前を,班番号の 2 桁表記を A とすると 各班の教卓に向かって左側から pcA1, pcA2,...,pcA4 とする.

キーボード左上のシールの番号の下2桁の数字がxx とすると,その計算機の IP アドレスを 172.17.2.xx とする.

他の情報は全てのホストで共通である. サブネットマスクは 255.255.0.0, デフォルトゲートウェイは 172.17.254.254, 優先DNSサーバのアドレスは 172.17.254.254, として設定せよ.

実習1. ウェブサーバのインストール

ウェブサーバを全ての pc にインストールする.

ターミナルから,
sudo apt-get update
コマンドを実行し,次に
sudo apt-get install apache2
コマンドを実行せよ.

実習 2. 設定ファイルの確認

設定ファイル群は /etc/apache2 以下に置かれる. cd /etc/apache2 を実行し,このディレクトリに 移動して以下の作業を行え.最初に ls コマンドで どんなファイルがあるか確認せよ.

/etc/apache2 ディレクトリで以下のコマンドを実行し, /etc/apache2/site-enabled ディレクトリに リンクが張られ,有効になっているファイルを確認せよ.

user1@pc-001:/etc/apache2$ cd sites-enabled
user1@pc-001:/etc/apache2/sites-enabled$ ls -l

/etc/apache2/sites-available ディレクトリにあるファイルのうち, 上記コマンドで有効になっていることを確認したファイル (site-enabled からリンクが張られているファイルで,ls コマンド で表示される矢印"->"の先のファイル) の内容を確認し,DocumentRoot, ErrorLog, CustomLog の設定を確認し,DocumentRoot に指定されているディレクトリ, ErrorLog, CustomLog に指定されているファイルを確認する. それぞれのキーワードのすぐ後ろに書かれているのが指定されている ディレクトリやファイルである. ただし,ErrorLog, CustomLog の指定に使われている変数 $APACHE_LOG_DIR は別のスクリプトにより '/var/log/apache2' に設定されている. CustomLog の最後に書かれている combined はログのフォーマットに関する情報である.

DocumentRoot に指定されているディレクトリにある index.html ファイルの内容を確認せよ.

実習 3. アクセス実験

班の全てのホストでifconfig コマンドを実行し,班のすべてのホストに 設定されている IP アドレスを班員の間で確認しておく. 班のメンバー間で座席を入れ替え,全員が自分がウェブサーバーを設定した PC 以外の PC に着席せよ.着席した PC をクライアントとして 以下の作業を行う. 自分が設定したサーバの IP アドレスが A.B.C.D だったとする.クライアント計算機から telnet A.B.C.D 80 というコマンドを実行せよ.最後の 80 は http のポートである.

入力待ちになるが,10 秒程度でタイムアウトになるので タイムアウトになる(プロンプトが表示される)前に 速やかに以下のように入力する.

GET / HTTP/1.0
(改行)

GET の行の入力で改行キーを押した後,もう一度空行で 改行キーだけを押すことに注意せよ.

HTTP/1.1 200 OK

から始まる内容が表示されれば成功である. 成功すると実習 2. で確認した index.html がコンテンツとして 返されるはずである. アクセスログはサーバの 実習 2. で確認した CustomLog で示されるファイルに出力される.自分がサーバを設定した PC に戻り, 今回の操作に対応する行を確認せよ.ログの最初にリクエスト元の IP アドレス,日時が記録され,次に "GET / HTTP/1.0" という今回のコマンド が記録されている.次に記録されている 3 桁の数字がステータスコードである. 今回のステータスコードが何であったかとその意味を確認せよ.

通常はこのやりとりをブラウザが自動的に行い,受信したコンテンツを HTML に従って整形して表示する.また座席の入れ替えを行い, 先程 telnet を実行したクライアント PC に移れ. ブラウザを起動し,アドレス欄に http://A.B.C.D/ (サーバのIPアドレス)を入力し, 表示を確認せよ.自分が設定したサーバに戻り,このアクセスに対応する サーバのアクセスログも確認せよ.

ブラウザのキャッシュの消去

以前開いたページを再度開く場合,ブラウザに保存されているキャッシュが 使われて実際のアクセスが行われない場合がある.この場合は サーバにログが残らない.実験を失敗し,再試行する場合に問題になるので, 実験を再試行する場合はブラウザのキャッシュを消去してから行う 必要がある.キャッシュの消去はは, 「ツール>最近の履歴を消去」で行うことができる.

実習 4. userdir の利用

自分がサーバを設定したPCで作業を行う.

ユーザのホームディレクトリを利用できるようにするための モジュールの設定ファイルが /etc/apache2/mods-available/userdir.conf, /etc/apache2/mods-available/userdir.load, に用意されている./etc/apache2/mods-enabled ディレクトリを調べ, 上記ファイルへのリンクが無い,すなわち有効になっていないことを確認せよ.

モジュールの設定を有効にするためのコマンドが a2enmod である. 以下のコマンドで userdir を有効にせよ.

user1@pc-001:~$ sudo a2enmod userdir

設定ファイルを変更しても apache2 を再起動しないと 変更が反映されない.以下のコマンドを 入力し ウェブサーバを再起動せよ.

apache2 の再起動

user1@pc-001:~$ sudo service apache2 restart

/etc/apache2/mods-enabled ディレクトリを調べ, 有効になったことを確認せよ.userdir.conf を確認し, UserDir として public_html が指定されていることを確認せよ.

上記設定は自分のホームディレクトリ直下の public_html ディレクトリが 自分のトップディレクトリになるという意味である.ホームディレクトリで 以下のコマンドで public_html ディレクトリを作成せよ.

user1@pc-001:~$ mkdir public_html

実験用のhtml文書ファイルを以下の方法でコピーする.

  1. http://sirius.yamamotolab.jt.u-tokai.ac.jp/%7Enet/index.html にアクセスし, 実験用の文書を開け.
  2. 表示されている文書の上で右クリックから「ページのソースを表示」でソースを開き, ソース表示画面で画面の一番上にカーソルを移動させてメニューを表示させ, ファイル>名前をつけてページを保存,を選択する.
  3. ファイル名を index.html とし, 「フォルダの中に保存」で一旦ホームディレクトリ(自分のユーザ名) に保存する.これで自分のホームディレクトリにコピーができたので, mv コマンド等を使って先に作成した public_html に移動させる.

cd や ls で public_html,その中の index.html のパーミッションを 確認する.ディレクトリが 775 (drwxrwxr-x), ファイルが 644 (-rw-r--r--) であればよい.

サーバのアクセスログを確認する準備を行い,クライアントから http://A.B.C.D/%7Eユーザ名/index.html にアクセスし, 文書が表示されることを確認せよ. この操作に対応するログを確認せよ. http://A.B.C.D/%7Eユーザ名/ とだけ入力するとそのディレクトリの index.html というファイルを探して表示することになっている. この URL を指定しても同じファイルが表示されることを確認せよ.

自分のindex.htmlを書き換え,他の PC からアクセスして確認せよ.

実習 5. 画像を含むページのアクセス

同様に画像ファイルの表示を含んだコンテンツをコピーする.

  1. http://sirius.yamamotolab.jt.u-tokai.ac.jp/%7Enet/img.html にアクセスし, 画像表示実験用の文書を開け.
  2. 図以外の文書の上で右クリックから 「ページのソースを表示」でソースを開き,ソース表示画面で ファイル>名前をつけてページを保存,を選択する.
  3. ファイル名を img.html とし, 「フォルダの中に保存」で自分のホームディレクトリを選択する.
  4. 画像の上で右クリック,名前を付けて画像を保存を選択,
  5. ファイル名を utp.jpg とし, 「フォルダの中に保存」で自分のホームディレクトリを選択する.

これでホームディレクトリに img.html と utp.jpg の コピーができたので mv か cp で public_html に移す.

サーバのアクセスログを確認する準備を行い,クライアントから http://A.B.C.D/%7Eユーザ名/img.html にアクセスし, 文書が表示されることを確認せよ. この操作に対応するログを確認せよ.

アクセスログについて,index.html を開いたときと img.html を開いたときを比較せよ. img.html を開いた時のほうがログの行数が多いはずである. ログを確認してそれぞれのログがどのファイルを開くリクエストなのかを確認し, 行数が多い理由を考えよ

課題

第 8 回課題「ウェブ」 を提出せよ.


Updated in Nobember 28, 2014, index.html, Yamamoto Hiroshi