機能を分けて考える | 通信を行うためには必要な非常に多くの様々な機能が必要です。 通信プロトコルはそのすべての機能を規定しなければなりません。 この際に、非常に多くの機能を、その機能ごとに分割して考えると、 理解しやすく設計も容易になります。 | ||||||||||||||||
OSI参照モデル |
OSI(International Organization for Standardization)という組織がISO(Open System Interconnection)
というプロトコルを作りましたが、この際にOSIがこのプロトコルを機能ごとに分割し、
階層的に考えることを説明しました。この時に彼らはプロトコルを7つの階層に分けて作ろうとしたのです。
OSI参照モデルの7つの階層は以下の通りです。
|
TCP/IPは7階層に明確に分割されていない |
OSI参照モデルではプロトコルを7階層に分けていますが、
TCP/IPのネットワークで用いられるプロトコルは、厳密に
この7階層に分けられていません。しかし、機能的にはこの
OSI参照モデルの7階層のすべてを含んでいます。
対応は以下のようになります。
*ICMPはIPパケットに入れて送られるので、IPの上位の層とも
とれるがIPの一部ということになっている
| ||||||||||
TCP/IP参照モデル |
OSI参照モデルは抽象的な概念を説明するのにはよいが、
現実に存在し、実際の利用に耐えてきたTCP/IPを説明するのには合わない
ということで、TCP/IP参照モデルというものが考案されました。
TCP/IPモデルは以下のようなものです。
しかし、NFSやSMBといったファイルシステムの共有プロトコルは OSIモデルにおける、セッション層と見なす人もいます。 |
アプリケーションからTCPへ | まず、アプリケーションであるブラウザは最上位の層に位置する http(Hyper Text Transfer Protocol)の規約に従って WWWサーバに(www.kitakyu-techno-ctr.co.jp)に対してコマンドを送ります。 このHTTPプロトコルでは、"GET /~fujiki/index.html"というコマンドを 送ると、そのページのデータを転送すると規定されています。 それで、ブラウザは"GET /~fujiki/index.html"という内容のパケットを www.kitakyu-techno-ctr.co.jpに送ってくれるように TCPの 処理をつかさどるモジュールに依頼します。 |
TCPからIPへ | それを受け取ったTCPはパケットのチェックサムを計算したり、 相手からそのパケット受け取ったことを知らせてもらえるように、 そのパケットを識別するシーケンス番号をつけます。相手から 「この番号のパケットは受け取ったよ」と知らせてもらえるようにです。 他にもいろんな仕事をしますが、いずれもデータに信頼性を 与えるための仕事をするのです。 このモジュールはそれに必要な情報をTCPヘッダに入れて、 TCPパケットを作り、IPをつかさどるモジュールに転送を 依頼します。 |
IPからイーサネットへ | IPは宛先に到着する経路にある次にマシンに依頼されたパケットを 送るために、イーサネットのデバイスドライバに必要な情報を渡します。 そしてルータに情報を送るのです。 |
イーサネットからIPへ | ルータの物理的なデバイスであるイーサネット にパケットが入ってくると、それを処理するべきプログラムに渡されます。 IPパケットを含む内容が送ってくると、 そのパケットを、そのゲートウェイでIPの処理を行っている モジュールに渡します。 |
IPからイーサネットへ | そのパケットは自分宛のパケットではないので、 IPパケットがさらに宛先に近づくために、次のルータに 渡すために、イーサネットのドライバを使ってそれを送信します。 この時に使用するイーサネットのポートはIPパケットを受け取った ポートとは異なるでしょう。 イーサネットのポートを2つ持つルータであれば、 通常入ってきたポートの反対のポートに送り出すことになります。 |
ぞれぞれのルータでこの処理が繰り返されます。
イーサネットからIPへ | ルータをいくつも経由して、宛先ホストのイーサネットの ポートにデバイスに、パケットが届いたとします。ここでも ルータと同じように、イーサネットが受け取った情報に含まれる IPパケットの部分をIPの処理プログラムに渡します。 |
IPからTCPへ | IPのモジュールは自分宛のパケットであるので、自分の上位の プロトコルに渡します。IPヘッダを見て このパケットに含まれるのはTCPであることがわかるので、この パケットをTCPを処理するモジュールに渡します。 |
TCPからアプリケーションへ | TCPの処理を行うモジュールは、データが正しいか調べ、 データの順番が間違っていれば、それを並べ替えます。 そして、ヘッダに指定されているポートからの受け取りを 待っているプログラム、つまりこの場合WWWのサーバに渡すのです。 そして、正しいパケットを受け取ったことを知らせるACKパケットを 待っている送信ホストのTCPに送ります。 このパケットの送信するために、IPのモジュールを再度呼び出します。 |
アプリケーションの応答 | こうして届いた情報を httpプロトコルの規約通りに解釈して、 それに対する結果を送り手に返すことになります。 |
ホームページの内容が送り返されるときも同じように処理されて 情報がブラウザの待つマシンに到着するのです。 このようにたくさんのプロトコルが協働することによって、 インターネットが機能しているいるのです。
「TCP/IP とインターネットの仕組み」へ戻る