ここではコンピュータ通信を行うプロトコルの共通の基盤となる概念であるOSI参照モデルを説明します。OSI参照モデルの必要性や構造、機能などを簡単にまとめています。
OSI参照モデルはISOとITU-Tで標準化されたコンピュータ通信を行うための基本的な共通の概念です。コンピュータは何らかの法則や規則に則って動作しますが、コンピュータ通信に必要な機能を分類・整理し、それぞれの機能が協調し一体となってネットワーク通信をできるようにする枠組みがOSI参照モデルです。この共通の枠組みに沿ってシステムを構築することでコンピュータ同士の通信が特定の機種やメーカーに依存することなく行うことができるようになります。
OSI参照モデルは下図のように7層に分かれていてそれぞれの層が通信に必要な特定の手続きを規定しています。コンピュータ通信に関係するプロトコルは以下のいずれかの階層に該当する機能として位置づけられることになります。
OSI参照モデルでは標準化の為の方法として階層化を行います。コンピュータ通信に必要な機能を明確にして役割毎に分類することで一貫性を保ちながら通信の多様性と接続性を両立します。OSI参照モデルの階層は全7層ですが、実際にはその上下にアプリケーションプロセスとメディアが位置していて全体としてコンピュータ通信を実現します。ここではOSI参照モデル各層の役割を簡単に説明します。
レイヤ | 名前 | 役割 |
アプリケーションプロセス | データ通信の依頼者 | |
7層 | アプリケーション層 | データ通信サービスの提供 |
6層 | プレゼンテーション層 | データの変換 |
5層 | セッション層 | データの受け取り確認 |
4層 | トランスポート層 | データの運搬方法の決定 |
3層 | ネットワーク層 | データの送信先の決定 |
2層 | データリンク層 | データの符号化 |
1層 | 物理層 | ビット列の信号生成 |
メディア | 信号の伝搬 |
OSI参照モデルの7層の上(もしくは横)にはアプリケーションプロセスがあります。端的に表すとユーザが使用するアプリケーションソフトと言い換えることができ、ネットワーク機能を使用する主体となる存在です。アプリケーションプロセスはネットワーク通信を必要とする場合にアプリケーション層に対して自分の要求を出しネットワークサービスを使用します。
例えるなら仕事を依頼するお客や上役のような存在です。仕事を依頼した側は、過程は気にせず結果にだけ注目します。つまりアプリケーション層に依頼を出し、その結果を受け取ることだけを行うのがネットワークを利用する立場から行うアプリケーションプロセスの動作です。
アプリケーション層はアプリケーションプロセスとの窓口の役割をします。アプリケーションプロセスから依頼を受け取り、結果を返すのがこの層の役割です。アプリケーションプロセスからは誰に対して何をするのかの指示があり、その目的に応じて適切な機能を選択して相手との接続(アソシエーション)を開始します。アプリケーション層はアプリケーションプロセスからするとネットワークの機能を提供してくれるサービス提供者の位置づけとなり、逆にアプリケーションプロセスはアプリケーション層からするとネットワークサービスの利用者という関係になります。アプリケーション層が提供するネットワークサービスはファイル転送や遠隔操作などの機能ごとに分かれていて、アプリケーションプロセスの依頼に対する適切な機能を使用しプロセスごとに情報を整理します。整理した情報はその情報の取り扱い方法と共にプレゼンテーション層に引き渡します。
アプリケーション層はちょうど上司から仕事を依頼された部下のような存在で、上司から受けた指示の内容に従って先方との調整を行い、結果を報告する責任を持ちます。
プレゼンテーション層は取り扱う情報を整理する役割を持ちます。アプリケーション層とネットワークの間で交わす情報の表現を適切に変換するのがこの層の役割です。アプリケーション層から渡される情報はコンピュータが解釈しやすい抽象構文で作られていますが、そのままの状態では通信には不向きであるためプロセスごとにネットワークに適した転送構文へと変換を行います。プレゼンテーション層自体は表現を統一するという意味も持ちます。
プレゼンテーション層の動作はビジネス文書の作成に似ています。口頭による伝言は人に対して意味を伝えるには十分ですがビジネスの取引で使用するには不十分です。会社における公式なやり取りにはビジネス文書を使用して間違いを起こさないようにするように、プレゼンテーション層はデータ転送においてあいまいな表現を排して伝送に適した表現を使用することで解釈の違いが出ないようにしています。
セッション層はデータを相手に届ける役割を担います。セッション層では主に転送モードの制御と同期の制御を行い、プロセスのデータが確実に相手のプロセスに届くことを保証します。転送モードの制御ではプロセス間ごとに半二重、全二重の方法によって送信権(トークン)を管理し、データが常に送信権を持つ側から送られるように制御することで転送の秩序を保ちます。同期の制御では送信したデータが受信側で受け取ることができた事を確認することで確実なデータ転送を保証します。受け取りの確認はデータの流れの中に設けた同期点ごとに行われエラーが発生すると同期点から再送されることになります。
人が話をする際に会話の切れ目で自分の発言する順番を見極めたり、相手の表情や返事で理解度を推し量ったりするように、セッション層は確実にデータが相手に届くことに責任を持ちます。
トランスポート層はデータを運ぶ役割を担います。セッション層の要求に応じた通信路の選択・確立とデータ運送を行い、セッション層が期待する品質でのデータ運搬を提供するのがトランスポート層の役割です。トランスポート層より下のサービスはデータ速度や信頼性などの性質が一定ではありません。トランスポート層はそれらばらばらの品質の伝送路の差を多重化や優先制御などのプロトコル的機能で補いセッション層の要求に見合う通信路とデータ運送を提供します。またセッション層から上の層はプロセス間通信を行いますが、このトランスポート層を含めて下の層はシステム間通信を行います。トランスポート層の役割は下層のシステム間通信のサービスを上層のプロセスに対して提供するという意味もあります。
トランスポート層の提供する機能は電話や宅配のサービスに当てはまります。利用者は送りたい”もの”に応じてサービスを選択します。言葉を届けたい場合は電話や郵便、荷物を届けたい場合は宅配などを選択すると、サービス事業者は相手まで運ぶことに責任を持ちます。
ネットワーク層はデータを伝達するための経路を決める役割を持ちます。通信を行う相手のシステムに対してデータを届けるために、直接は到達できないような場合でも中継者を使ったデータの伝送経路を決定するのがネットワーク層の役割です。ネットワークは複数のノードが間接的につながった形態になっていることが多く、データの宛先に直接到達できるとは限りません。送り先の相手が間接的に接続されていたとしても適切な中間者を経由して伝達できる経路を決定します。
人の例にたとえると通訳を入れた会話が当てはまります。二者で会話する際には本人と直接話すことが基本となりますが、相手が外国の方であった場合などは間に通訳を入れて話すことになります。この場合、会話の相手とは間接的となり直接言葉を交わすのは通訳です。通訳を含めて会話に関わる全員がだれに情報を届けるのかを理解し、そのためにはどちらに向いて話をすればよいのかを正確に知ることで遠方との会話を成立させます。特に中間者(通訳)は間違っても発言した相手に言葉を戻してしまわないようにしなければなりません。
データリンク層はデータの符号化です。ネットワーク層から受け取ったデータを伝送に適切なビット列(フレーム)へと変換します。ネットワーク層から受け取ったデータはデータリンク層では意味を持たないため、伝送するために物理層に合わせて予め決められた適切な変換規則に則ってビット列を作成します。データリンクによる符号化は直接話す相手と方法を合わせておく必要があります。
人にたとえると相手との会話で使用する言語(単語、文法)です。会話を成立させるためには言語が同じでなければなりません。そのため直接話す相手とは言語を合わせておく必要があります。ネットワーク層で通訳を介する例を挙げましたが、自分と先方とでは言語が異なっている場合に通訳を入れることで遠方でも言語の違いを吸収することで会話が成立すると考えることもできます。またデータリンクの言葉はそのまま物理層で扱われること(ベースバンド)もあることから、早口言葉のように発音しにくく(聞き取りにくく)ならないように言葉を選ぶことで物理層に気を配ります。
物理層は電気的信号を作り出す役割を持ちます。データリンク層から受け取ったビット列を信号に変換してメディアに送り出します。データリンク層から受け取ったビット列はデジタルで表現された情報ですが、その情報を物理的な現象を用いて信号を生成しメディアを通じて物理的に伝送します。またモデムの制御やコネクタの形状などのインターフェイスも物理層に含まれます。
物理層は人が会話で使用する声や文字に例えることができます。例えば「リンゴ」という文字を見たとき頭の中に言葉が浮かびますが、それはデータリンク層に情報がある状態です。相手に届けるためには声や文字に起こす必要があります。頭の中に言葉がある状態から声に出した瞬間、その間で必要となる機能(言語野、喉、口、舌、耳、鼓膜など)が物理層です。
メディアは信号(波)を伝えるための媒体です。物理現象として電気や光(電波)を伝えるための性質を持っています。通信ケーブルや電波、回線終端装置であるモデムやDSU、ONUがメディアに含まれます。メディアは通信をするために必要ではありますが、通信をするためにコンピュータが備える機能ではないためOSI参照モデルには含まれません。そのため通信に使用するケーブルや電波は物理的に必要ですが物理層ではなくメディアです。そして回線終端装置はその名前の通り回線に付随して回線の品質を保つ(メディアを回線として成立させる)ためのメディアの一部です。
メディアは人にたとえると空気です。人との会話には声(音)を使用しますが、声は空気を媒体にしていますので空気がなくては会話ができません。人間に対する空気のように、コンピュータからするとメディアは波(電気)を伝える性質を持った単にそこにあるものです。
ここからはOSI参照モデルで示されているすべての層に共通する層間の関係について説明します。
各層の上下の位置関係はサービスユーザとサービスプロバイダの関係になります。サービスユーザはサービスプロバイダから提供されるサービスを利用することでネットワークの機能を使用できるようになります。サービスプロバイダはサービスユーザに対して自身の持つネットワークの機能を提供します。このサービスの利用、提供はサービスプリミティブによって実現されます。
サービスプリミティブはネットワークサービスを提供・利用するためのインターフェイスでIPにおけるsocketのようなものです。サービスプロバイダの提供するサービスはサービスプリミティブによって実現され、上で説明したサービスユーザとサービスプロバイダの関係が成立します。各層には様々なサービスプリミティブが規定されていてサービスユーザはプロバイダのサービスを使用する時に適切なものを選択して使用します。サービスプリミティブには4つのタイプ(要求、指示、応答、確認)があり、例えばコネクション確立のサービスを使用する際には下図のような位置づけになります。サービスプロバイダはユーザには透過的であるため、サービスプリミティブを利用した機能は通信相手の自分と同じ層に対して通信の意思を示す意味になります。コネクション以外にもデータ転送やリセットなどの様々なサービスが各層毎に定義されています。
この仕組みはOSIプロトコルがコネクション指向として動作する前提で考えられたものであるため、コネクションモードの様々な要求に対するサービスプリミティブを持ちますが、後に追加されたコネクションレスモード(後述)はデータを送信するためのサービスプリミティブ([N]-UNITDATAのみ)が存在します。またサービスプリミティブは抽象化された概念であって具体的な実装については定義されていません。
サービスプリミティブはサービスを利用するためのいわば「操作」ですが、サービスプリミティブによって実際に制御される対象はサービスユーザが作成するデータユニット(Data Unit)です。データユニットはOSIネットワークで使用されるデータを一つの塊にした情報の単位で、サービスユーザは自分が作成したデータユニットをサービスプロバイダに引き渡す際にサービスプリミティブによってどのような扱いにするのかを示します。サービスプロバイダはユーザから受けっとったデータユニットをその依頼内容に合わせて適切なサービス(転送)を提供します。
データユニットはPCI(Protocol Control Information)の有無によってPDU(Protocol Data Unit)とSDU(Service Data Unit)に区別されます。PCIはその階層で使用するプロトコルのヘッダで、サービス提供に必要な情報が入っています。PCIが付与されていないデータユニットをSDU、PCIが付与されたデータユニットをPDUと呼びます。この呼び方はある層に視点を置いた際の主観的な呼び方であるため、別の層から見ると呼び方が変わることに注意が必要です。下図はN層に視点を置いた際のデータユニットの名称を表しています。
データユニットは通信を行う際に各層でPCIを付加されながら層間を引き渡され、送信されます。宛先にたどり着いたデータユニットは、今度はPCIを外されながら層間を引き渡される事になります。概念的には下図のようになります。
これまで説明してきたサービスプロバイダとサービスユーザ間で行われるやり取りはSAP(Service Access Point)という共通の識別点を対象として行われます。SAPは下の層が上の層のエンティティを識別するために割り当てる点でエンティティ毎に、または同じエンティティ対して複数配置することが可能です。通信を行う際には同じ層間のSAPに対して行われることになります。各層のエンティティはSAPに対してIDを付与しSAPアドレスとして使用します。
そして上層の識別ではなくエンティティそのものを識別する必要がある場合はSAPと同じようにIDを付与しエンティティタイトルとして使用します。例えばアプリケーション層に対して設定した場合はアプリケーションエンティティタイトル、ネットワーク層の場合はネットワークエンティティタイトルとなります。
エンドポイントIDはSAP内でエンドポイントを一意に識別が必要な場合に付与するIDでエンティティに付与されたSAP内で一意の値です。下図ではSAPやエンドポイントIDをエンティティに対して1つになるように示していますが、必要に応じて複数のSAPやエンドポイントIDをエンティティに紐づけることが可能です。
OSIプロトコルにはこれまで説明した7つの階層わけの他に縦割りの区分があります。この区分によってOSIの動作はコネクションモードとコネクションレスモードの2つの動作モードに分かれます(縦割りの区分のイメージは次の「プロトコルのドキュメント」の図を参照してください)。コネクションモードは事前に相手との接続を確立してから通信を行うモードで、すでに規格化されているX.25に合わせるなどの配慮がされながら標準化された動作モードです。コネクションレスモードはコネクションモードの後に規格化された相手との事前接続を行わずに通信を行うモードです。OSI参照モデルとコネクションモード、コネクションレスモードの関連する基本的な標準は下図のとおりです。
コネクションモードはTCP/IPのTCPと同じ考え方ができますが、最も異なっているのはTCP/IPの関連プロトコルではTCPのみがコネクション指向の動作を行うのに対してコネクションモードのOSIプロトコルはすべての階層が一貫してコネクション前提で動作することです。それぞれのモードは動作モードに沿った一貫したサービスを提供しますが、コネクションモードとコネクションレスモードの変換機能が設けられています。これによってコネクションモードのサービスをコネクションレスモードのクライアントが使用することが(またはその逆が)できるようになります。
OSI参照モデルと各層の標準に関するドキュメントは下図のようになります。コネクションモードの1~3層はX.25を割り当てたもの、コネクションレスモードの1,2層はEthernetを割り当てたものになります。下図はOSI参照モデルに関係する基本部分だけを抜き出したものでそのほかに関係する標準が多数存在します。