[TCP/IP とインターネットの仕組み]に戻る
[TCP/IPの概要] [ルーティング] [プロトコル階層] [ポートの概念]

プロトコルの階層

プロトコル階層の概念と OSI 参照モデル

機能を分けて考える 通信を行うためには必要な非常に多くの様々な機能が必要です。 通信プロトコルはそのすべての機能を規定しなければなりません。 この際に、非常に多くの機能を、その機能ごとに分割して考えると、 理解しやすく設計も容易になります。
OSI参照モデル OSI(International Organization for Standardization)という組織がISO(Open System Interconnection) というプロトコルを作りましたが、この際にOSIがこのプロトコルを機能ごとに分割し、 階層的に考えることを説明しました。この時に彼らはプロトコルを7つの階層に分けて作ろうとしたのです。 OSI参照モデルの7つの階層は以下の通りです。

階層機能
アプリケーション層
(application layer)
その名前の通りアプリケーションの通信規約です。 ネットワークアプリケーションにおいては、どのような入力が あったときに、どのような応答をするかなどの規約が 必要となりますが、それらのプロトコルはこの階層に属します。
プレゼンテーション層
(presentation layer)
この層もその名前の通りデータ表現(presentation)を規定するものです。 つまり、送りたい情報をどのような形のデータにして送るかを決める のです。暗号化はどのようなものを用いるのか、圧縮はどのような 形式なのかを規定するのです。
セッション層
(session layer)
通信の接続開始して、情報をやりとりして、 処理を行う一連の動作をセッションと表現することがあります。 このような接続の確立、中断、再開、また通信を 半二重通信なのか全二重通信で行うかなどを含む、一連の手順が この層に含まれます。
トランスポート層
(transport layer)
データの信頼性を高めるために必要な規約が含まれます。 これには誤り訂正、パケット通信における到着順の保証などが 含まれます。
ネットワーク層
(network layer)
この層の機能はネットワーク機能、つまりコンピュータへの アドレスに関する規約、ネットワーク内でのルーティングの方法、 データ転送手順などが含まれます。
データリンク層
(datalink layer)
物理的に接続されているマシン同士のデータのやりとりについての 規約がこの層に含まれます。物理レベルのパケットの形式や、 アドレッシングなどを規定します。
物理層
(physical layer)
物理的な規約を規定します。電圧、インピーダンス、周波数、 変調方式などの電気的特性に加え、ピンの形状や、通信線の 形状や長さなどがこの層に含まれます。

TCP/IPネットワークにおける階層

TCP/IPは7階層に明確に分割されていない OSI参照モデルではプロトコルを7階層に分けていますが、 TCP/IPのネットワークで用いられるプロトコルは、厳密に この7階層に分けられていません。しかし、機能的にはこの OSI参照モデルの7階層のすべてを含んでいます。 対応は以下のようになります。
アプリケーション層
プレゼンテーション層
セッション層
telnet, FTP, WWW, SMTP, POP3, DNSなど
トランスポート層 TCP, UDP
ネットワーク層 IP, ICMP*
データリンク層 イーサネット, PPP, FDDIなど
物理層 同軸ケーブル、ツイストペアケーブル、RS-232Cなど
*ICMPはIPパケットに入れて送られるので、IPの上位の層とも とれるがIPの一部ということになっている
TCP/IP参照モデル OSI参照モデルは抽象的な概念を説明するのにはよいが、 現実に存在し、実際の利用に耐えてきたTCP/IPを説明するのには合わない ということで、TCP/IP参照モデルというものが考案されました。 TCP/IPモデルは以下のようなものです。
アプリケーション層各種アプリケーション
トランスポート層TCP, UDP
インターネット層IP
ホスト-ネットワーク層物理的な接続と、 サブネットにおけるデータ通信を規定する
このようにTCP/IP参照モデルは4層から成っていて、OSI参照モデルの プレゼンテーション層とセッション層はありません。このモデルを 考案した人たちは、これらは無駄なものと見なしているようです。

しかし、NFSやSMBといったファイルシステムの共有プロトコルは OSIモデルにおける、セッション層と見なす人もいます。

通信のイメージ

このように階層に分けられたそれぞれのプロトコルを使って 通信を行う場合、実際にこれらの階層がどのようにその通信に 関係するのかをイメージするために、一つの例を考えてみましょう。 ブラウザを起動して、私のホームページ (http://www.kitakyu-techno-ctr.co.jp/~fujiki) を見ようとする場合、各プロトコル階層はどのように機能するのでしょうか。
以下の例では、物理層ではイーサネットが使われていることを想定して、 記述します。

各階層が行う処理の実例

アプリケーションからTCPへ まず、アプリケーションであるブラウザは最上位の層に位置する http(Hyper Text Transfer Protocol)の規約に従って WWWサーバに(www.kitakyu-techno-ctr.co.jp)に対してコマンドを送ります。 このHTTPプロトコルでは、"GET /~fujiki/index.html"というコマンドを 送ると、そのページのデータを転送すると規定されています。 それで、ブラウザは"GET /~fujiki/index.html"という内容のパケットを www.kitakyu-techno-ctr.co.jpに送ってくれるように TCPの 処理をつかさどるモジュールに依頼します。
TCPからIPへ それを受け取ったTCPはパケットのチェックサムを計算したり、 相手からそのパケット受け取ったことを知らせてもらえるように、 そのパケットを識別するシーケンス番号をつけます。相手から 「この番号のパケットは受け取ったよ」と知らせてもらえるようにです。 他にもいろんな仕事をしますが、いずれもデータに信頼性を 与えるための仕事をするのです。 このモジュールはそれに必要な情報をTCPヘッダに入れて、 TCPパケットを作り、IPをつかさどるモジュールに転送を 依頼します。
IPからイーサネットへ IPは宛先に到着する経路にある次にマシンに依頼されたパケットを 送るために、イーサネットのデバイスドライバに必要な情報を渡します。 そしてルータに情報を送るのです。

ルータで

イーサネットからIPへ ルータの物理的なデバイスであるイーサネット にパケットが入ってくると、それを処理するべきプログラムに渡されます。 IPパケットを含む内容が送ってくると、 そのパケットを、そのゲートウェイでIPの処理を行っている モジュールに渡します。
IPからイーサネットへ そのパケットは自分宛のパケットではないので、 IPパケットがさらに宛先に近づくために、次のルータに 渡すために、イーサネットのドライバを使ってそれを送信します。 この時に使用するイーサネットのポートはIPパケットを受け取った ポートとは異なるでしょう。 イーサネットのポートを2つ持つルータであれば、 通常入ってきたポートの反対のポートに送り出すことになります。

ぞれぞれのルータでこの処理が繰り返されます。

受信ホストで

イーサネットからIPへ ルータをいくつも経由して、宛先ホストのイーサネットの ポートにデバイスに、パケットが届いたとします。ここでも ルータと同じように、イーサネットが受け取った情報に含まれる IPパケットの部分をIPの処理プログラムに渡します。
IPからTCPへ IPのモジュールは自分宛のパケットであるので、自分の上位の プロトコルに渡します。IPヘッダを見て このパケットに含まれるのはTCPであることがわかるので、この パケットをTCPを処理するモジュールに渡します。
TCPからアプリケーションへ TCPの処理を行うモジュールは、データが正しいか調べ、 データの順番が間違っていれば、それを並べ替えます。 そして、ヘッダに指定されているポートからの受け取りを 待っているプログラム、つまりこの場合WWWのサーバに渡すのです。 そして、正しいパケットを受け取ったことを知らせるACKパケットを 待っている送信ホストのTCPに送ります。 このパケットの送信するために、IPのモジュールを再度呼び出します。
アプリケーションの応答 こうして届いた情報を httpプロトコルの規約通りに解釈して、 それに対する結果を送り手に返すことになります。

通信のイメージ

このように、送信ホストでは上の層から下にデータが流れ、 受信ホストでは下の層から上の層に流れて行きます。以下の図の 矢印のように情報が流れて、最後に宛先に到着するのです。

ホームページの内容が送り返されるときも同じように処理されて 情報がブラウザの待つマシンに到着するのです。 このようにたくさんのプロトコルが協働することによって、 インターネットが機能しているいるのです。


[TCP/IPの概要] [ルーティング] [プロトコル階層] [ポートの概念]
「TCP/IP とインターネットの仕組み」へ戻る