Web で楽しく遊ぶための知識(3) – TCP/IPネットワークアプリケーションとブラウザ

てなわけで、3回目です。

前回は、

hiromasa.another :o) » Blog Archive » Web で楽しく遊ぶための知識(2) – IPアドレスとDNSとバーチャルホストと

ここのサーバの URL は、 https://another.maple4ever.net/。 これをブラウザの URL 欄にうちこむと、日本のどこかにあるデータセンターに接続されて、html が表示されます。

という話でした。

インターネット上の通信は、TCP/IP というプロトコルを使い、インターネット上ユニークなIPアドレスを元に、世界中に配置されているホストに接続する。 Web に関して言えば、接続先の Web サーバには httpd と呼ばれるサーバソフトウェアが動作して、ブラウザからの要求に応える。 httpd にはバーチャルホストという考え方があり、1つの IP アドレス(機械)で複数のホスト名をホスティングできる。

てなわけでしたが、今回は TCP/IP についてもうちょっとだけ。

自分で書いていてあれなのですが言葉に混乱が見られるので、まずひとつ。 インターネット上に存在するコンピュータ(PC、サーバ等々)を以下、"ホスト" と呼称することにします。 サーバとかクライアントとかって名称は、このホストに対する使い方、という扱いになります。 ホスト名といえば、 another.maple4ever.net 、とかです。

さて、ここからホスト同士の通信を、たとえばゼロから自分で実装しようと考えてみます。

まぁ手元にあるパソコン2台をなんとかつなげたいとして・・・。 最初は、AパソコンでボタンをおしたらBパソコンの画面になにかでるとか・・・。

当たり前ですが、信号のやりとりをするためになにか通信線が必要になります。 最近のパソコンには付いてないですが、こーいうのはプリンタポートを借りて実装するのが楽だったりするんですが、プリンタポート同士でパソコンを接続。 でもって、ソフトを書いて、プリンタポートの入出力を監視して、なんか信号きたら、画面に映すとか、ボタンが押されたら信号を出力するとか・・・。 2台ならいいけど3台にしたらどうしよう。。

[tegaki]やってらんね~(笑)[/tegaki]

投げ出すこと請け合い。 というわけで、こういった接続方式を決めてくれている規格の一つが TCP/IP で、多くのコンピュータが標準で採用しそれを実装しています。

ネットワークの規格というのは、いくつかの層で構成されていることが多く、TCP/IP も4層のレイアから成り立っています。

インターネット・プロトコル・スイート – Wikipedia

IP群はプロトコルとサービスをカプセル化する事によって抽象化する。 通常、より上位層のプロトコルはその目的の達成に役立てるために、より下位層のプロトコルを用いる。 これまでIETFはインターネット・プロトコル・スタックをRFC 1122で定義された4層から変更した事はない。 IETFは7層からなるOSI参照モデルに従うような試みはせず、また標準化過程(Standards Track)にあるプロトコル仕様やその他の構造上の文書をOSI参照モデルに対して参照する事もしない。

Wikipedia のリンク先に4層の解説があるのですが、 "Web で楽しく遊ぶ" 的には、注目点は最上位「アプリケーション層」

4. アプリケーション

DNS, TFTP, TLS/SSL, FTP, Gopher, HTTP, IMAP, IRC, NNTP, POP3, SIP, SMTP, SNMP, SSH, TELNET, ECHO, RTP, PNRP, rlogin, ENRP

みたことのある名前が並んでいます。 くだけて言えば、4 層未満の階層はホスト同士の"接続"するまでの手順の既定です。 接続した後に何をするのかってのがアプリケーション層になります。

インターネットで動くアプリケーションをつくる人間は、アプリケーション層未満のことはそのインターフェース以外考えなくて済むようになっています。 接続経路に海底ケーブルつかっていようが、無線LAN があろうが、ネットワーク経路がどうなっていようが、アプリケーションは意識しません。 ただひたすら、"つなげ" と命令すれば、自分でなにもせずとも 3層以下がなんとかして接続してくれます。 プリンタポートで通信しようとしている世界から見れば雲泥の差です。 🙂

じゃー、ここでいうインターネットで動くアプリケーションってなんだっていえば、Firefox などの Web ブラウザ。 Thunderbird などのメールクライアントがそれにあたります。 メッセンジャーとかもそうですね。

TCP/IP 的に言えば、Firefox はアプリケーション層 HTTP 、SSL、FTP、Gopher、SOCKS に対応した通信アプリケーション、ということになります。

これらアプリケーション層アプリケーション(?) は、みんなが使えるようにしたほうが便利なものについては、その仕様が RFC という文書で規定されています。

Request for Comments – Wikipedia

Request for Comments(略称:RFC)はIETF(Internet Engineering Task Force)による技術仕様の保存、公開形式である。内容には特に制限はないが、プロトコルファイルフォーマットが主に扱われる。RFCは日本語では「コメント募集」の意味であり、もともとは技術仕様を公開し、それについての意見を広く募集してより良いものにしていく観点から始められたようである。全てのRFCはインターネット上で公開されており、誰でも閲覧することができる。

もちろん、自分でアプリケーションを設計して動作させることもできます。 たとえば、ネットワークゲームであるとか、メッセンジャーサービスであるとかは、いろいろな会社が独自のアプリケーション層に設計したプロトコルです。

このアプリケーション層ですが実はつくりは非常に簡単で、基本的には文字列のやりとりだけの取り決めのものが多いです。 じゃー我らが Web。 HTTP というプロトコルはどんな風に実装されているかというと・・・

(サーバへリクエスト送信)
GET / HTTP/1.0
Connection: close
Host: wp.mmrt-jp.net
Referer: http://wp.mmrt-jp.net/
Accept: */*

(サーバからのレスポンス)
HTTP/1.1 200 OK
Date: Tue, 15 Jan 2008 08:20:50 GMT
Server: Apache
X-Pingback: http://wp.mmrt-jp.net/xmlrpc.php
Connection: close
Content-Type: text/html; charset=UTF-8

こういった文字列のやりとりをホスト間でしているだけです。 Firefox はこの会話ができるアプリケーションのひとつです。

HTTP/1.1 200 OK

200 OK。 200 とか、403 とか 500 とか・・・。 よくみる例のアレですね。

てなわけで HTTP 編に、続く。

# ネットワーク系はぼく詳しくないので、早々にすっとばすのであった。。

コメントを残す