OSI 参照モデルと IP セットモデルとは
各種 NW プロトコルはレイヤーと呼ばれるもので分類されています。このレイヤーは主に OSI 参照モデルと IP セットモデルが使われています。
現在主流である TCP/IP は、IP セットモデルに基づいていますが、"レイヤー"という言葉は、慣習的に OSI 参照モデルに 基づいたレイヤーを示します。
このように、実用的なのは IP セットモデルだったりするのですが、会話で出てくるレイヤーは OSI 参照モデルのものを指すことが多いです。
例えば、レイヤー 2 スイッチ、レイヤー 3 スイッチ、レイヤー 4 スイッチ、レイヤー 7 スイッチは、OSI 参照モデルのレイヤーを示しますし、物理的に接続されていないことに起因する障害を "レイヤー1 障害" と呼んだりします。
つまり、会話では OSI 参照モデルが頻繁に使われ、実装としては IP セットモデルが頻繁に使われる、という不思議な状態なのです。
歴史と役割、比較表
OSI (Open systems interconnection) 参照モデルとは、国際標準規格 (ISO) と CCITT が作成した階層モデルです。
レイヤー (層) 間が互いに独立することにより、レイヤー毎の個別の発展を促す役割を持っています。
例えば現在のレイヤー 3 の主たるプロトコルは『IPv4』ですが、このIPv4 がレイヤー 2 の Ethernet や レイヤー 4 の TCP/UDP と依存関係があるのであれば、 IPv6 への移行は極めて困難になります。IPv6 への移行に伴い、レイヤー2 やレイヤー4 のあらゆるプロトコルを IPv6 へ適合させなければならないからです。
レイヤーを分けることで、Ethernet は特にレイヤー 3を意識することなく (つまり IPv4 であろうが IPv6 であろうが関係なく) 通信できますし、TCP/UDP についても同様、レイヤー 3 を意識することなく通信できるのです。
このように始まった OSI 参照モデルですが、IP が台頭・発展し始めたとき、OSI 参照モデルに則るのが難しかったのです。
平たく言うと、技術発展の主体となるアプリケーション開発者が「レイヤー5 から 7 って分ける意味ある?」と言わんばかりに、レイヤー5~7 のプログラミングをモジュールとして分けることなく作り込むことが多かったのです。
結果、OSI 参照モデルには適合しないアプリケーションばかり出来上がり、OSI 参照モデルは名ばかりのものになりました。
OSI 参照モデルと IP セットモデルの比較を下表に示します。
OSI 参照モデルの具体例 FTPs
極めて稀な例ですが、OSI 参照モデルのすべての階層に対応しているプロトコルがあります。
それは FTPs (FTP over TLS) です。これは元々 OSI 参照モデルに則ろうとして作ったわけではなく、TLS の登場でうまくこのモデルにハマった、というのが実情でしょう。
OSI 参照モデルの各レイヤーの詳細
各レイヤーの役割は以下の通りです。
1. 物理層
ケーブルの種類やコネクタの形状等の物理的な要件、伝送媒体 (電気や光) での bit 転送を行なう上でのノイズの基準値等を定義します。
具体的な実装は、UTP (Unshield Twist Pair) ケーブルの Category 5e/6/6a や、光ケーブルのシングルモード/マルチモード、同軸ケーブル、STP (Shield Twist Pair) ケーブル等の種類があります。
2. データリンク層
直接、もしくはレイヤー2 機器 (L2 スイッチ等) を挟んで接続された機器間での通信方法を定義します。
具体的なビット列をどのようにするかなどの規定をしています。このレイヤーでの通信先は通信したい機器とは限らず、ルータや L3 スイッチ等のデータ転送機器の場合もあります。
実装としては Ethernet が一番有名ですが、他に PPP や PPPoE、ATM、フレームリレー等があります。
ネットワーク層は宛先まで変化してはならないですが、データリンク層はその間、いくつ変わっても問題ありません。むしろ、ケーブル等の物理的な変化を吸収するのがデータリンク層の役割です。
データリンク層は、物理層が何かによって、使えるものが限られますが、例えば光のマルチモードの OM3 という種類は 100 Mbps から 100 Gbps まで幅広く対応しています。
3. ネットワーク層
通信したい機器 (IP であれば宛先 IP アドレス) への通信経路を決定します。(ルーティングによる経路選択など)
実装は IP (インターネットプロトコル) がデファクトスタンダードです。
4. トランスポート層
通信元の機器と通信したい機器の間での通信ステータスを管理します。(エラー訂正、再送制御など)
実装は TCP/UDP がデファクトスタンダードです。
TCP を使うか UDP を使うかは、アプリケーション開発者が選択しますが、NTP や syslog 等、RFC では『UDP で使うべき』とされているものであっても、TCP で設定できるソフトウェアも多々あります。
5. セッション層
通信元の機器上と通信したい機器上の両通信プログラム間での通信手順を定義します。(通信方式、接続/切断の手順や異常時の回復手順など)
具体的な実装としては前述の通り、TLS (旧 SSL) が挙げられます。
6. プレゼンテーション層
データのフォーマット変換を実施します。(文字コードの変換等)
有名な実装はやはり前述の通り、FTP のアスキーモードです。
Windows で作成した html ファイルなどは [文字コード = Shift-JIS] と [改行コード = CR+LF]になりますが、これを Linux に FTP でアスキーモードでアップロードすると、[文字コード = UTF8-JP] と [改行コード = LF] に自動で変換してくれます。
この変換をしたくない場合はバイナリモードを使います。
例えば有名な FTP クライアントソフト『FFFTP』では以下のように設定ができます。
「オプション」の「環境設定」をクリックし、「転送1」をクリックすると、転送モードとして「常にアスキーモード」「常にバイナリモード」「ファイル名で切替え」の 3 つが選択できます。
デフォルトでは「ファイル名で切替え」が選ばれています。
7. アプリケーション層
アプリケーション間で実際に行いたいことを実現するための通信手続き等を定義します。
例えば web サーバにある html ファイル等をダウンロードしたいときは GET メソッドを使うのはこの層の仕事です。
コメント