インターネットの通信メカニズム 概要 WEBアプリ研究会 2回目
目的 この舞台裏はどうなってるの? ページ表示 URL入力 リンククリック ページ表示 ボタンクリック 送信 http://www.sfc.keio.ac.jp/ http://www.sfc.keio.ac.jp/ http://www.sfc.keio.ac.jp/ hogehogehgoehgoe hogehoehgoehgoeh hgeoheohgoehgoeg gehoghoeghoehgoe image ページ表示 ボタンクリック http://www.sfc.keio.ac.jp/ hogehogehgoehgoe hogehoehgoehgoeh hgeoheohgoehgoeg gehoghoeghoehgoe image 送信
今日の目標 クライアント・サーバシステムの通信の仕組みについて簡単に説明できるようになる プロトコルの意味・目的について説明できるようになる HTTPの仕組みについて簡単に説明できるようになる
ネットワーク アプリケーションの基本 クライアント・サーバシステム サーバ クライアントがサーバのサービスと受けるには、 サービスを公開し、サービス要求者にサービスを提供するプログラムのこと クライアント サーバに対してサービスを要求し、サービスを受けるプログラムのこと クライアントがサーバのサービスと受けるには、 クライアントプログラムをサーバプログラムに 接続する必要がある
論理的な話をすると・・・ クライアントプログラムがサーバプログラムを識別するために必要なもの IPアドレスまたはホスト・ドメイン名 ネットワーク上でサーバコンピュータを特定する ポート番号 サーバコンピュータ上で動いているプログラムを特定する クライアントプログラムが実際にサーバプログラムからサービスを受けるために必要なもの ソケット プログラムとプログラムをネットワーク越しにつなぐ ポート番号は1~65535
プログラムとプログラムを つなぐソケット 電話の受話器(または郵便ポスト) 接続した相手との間に仮想的な回線ができる ソケットに喋りかけたり手紙を投函すれば、相手のソケットに届く インターネット上のコンピュータと通信するときは、必ず使わなければならないインターフェース 後述するインターネット共通の通信のルールに従うため 仮想的な回線 spitfire(133.27.173.237) entrance(133.27.36.64) プログラム プログラム ソケット port:10001 ソケット port:10002
ソケット間通信の手順 3、受け入れ 2、接続要求 サーバ: 133.27.36.64 クライアント: 133.27.173.237 Port:79 Port:xxxx Port:80 Server Socket socket 1、ソケット生成 socket 4、ソケット生成 → → → → → → → → → → データ → → → → → → → → → → ← ← ← ← ← ← ← ← ← ← データ ← ← ← ← ← ← ← ← ← ← 5、データの交換 Port:81 Port:82
コンピュータ通信を行う上での様々なルール 通信には様々なルールがある IPアドレス(またはホスト名)とポート番号をもとに、相手のプログラムを特定し、ソケットを使って通信するというのは、コンピュータ通信におけるルール コンピュータ通信の世界では、様々な通信レイヤーごとに、様々なルールがある ケーブルの規格 目的のIPアドレスのコンピュータまでのたどり着き方 転送するファイルのフォーマット 等等 通信には コンピュータ通信を行う上での様々なルール プロトコル
OSI7層モデル OSI(Open System Interconnection) コンピュータ同士が機種に依存せず、相互に接続するためのプロトコルの枠組み 7つのレイヤーからなるプロトコルスタック 7層: アプリケーション層 6層: プレゼンテーション層 5層: セッション層 4層: トランスポート層 3層: ネットワーク層 2層: データリンク層 1層: 物理層 サービスの提供 論理的 表現方法の決定 ルールを階層的に定めたもの 接続相手の認証 データの信頼性確保 ネットワーク上の目的地までの経路 ネットワーク上の交通ルール ネットワークを構成するものの物理的な規格 物理的
例 運送業者の例 7層: アプリケーション層 6層: プレゼンテーション層 5層: セッション層 4層: トランスポート層 7層: アプリケーション層 6層: プレゼンテーション層 5層: セッション層 4層: トランスポート層 3層: ネットワーク層 2層: データリンク層 1層: 物理層 サービス(シロネコヤマト宅急便) オプション決定(クール宅急便、天地無用、われもの) 受け取り相手の決定 socket 最終届け先の決定、荷物の運び込み方の決定 サービスとは、アプリケーションそのもの 目的地までの経路決定 道路の交通ルール 道路の材質
それぞれの層が独立して 会話する 荷物を送りたい! 接続してくれ! 7層: アプリケーション層 6層: プレゼンテーション層 シロネコヤマトで頼む! 7層: アプリケーション層 6層: プレゼンテーション層 5層: セッション層 4層: トランスポート層 3層: ネットワーク層 2層: データリンク層 1層: 物理層 7層: アプリケーション層 6層: プレゼンテーション層 5層: セッション層 4層: トランスポート層 3層: ネットワーク層 2層: データリンク層 1層: 物理層 クール宅急便でおくるぞ! ○○さん当てだな! ι308に立て続けにおくる! 場所は慶応大学ι館だ! 交通ルールはこうだ! アスファルトの道を通って来い!
インターネットアプリケーションのためのプロトコル OSI7層モデルで言う アプリケーション層 プレゼンテーション層 セッション層 にあたるプロトコル ソケットに対してどのように話しかけるかを定義する 通信手順、データフォーマットなどのルールを定義 HTTP,SMTP,POP,MIME,IMAP,FTP等
HTTPについて Hyper Text Transfer Protocol 現在HTTP1.1(RFC2616) ハイパーテキストの転送を行うプロトコル HTML、画像、音声ファイルなど ハイパーテキストとは リンク、マルチメディアコンテンツを含むことのできるデジタル文書フォーマット 現在HTTP1.1(RFC2616) 実際は1.0と共存している状態 リソースの送受信だけを行うことを目的としている シンプル:複雑な処理がない ステートレス:接続状態を保たない
HTTPによる通信 メッセージ交換 クライアントからサーバへの「リクエスト・メッセージ」 サーバからクライアントへの「レスポンス・メッセージ」 ※ 原則として1リソースごとに1往復のメッセージ交換 WEBブラウザ WEB サーバ Hoge.html (1) HTMLファイルの取得 (2) 画像1ファイルの取得 画像1 (3) 画像2ファイルの取得 画像2
WEBサーバの指定 HTTPはURLが示す場所のファイルを取得する URL(Uniform Resource Locator) 書式: リソースの場所を指定する 全世界で一意 書式: http://www.sfc.keio.ac.jp:80/~taka/index.html 相対URLでは、ドキュメントルートをサーバが自分で補って解釈してくれている スキーム: リソースにアクセスする手段。 他にも、mailto、ftp、file、telnetなんかがある。デフォルトはHTTP。 WEBサーバ名: IPアドレスを使用することも可能 ポート: アクセスするサーバのポート番号。デフォルトはHTTP標準の80番。 パス: WEBサーバの ドキュメントルートからのパス
(参考)URI/URL/URN リソース指定の3形態 URL(Uniform Resource Locator) リソースの「位置」を示すもの URN(Uniform Resource Name) リソースそのものの永続的な「名前」を指定する URI(Uniform Resource Identifier) 識別可能な全てのものを指定する スキーム(Scheme) URNのスキームはリソース取得手段とは関係ないのでURLに含まれない URI URN urn: URL http: mailto: pln: oasis: file: news: NID(Name Space ID)
WEBサーバはソケットに対してこういうことを話しかける! HTTPメッセージの構造(1) リクエスト・メッセージ レスポンス・メッセージ GET /index.html HTTP/1.1 Accept: */* Accept-Language: ja Accept-Encoding: gzip, deflate Referer:http://www.sfc.keio.ac.jp/~kobataka/ User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: www.sfc.keio.ac.jp HTTP/1.1 200 OK Server: Apache/1.3.12 (TurboLinux) mod_perl/1.24 ApacheJServ/1.1 Date: Sun, 11 Feb 2001 07:57:02 GMT Connection: close Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML lang="ja"> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html;charset=SHIFT_JIS"> (略) </BODY></HTML> WEBサーバはソケットに対してこういうことを話しかける!
HTTPメッセージの構造(2) リクエスト・メッセージ レスポンス・メッセージ 命令 結果 報告 引数 内容 リクエスト・ライン ・ヘッダ リクエスト・ライン メッセージ ・ヘッダ ステータス・ライン 命令 結果 報告 各種ヘッダフィールド (リクエスト・ヘッダ 一般ヘッダ エンティティヘッダ) 各種ヘッダフィールド (リクエスト・ヘッダ 一般ヘッダ エンティティヘッダ) 空行(CR+LF) 空行(CR+LF) メッセージボディ (フォームのパラメータなど) メッセージボディ (HTMLファイル、 マルチメディアデータなど) 引数 内容
HTTPリクエスト リクエスト・ラインの書式 メソッド一覧 メソッド [空白] リクエストURL [空白] HTTPバージョン ※リクエストURLは、WEBサーバのドキュメントルートからの相対パス メソッド HTTPバージョン 機能 HEAD 1.0/1.1共通 指定したURL取得の結果レスポンスのヘッダーのみ取得する。 GET 1.0/1.1共通 指定したURLが示すリソースを取得する。 POST 1.0/1.1共通 指定したURLが示すサーバーに対してデータを転送する。 PUT 1.0/1.1共通 指定したURLが示すリソースに対して、データを転送して置き換える。 DELETE 1.0/1.1共通 指定したURLが示すリソースを削除する TRACE 1.1より追加 サーバーやプロキシの動作を診断するための情報を返答する OPTIONS 1.1より追加 使用できるメソッドやオプションの一覧を取得する CONNECT 1.1より追加 プロキシでのトンネリング接続を行う
HTTPバージョン [空白] ステータスコード [空白] 結果フレーズ HTTPレスポンス ステータスラインの書式 ステータスコード一覧(有名どころ) HTTPバージョン [空白] ステータスコード [空白] 結果フレーズ ステータス・コード HTTPバージョン 結果フレーズ 200 1.0/1.1共通 OK 301 1.0/1.1共通 Moved Permanently 302 1.0/1.1共通 Moved Temporarily 400 1.0/1.1共通 Bad Request 401 1.0/1.1共通 Unauthorized 403 1.0/1.1共通 Forbidden 404 1.0/1.1共通 Not Found 500 1.0/1.1共通 Internal Server Error
リクエスト・メッセージを送り、結果を受け取る TelnetによるHTTP実習 Telnetを使って、WEBサーバに リクエスト・メッセージを送り、結果を受け取る やること 学校の端末(ccz01など)にSSHでログインする telnetでSFCのWEBサーバに接続します HTTPリクエストのGETメソッドを試してみよう! % telnet www.sfc.keio.ac.jp 80 Trying 133.27.4.212... Connected to www. Escape character is '^]'.
GETメソッド % telnet www.sfc.keio.ac.jp 80 Trying 133.27.4.212... Connected to www. Escape character is '^]'. GET /~kobataka/index.html 1.1 [+改行2回] --------------------------------------------- GET /~kobataka/cgi-bin/httptry.cgi?name=hoge&age=22 1.1 [+改行2回]
まとめ クライアント(プログラム)とサーバは、ソケットを通して会話することで成り立っている IPによりコンピュータを特定する ポートによりサービスを特定する プロトコルは通信のためのルールであり、OSI7層モデルによって、通信レイヤーごとにまとめられている HTTPはURLで指定したコンピュータとメッセージを交換することでハイパーテキストの転送を行うプロトコルである