目次
プロトコルの制御情報「ヘッダ」
通信の主体はアプリケーションです。アプリケーションのデータを送受信できるようにするために、複数のプロトコルを組み合わせます。OSI参照モデルでは、7つの階層のプロトコルを組み合わせることになります。各プロトコルは、それぞれの機能を実現するための制御情報が必要です。プロトコルの機能を実現するための制御情報をヘッダと呼びます。たとえば、データを転送するためのプロトコルであれば、ヘッダには宛先や送信元のアドレスが指定されています。各プロトコルは、データを送信するときにヘッダを付加します。ヘッダを付加することを「カプセル化」と呼びます。ヘッダでデータを包み込むようなイメージです。
そして、データを受け取るとそれぞれのプロトコルのヘッダにもとづいて、適切な処理を行い、ヘッダをはずしてさらに別のプロトコルに処理を引き渡します。ヘッダを解釈して、ヘッダを外すことを「逆カプセル化」または「非カプセル化」と呼びます。
OSI参照モデルでのアプリケーションのデータ転送
以下の図を例にとって、OSI参照モデルに基づいたプロトコルの組み合わせでアプリケーションのデータを転送する様子を解説します。
データの送信側:階層を上から下へたどってデータをカプセル化
アプリケーションのデータを送信するためには、データにアプリケーション層プロトコルから階層を上から下にたどって、各プロトコルのヘッダでカプセル化していきます。
アプリケーションのデータには、まず、アプリケーション層ヘッダを付加して、下のプレゼンテーション層プロトコルへ渡します。そして、プレゼンテーション層プロトコルのヘッダを付加し、セッション層プロトコルへ渡します。さらにセッション層プロトコルのヘッダでカプセル化して・・・という具合に、各階層のプロトコルのヘッダをどんどん付加していきます。
データリンク層プロトコルでは、ヘッダに加えてエラーチェックのためのトレーラを付加します。こうして、もともとのアプリケーションのデータにデータリンク層までのヘッダが付加されて、さらにトレーラが付加されたものがネットワークへと送信される全体のデータです。
物理層プロトコルはヘッダの付加は行いません。「0」「1」を電気信号や光信号などの物理的な信号に変換して、伝送媒体へと送り出していきます。
以上のような、送信側でアプリケーションのデータにどんどんヘッダを付加してカプセル化をしていく様子は、私たちが普段、荷物を宅配便で送るときに梱包するようなイメージで考えてください。アプリケーションのデータは、相手に送りたい荷物です。大事な荷物は、緩衝材でくるんで、さらに箱に入れて、配達用の伝票を貼るのと同じように、アプリケーションのデータにヘッダを付加していきます。
ネットワーク機器によるデータの転送
ネットワーク上に送り出された電気信号など物理的な信号となったデータは、ネットワークインフラストラクチャを構成するルータやレイヤ2/レイヤ3スイッチなどのネットワーク機器が転送します。
ネットワーク機器では、物理信号をいったん「0」「1」のデータに戻します。もともとのアプリケーションのデータにさまざまなプロトコルのヘッダが付加されています。ネットワーク機器は、それぞれの転送処理を行うために、特定のヘッダを見てデータの転送処理を行います。ネットワーク機器の動作の仕組みを知るためには、各ネットワーク機器がどのヘッダを見ているかがポイントです。
ネットワークインフラストラクチャを構成する主な機器と転送する際にどのヘッダを見ているかをまとめると、次の表のようになります。
ネットワーク機器 | データを転送するために主に見るヘッダ |
レイヤ2スイッチ | データリンク層(レイヤ2)ヘッダ |
ルータ | ネットワーク層(レイヤ3)ヘッダ |
レイヤ3スイッチ | データリンク層(レイヤ2)ヘッダ ネットワーク層(レイヤ3)ヘッダ |
データの受信側:階層を下から上へたどってデータを逆カプセル化
受信側にデータが届くと、送信側とは逆に階層を下から上にたどって、アプリケーションまでデータを引き渡します。
受信側に届くのは、電気信号などの物理的な信号です。物理層プロトコルで物理的な信号を「0」「1」のデータとて、データリンク層プロトコルへ引き渡します。データリンク層プロトコルは、データリンク層ヘッダを見て、自分宛てかどうかを判断します。また、トレーラによって受信したデータにエラーが発生していないかをチェックします。自分宛てのデータであることを確認したら、データリンク層ヘッダとトレーラを外して、ネットワーク層プロトコルへ引き渡します。ネットワーク層プロトコルでは、ネットワーク層ヘッダを見て、自分宛てかどうかを判断します。自分宛てのデータであれば、ネットワーク層ヘッダを外して、上位のトランスポート層プロトコルへ引き渡します。
以降、同じように各階層のプロトコルが対応するヘッダを見て、上位のプロトコルにデータを引き渡すことで、最終的に受信側のアプリケーションまでデータが到達します。そして、受信側のアプリケーションは届いたデータの処理を行います。
データの受信側でヘッダを解釈して逆カプセル化していく様子を、私たちが宅配便で荷物を受け取ったときとなぞらえて考えてみましょう。荷物を受け取ったとき、配達伝票を確認することがヘッダを見ることに相当します。自分宛ての荷物だったら、箱を開梱することがヘッダを外していると考えてください。
通信は原則として、双方向で行います。ここまでの説明の送信側と受信側はいつも決まっているわけではありません。データを受信したら、その返事を返すため、返事のデータの送信側となります。返事のデータを送信する際には、「データの送信側」の項と同様の処理を行っていきます。