2.4 階層化通信モデル

一般に通信全体をシステムとして考えると非常に複雑なシステムである ことが分かります。電話ですらも現在では複雑な交換機が利用されて おり、情報ネットワークでは更にプロトコルの問題が付加されます。 このような複雑なシステムが例えばたった一つのハードウェアで構成 されていて、それを動かすプロトコルも全てハードウェア上に実装 されていたとしたら、どうなるでしょうか?勿論、使う側に取っては 別に問題はありません。例えば、PC のインターフェースカードを買って きたら即座に通信出来るでしょう。しかし、作る側に立って考えれば 問題が明らかになります。つまり、作る側からすると、新しい インターフェースカードを作る度毎に最初からソフトウェアをそれに 合わせて作り直す必要があるのです。勿論、流石にこんな面倒 なことはしないでしょうが、メーカが違えば当然全ての過程が異なる事に なります。始めてそうしたカードを製造しようとするメーカにとっては 非常に大きな障壁となります。更には、もしプロトコルに変更 があった場合には、ハードウェアごと買い替える必要があります。 これが非常な無駄であることは自明の理であると言えます。 従って、何らかの分離が必要です。そのような分離では、ハードの 構造はプロトコルへの依存が無いか、あるいは最小であることが望ましい でしょう。また、こうしたハードを駆動するドライバソフトについても 同じように、プロトコルからは一定の分離がされている方が作成するのも、 そうしたドライバを入れ換えるユーザの立場からも望ましいでしょう。 すると、ハードから離れたプロトコルを解釈し、実行するような部分は 別に存在するべきです。同時に、こうした通信システムを利用するアプリケーション ・プログラムの立場から見ても同じことが言えます。 このような流れは、実はプログラミングの構造化と同じような流れであった と言えますし、そこにたどり着くまでに色々なベンダー毎の取り組みや研究が 背景にあったのも忘れてはなりません。

さて、以上のように考えると、必要とされる分離は幾つかの階層を持つ必要 があることが分かります。こうした考え方を階層化通信モデルと言います。 では、幾つの階層があるべきなのでしょうか。実は、これは結構難しい 問題なのです。あるいは、別の言葉で言えば、十人いれば十通りの考えが あっても良いと言えます。実際、こうした階層化は70年代後半から80年代に かけて研究をされ、後で述べる OSI の7階層モデルや、TCP/IPの階層モデル、 更にはメーカ独自の階層モデルも存在したのです。

ここに掲げるのは、国際標準化機構(ISO)が開発をした オープンシステム相互参照モデル(Open System Interconnect Reference Model: OSI model)と言われるものです。これは7階層を持つので、OSI 7階層モデル とも呼ばれています。

アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層

OSIの階層モデルは非常に美しく、整理されたものですので、未だにこうした 階層モデルの基本的な説明として出てきますし、避けては通れないものです。 しかし、現実の世界では OSIモデルではなく、TCP/IPが生きて使われており、 それはOSIとは少々異なるものであるのです。何故、OSIが生き残らなかった のかは後で述べることにして、TCP/IPの階層モデルを次に掲げましょう。

アプリケーション層
トランスポート層
インターネット層
ネットワーク・アクセス層

OSIのモデルと比較すると全体に簡潔ですが、省略された所、同じ所、 2つが一緒になっているような所がある事が分かります。 より詳細に比較すると分かるのですが、結論的には、 OSIモデルとTCP/IPの階層とはあくまでも違うモデルであり、従って、 OSIモデルで説明するとTCP/IPとは少し違う部分が出てきてしまうのですが、 多くの場合 OSI モデルを TCP/IP に当てはめて解説がされています。 もし、皆さんが今までにTCP/IPの説明を聞いて、それがどうも納得できないで いたとしたら、もしかするとこれが原因であるかも知れません。では、 何故わざわざ OSI のモデルを使って解説するのでしょうか。一つは、 OSIのモデルが基本であると多くの人が考えているのと、二つ目としては 実はTCP/IP自体はモデルではなく、あくまでも実装であるという事が上げられる と思います。前者はいかにもそれらしい説明ですが、後者について少し 筆者の考えを説明したいと思います。

先に、OSIはモデルで実際には使われていないという事を言いましたが、 実はOSIを実装したシステムがない訳ではなかったのです。しかし、 それらのシステムは一部を除いては使えないものであったのです(動作しな かったり、遅すぎたり...)。つまりは、モデルとしては良かったが、現実は それほど甘くはなかったという訳です。一方、TCP/IPはOSIモデルと比較して 実際に動くシステムとして実装されて行きました。また、同時に、 TCP/IP は階層モデルで説明するには少し不純な部分を持っているという面も あります。後程紹介する ARP や RARP と言ったプロトコルは、ネットワーク・ アクセス層とインターネット層の中間の性質をもっており、きれいな説明が 難しいのです。つまり、実装としての性格が優先された結果だと言えるのでは ないでしょうか。このような理由で、TCP/IPの説明の多くはOSI階層モデル を援用して、5階層あるいは4階層のモデルで説明されるという訳なのです。 従って、モデルはあくまでもモデルで、大体の理解をするためのものであると 思えば良いでしょう。

理論と現実
このような事情は、プログラミングにおけるオブジェクト指向と良く 似ていると言えます。モデルとしてはオブジェクト指向は美しいのですが、 純粋なオブジェクト指向言語は実行速度が遅い事が知られています。 従って、ある程度不純なオブジェクト指向言語の方が一般には良く使われて います。更に、そうした不純なオブジェクト指向言語のプログラミングでも、 純粋にカプセル化を行ったり、継承を重ねるのは、実行速度の面で不利で あることが良く知られています。別の見方をすると、通信階層のモデルも 言語モデルと同じように速度やプログラミングのしやすさという点で考えると、 適当な所で折り合いを付けるのが現実的だという風にも言えます(もっとも、 今の技術で7階層を作れば十分使えるものが作れそうでもありますし、いずれ 再びそういう技術の段階が訪れるのも必然でしょう)。

さて、以上のような理由からここでは以下のようなモデルでTCP/IPを説明する ことにします。

アプリケーション層
トランスポート層
ネットワーク層
データリンク層
物理層

見れば分かる通り、下の2階層がTCP/IP本来のネットワークアクセス層に あたるOSIモデルから借用した部分です。ネットワーク層から上はほぼ インターネット層と同じです。 それぞれの層の役割は下から順に次のようになります。

  1. 物理層

    物理層とは、イーサネット・ケーブル上の電気信号にかかわるような、 プロトコルのハードウェア的なレベルの階層です。物理層では、「パケット」 (フレームと呼ぶ事もあります)の形で、データを送受します。 ここにはケーブルなどの性質の定義なども含まれます。

  2. データリンク層

    データリンク層は、物理的に接続された端末間のデータの通信を 行います。最も低レベルでの通信を提供していると言っても良いでしょう。 ここでは、Ethernet(イーサネット)が代表的なデータリンク層のプロトコルです。 個体の識別には MAC アドレス(イーサネットアドレスとも言う)が用いられます。

    この層と次のネットワーク層の中間に、IPアドレスをイーサネット・アドレス に変換するARPプロトコルや、この逆の、イーサネット・アドレスを IPアドレスに変換するRARPプロトコルが含まれます(ARP は基本的なプロトコルです が、RARPはIPを持たないX端末などがIPを取得するために考案された少し古い プロトコルです)。

  3. ネットワーク層

    IP (Internet Protocol) が、ネットワーク層に属します。この層は 端末間の通信プロトコルである IP を提供します。IPは、伝送経路の確立や、 IPアドレス・クラスによるネットワークの論理的な管理等を担当しています。 IPヘッダーには、様々な情報が含まれますが、その中で最も重要なものは、 データの送り手と受け手のそれぞれのIPアドレスです。 また、通信状態を検知したり、管理するためのプロトコルであるICMP (Internet Control Message Protocol)もここに属しています。

  4. トランスポート層

    この層は、別々のマシンのそれぞれのプロセスのあいだの通信を 保障します(つまりはアプリケーション間通信を保証します)。 この層には、TCPUDPが含まれます。

    TCPは、通信中にエラーが起これば データの再送をするなど、確実なデータの伝送を保障します。しかし、その分TCPは、 コネクションの確立などに手間がかかります。 UDPでは、エラー回復は行われず信頼性は劣りますが、コネクションなしの データグラムの通信を行います。

    TCPもUDPも、プロセスを特定するのにポート番号を使います。

  5. アプリケーション層

    TCP/IPのプロトコルの上で走るたくさんのアプリケーションがあります。 また、berkley ソケット・ライブラリーという、ライブラリーを用いて、 自由に、TCP/IP上のアプリケーションを開発することが出来ます。 なお、この層ではアプリケーション毎に特有のプロトコルがあることに 注意しましょう。例えば、Webのアクセスのために用いられるプロトコルは HTTP(Hyper Text Transfer Protocol)であり、メイルの配送に使われる プロトコルは SMTP(Simple Mail Transfer Protocol)です。

とは言え、これを聞いてすぐに分かる人も少ないでしょう。ここでは あくまでも説明の都合上、簡単に紹介しただけで、詳しくは後の章で 説明しますので、そういう階層があるという事だけを理解すれば大丈夫です。



Noriyo Kanayama