ネットワークは、LANとLANを繋いでWANへ広がり、それがインターネットへの発展してきました。
初期におけるLAN内のコンピュータ同士の接続は、同じメーカーのコンピュータが使われることが多く、
他のメーカのコンピュータと接続することが困難な時代がありました。
それは、メーカー独自の規則で通信することが多かったからです。
コンピュータとコンピュータ間でデータを送り合うには、双方が同じ約束事を事前に決めて、
それに基づいて送らないと、情報が伝わらないのです。
この約束事(規則)のことをプロトコルと呼びます。
インターネットでよく使われるプロトコルはTCP/IPですが、
その他の独自仕様のプロトコルとしては、Apple社のAppleTalkや
Novell社が開発/販売したNetwareが有名です。他にの色々ありますが、
これら異なるプロトコルを使うコンピュータ同士では、通信できないのです。
そこで、このような異機種間の間でも通信する要求に対して、プロトコルの標準化が重要になります。
異機種間の間でも通信できるように、プロトコルの標準化行う上で考えなければならないのが、
プロトコルの階層化です。
さまざまな、ハードウェアがあり、さまざまなOSがある上で、通信プログラムを実現するための技術は莫大なものになります。
もし、『アプリケーションを作る場合、ハードの処理を含むすべてのソフト作る。』のでは大変です。
それで、各種アプリケーションの実現に必要な機能の役割を分割し、
分担してシステムを作ろうというわけです。
自身が担当する役割以外の処理は、別の担当に任せればよいという考えです。
また、分割された機能は、単純化されて実現が容易となる効力も生まれます。
そしてうまく機能を分割し、その役割ごとで標準化された規格化ができれば、
それを手本に、たくさんのメーカーで、その役割の商品を作ることができるようになります。
また、システムの一部に変更があっても、
この変更があった所だけの交換で動作可能なシステムが作れます。
例え電話回線で接続できるマシンがあるとして、
それを無線で接続できるように変更した場合、
インターネットブラウザのソフトウエアを交換することなく、動作できるというわけです。
このようなことを実現するための役割分担が階層化です。
これを実現するためには、階層の一部を他の仕様に変えても他の階層に
一切影響しないように、うまく分担した階層にする必要があります。
こうやって、各役割を階層化して その各要素を実現する規則はエンティティ(entity)と呼ばれます。
また、ある階層が上位層に提供する操作の集合をサービスと呼びます。
さらに、上位層プロセスからその層に対するアクセス方法をインターフェイスと呼びます。
そして、同位階層のエンティティ間で交換される情報のフォーマットやその意味の集合を
プロトコルと呼びます。
前述の思想で役割を分担して、階層化したISOのお手本(モデル)を示します。
異機種間ネットワーク通信において、
国際標準化機構(ISO:International Organization for Standardization)で提唱した、
ネットワークプロトコルの7階層モデルを以下に示します。
これは、OSI参照モデル(Open System Interconnection:開放型システム相互接続)と呼ばれます。
レイヤー番号 | レイヤー名 | 概要 |
---|---|---|
7 | 応用層 | アップリケーションレベルの通信規則 |
6 | プレゼンテーション層 | やりとりするデータ表現方法のプロトコル(フォーマットやコード) |
5 | セッション層 | 通信の開始から終了までの一連の期間に対する管理 |
4 | トランスポート層 | プロセス間通信のサポート、システム間の論理的データ転送規定 |
3 | ネットワーク層 | 上層のデータをあて先まで伝達するための規則 |
2 | データリンク層 | 隣接するマシンまで伝達するための規則 |
1 | 物理層 | コネクタ形状などの機械的や電気的なものなど物理的な仕様 |
この指針に沿ってプロトコルなどを決め、それに従ってハードやソフトを作れば、異機種間の通信でも容易に可能となるであろう・・
と考えられた階層(レイヤー)分割で、現在でもよく使われています。
OSIプロトコルとTCP/IPプロトコルの開発は、ほぼ同じ時期より始まりました。
しかし現在は、OSIプロトコルはほとんど使われてなく、
TCP/IPプロトコルが業界標準(de facto standard)のプロトコルになっています。
これは、実装の進め方の違いといわれています。
OSIプロトコルは、学者などの専門家によって議論され、 最終的には投票で決まったものです。
対して、TCP/IPプロトコルは、『こうあるべき』というもの合意のもと、まずは動作するプログラムが作られて、
それをネットワークで配布し、色々な研究者によって改良されながら詳細な仕様が決まって『標準』となったものです。
最終的には、まず『実装ありき』の考えを先行したTCP/IPプロトコルが制した現状になっているのです。
(INET92でMITのDavid Clark氏のインターネット発展を表現した言葉が有名です。
→
We reject kings, presidents , and voting;
we believe in rough consensus and running code)
そして、それを取り仕切るのがIETF(Internet Engineering Task Force)です。
IETFへの参加は自由であり、個人レベルの参加も可能です。
具体的には、Internet-Draftへの投稿で一時公開され、それが業界で有用な情報と判断されて申請が承認されると
最終的に、RFC(Request For Comments)の番号がつけられ公式ドキュメントとなり
サーバで恒的に公開されます。
それが、インターネットの指針や各プロトコルの仕様書になっているのです。
(公式ドキュメントは、http://www.ietf.org/rfc/rfc番号.txt で公開しています。例
IP)
TCP/IPのプロトコルも、OSI参照モデルの階層と同じように階層で分けることができます。
その分け方は、OSI参照モデルの上位3層をまとめてアプリケーション層としています。
また、データリンク層と物理層をまとめて、ネットワークインターフェイス層と呼ぶことが多いようです。
その他、次のように呼び方も少し異なります。(具体的プロトコル名を含めて示します)
OSI参照モデル | TCP/IPのプロトコル階層(DARPモデル) | ||
---|---|---|---|
レイヤー番号 | レイヤー名 | レイヤー名 | プロトコル例 |
7 | 応用層 | アプリケーション層 | HTTP SMTP FTP TELNET DNS |
6 | プレゼンテーション層 | ||
5 | セッション層 | ||
4 | トランスポート層 | トランスポート層 | TCP UDP |
3 | ネットワーク層 | インターネット層 | IP ICMP |
2 | データリンク層 | ネットワークインターフェイス層 | ARP Ethernet |
1 | 物理層 |
TCP/IPプロトコルが、インターネットの業界標準になっているわけですが、だからといってTCP/IP階層がモデルとして、
OSI参照モデルより優れているわけではありません。
モデルとしては不十分で、そのためOSI参照モデルのレイヤー用語は現在でもよく使われます。
特にアプリケーション層のプログラムを
正確に作る時、TCP/IP階層は分かり難いモデルになっていると感じます。(シンプルで単に動作するものはすぐ作れるのですが、
異機種間で同じように動作するプログラムを、厳格に作るのが難しいと感じます。)
各プロトコルの階層で、データを運ぶ入れ物はPDU(Protocol Data Unit)と呼ばれます。
そのイメージは封筒に似ています。各封筒は、運ぶ仕組みや、運ぶ人が異なります。
ネットワークでも運ぶ仕組みや役割が異なるので、PDUの構造も違います。