今回は、Domain Name Serviceについて学びましょう。
WWW ワールド・ワイド・ウェブは、インターネット等で提供されているハイパーテキストシステムです。
プロトコルはHTTPとHTTPSを使用します
ドキュメントの記述には主にHTMLなどのハイパーテキスト記述言語を使用します。ハイパーリンクと呼ぶ別のドキュメントへのURI参照をドキュメントに埋め込むことで、インターネット上他のドキュメントを参照可能にています。
リンク先のドキュメントが更にその先のドキュメントを参照している関係を繰り返す事で、インターネット上のほとんどのドキュメントが直接もしくは間接的に繋がっている様子をあらわしています。
WWWは、 HTMLドキュメント(webページ)持つWWWサーバと、 HTMLドキュメント をダウンロード・閲覧するクライアントからなるクライアントサーバシステムです。
WWWクライアントをユーザーエージェントと呼びます。代表的なWWWクライアントはウェブブラウザです。
WWWは主にHTTPを使用することからWWWサービスを提供するWWWサーバをHTTPサーバとも呼びます。
HTTP Hyper Text Transfer Protocolは、
主にWebページのブラウズやファイルのダウンロードに用いられています。特に断りが無い限りTCP port 80番を使用します。
元はHTMLドキュメント転送の目的で、サーバとブラウザの通信方法を規定したものでした。
HTTPサーバを80番以外のポートで用意した場合、クライアントはそのポート番号を指定することでアクセスできます。
TCP port 80番でweb公開しているサーバへの接続時に、URIでポート番号を指定しなくても接続できるのは、ポート番号が省略できているということに他ならなりません。
例えば、webブラウザのアドレス欄に、HTTPプロトコルを指定してwww.google.co.jpにアクセスを試みた場合、ポート番号80を指定しなくてもwebサーバにアクセス出来ます。TCPポート80番を指定しても表示に代わりはありません。
セキュリティを確保したHTTPは、httpsと呼ばれます。SSL(TLS)で暗号化します。特に断りが無い限りhttpsではTCP port 443を使用します。WebブラウザではプロトコルとしてHTTPSを指定した時点でTCPポート443番を使用しますので、httpと同様、ポート番号を指定しなくてwebサーバに接続できます。
SSLセッションの確立(ハンドシェイク)は次のプロセスで行われます
まずクライアントからサーバへHelloメッセージを送ります。
次に、サーバからクライアントへMultipul メッセージを送ります。
この中には、Sever Helloと証明書・Sever Hello Doneが含まれていま す。
次にクライアントからサーバへ、鍵交換と暗号の仕様・暗号化したハンドシェイクメッセージを送ります
最後に、サーバから暗号の仕様・暗号化したハンドシェイクメッセージを送り、SSLが確立します。
以降の通信は全て暗号化されますから、プロトコルアナライザで通信をキャプチャしても内容は判りません。
クライアントHelloの内容は、Webブラウザが対応している暗号の種類の一覧です。
Server Helloにはサーバで要求する暗号の種類が記述されます。この値はHTTPSサービスを提供するwebサーバに設定した値です。
URI Uniform Resource Identifierとは、一定の書式によってリソースを特定する識別子のことです。URL Uniform Resource Locatorの拡張として規定されました。
URLはネットワーク上のリソースの「場所」と「接続方法」を表す識別子のことです。ネットワーク上の位置を示してリソースを特定します。
例えば、HTTP://www.domain.com/index.html という文字列は、
ホスト名www.domain.com の
index.htmlというファイルにアクセスに
Hyper Text Transfer Protocolを使用する
という意味を持っています。
URLとして他に ftp://www.domain.com/ や mailto:user@domain.com 等があります。
WWWシステムの基本動作はクライアントのリクエストです。
通常のwebサーフィンでは、GETコマンドで閲覧するページをリクエストします。
ユーザーID・パスワード・連絡先などを入力するページではPOSTコマンドを利用してサーバにデータ送信します。
クライアントの要求に対するサーバの応答をレスポンスといいます。
例えば、クライアントからのページ要求が成功した場合のレスポンスは
HTTP/1.0 200 OK
となり、このメッセージと共にクライアントが要求したWebページを転送します。
Webブラウザを起動したPCで、Etherealなどのプロトコルアナライザを利用してトラフィックをキャプチャすると、クライアントの要求とサーバのレスポンスが確認できます。
エラーした場合のコードは多種に渡るので自分で調べてみましょう。
それでは、クライアントPCがWorld Wide Web上のウェブページの資源にアクセスする一般的なプロセスを見てみましょう。
第1段階は、URIのサーバ名を表す部分を Domain Name System (DNS) でIPアドレスに変換します。
これはコンピュータ同士の通信では、ホスト名ではなくIPアドレスで通信するからです。IPアドレスを直接指定している場合にはこの段階はありません。
第二段階です。IPアドレスをURLに入力した場合はここからのプロセス開始となります。
クライアントはIPアドレスに対応するWebサーバに対してHTTPで接続を試みます。
一般的な Webページでは、ページを構成するHTMLドキュメントや画像ファイルが要求(GET)されます。サーバは要求元にデータを転送します。
Webブラウザは、受け取ったHTMLファイルの記述にしたがってページを表示します。
プロトコルアナライザでキャプチャしたHTTP通信トラフィックを見てみましょう。
ピンクの部分がクライアントからのリクエストです。
・一行目でGETコマンドが有る事からページ要求という事がわかります。
・ 三行目で日本語jaを指定しています。
・ user-agentの内容からmozilla互換webブラウザと判ります。
・ ターゲットホストはwww.atmarkit.co.jpです。
青い部分がサーバからの応答です。青の一段落目の
・ 一行目に200 OK が有ることから要求は受け付けられました。
・ 三行目の記述からHTTPサーバアプリケーションがApacheであることが判ります。
※ ApacheはUnix互換OSでもっとも利用されているwebサーバアプリケーション
青の二段落目からHTML本文が記述されています。
Webサーバ上でnetstatコマンドを実行するとTCP port 80でサービスを提供していることが判ります。
接続が確立しているとESTABLISHED状態になります。
TCP port 443でのサービスもあることも判リます。これはHTTPSです。
Windows PCではnetstatコマンドを引数 -p tcp -a で実行するとポート番号ではなく、アプリケーション名で表示するのでポート番号での表示結果と比較してみましょう。
Windows PCではnetstatコマンドを引数 -p tcp -a で実行するとポート番号ではなく、アプリケーション名で表示するのでポート番号での表示結果と比較してみましょう。