インターネットの標準化

ネットワークは、LANとLANを繋いでWANへ広がり、それがインターネットへの発展してきました。
初期におけるLAN内のコンピュータ同士の接続は、同じメーカーのコンピュータが使われることが多く、 他のメーカのコンピュータと接続することが困難な時代がありました。
それは、メーカー独自の規則で通信することが多かったからです。
コンピュータとコンピュータ間でデータを送り合うには、双方が同じ約束事を事前に決めて、 それに基づいて送らないと、情報が伝わらないのです。
この約束事(規則)のことをプロトコルと呼びます。
インターネットでよく使われるプロトコルはTCP/IPですが、 その他の独自仕様のプロトコルとしては、Apple社のAppleTalkや Novell社が開発/販売したNetwareが有名です。他にの色々ありますが、 これら異なるプロトコルを使うコンピュータ同士では、通信できないのです。 そこで、このような異機種間の間でも通信する要求に対して、プロトコルの標準化が重要になります。

プロトコル階層

異機種間の間でも通信できるように、プロトコルの標準化行う上で考えなければならないのが、 プロトコルの階層化です。

さまざまな、ハードウェアがあり、さまざまなOSがある上で、通信プログラムを実現するための技術は莫大なものになります。
もし、『アプリケーションを作る場合、ハードの処理を含むすべてのソフト作る。』のでは大変です。

それで、各種アプリケーションの実現に必要な機能の役割を分割し、 分担してシステムを作ろうというわけです。
自身が担当する役割以外の処理は、別の担当に任せればよいという考えです。
また、分割された機能は、単純化されて実現が容易となる効力も生まれます。

そしてうまく機能を分割し、その役割ごとで標準化された規格化ができれば、 それを手本に、たくさんのメーカーで、その役割の商品を作ることができるようになります。
また、システムの一部に変更があっても、 この変更があった所だけの交換で動作可能なシステムが作れます。
例え電話回線で接続できるマシンがあるとして、 それを無線で接続できるように変更した場合、 インターネットブラウザのソフトウエアを交換することなく、動作できるというわけです。

このようなことを実現するための役割分担が階層化です。
これを実現するためには、階層の一部を他の仕様に変えても他の階層に 一切影響しないように、うまく分担した階層にする必要があります。

こうやって、各役割を階層化して その各要素を実現する規則はエンティティ(entity)と呼ばれます。
また、ある階層が上位層に提供する操作の集合をサービスと呼びます。
さらに、上位層プロセスからその層に対するアクセス方法をインターフェイスと呼びます。
そして、同位階層のエンティティ間で交換される情報のフォーマットやその意味の集合を プロトコルと呼びます。

OSI参照モデル

前述の思想で役割を分担して、階層化したISOのお手本(モデル)を示します。

異機種間ネットワーク通信において、 国際標準化機構(ISO:International Organization for Standardization)で提唱した、 ネットワークプロトコルの7階層モデルを以下に示します。
これは、OSI参照モデル(Open System Interconnection:開放型システム相互接続)と呼ばれます。

レイヤー番号レイヤー名概要
応用層アップリケーションレベルの通信規則
プレゼンテーション層やりとりするデータ表現方法のプロトコル(フォーマットやコード)
セッション層通信の開始から終了までの一連の期間に対する管理
トランスポート層プロセス間通信のサポート、システム間の論理的データ転送規定
ネットワーク層上層のデータをあて先まで伝達するための規則
データリンク層隣接するマシンまで伝達するための規則
物理層コネクタ形状などの機械的や電気的なものなど物理的な仕様

この指針に沿ってプロトコルなどを決め、それに従ってハードやソフトを作れば、異機種間の通信でも容易に可能となるであろう・・
と考えられた階層(レイヤー)分割で、現在でもよく使われています。

インターネットの発展

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モデル)
レイヤー番号レイヤー名レイヤー名プロトコル例
応用層アプリケーション層HTTP SMTP FTP TELNET DNS
プレゼンテーション層
セッション層
トランスポート層トランスポート層TCP UDP
ネットワーク層インターネット層IP ICMP
データリンク層ネットワークインターフェイス層ARP Ethernet
物理層

TCP/IPプロトコルが、インターネットの業界標準になっているわけですが、だからといってTCP/IP階層がモデルとして、 OSI参照モデルより優れているわけではありません。 モデルとしては不十分で、そのためOSI参照モデルのレイヤー用語は現在でもよく使われます。
特にアプリケーション層のプログラムを 正確に作る時、TCP/IP階層は分かり難いモデルになっていると感じます。(シンプルで単に動作するものはすぐ作れるのですが、 異機種間で同じように動作するプログラムを、厳格に作るのが難しいと感じます。)

PDU(Protocol Data Unit)

各プロトコルの階層で、データを運ぶ入れ物はPDU(Protocol Data Unit)と呼ばれます。
そのイメージは封筒に似ています。各封筒は、運ぶ仕組みや、運ぶ人が異なります。
ネットワークでも運ぶ仕組みや役割が異なるので、PDUの構造も違います。