ネットワーク全体をたった1つのプロトコルで定義しようとすると非常に大規模で複雑なものになり、プロトコルの設計や実装などを行うのが困難になる。そこで、複雑さを減らすために、通常はプロトコルをいくつかの層(layer)に分解して、階層的な構造として取り扱うことが広く行われている。ある特定の層のプロトコルは、その上の層へ提供するサービスと、下の層から提供されるサービスによって定義されるのである。このような構造になっていると、あるプロトコルを別のプロトコルに変更することが容易になる。
先ほどの電話の例では、「電話機の使い方」と「日本語を話す」、「お互いを確認しての会話」の3つを別々のプロトコルとしてとらえていた。そしてその関係は、「お互いを確認しての会話」は「日本語を話す」を利用するプロトコルであり、「日本語を話す」は「電話機の使い方」を利用するプロトコルである。これらのプロトコルは、最下層に「電話機の使い方」が位置し、順に、「日本語を話す」、「お互いを確認しての会話」を積み上げた階層構造となる。
このようにプロトコルを層に分解することで、各プロトコルの理解が容易になり、新たなプロトコルの設計や実装も容易になる。たとえば、電話でメーカーへの問い合わせを行うという通話例を考えると、相手が先に(「はい、○○です」と)名乗り、こちらが名乗らなくてもコミュニケーションが成立するだろう。この場合でも電話機を使って日本語で会話をするという行為は同じであるが、お互いを確認するというステップは踏んでいない。つまり、日本語の会話で電話を他の用途に使用する場合は、「お互いを確認しての会話」のある層(最上位層)に新たなプロトコルを定義して実装するだけで良く、その下の層のプロトコルは変更する必要がないわけである。
また、電話の代わりに無線機を使うことができるのならば、最下層のプロトコルとして「電話機の使い方」の代わりに「無線機の使い方」を定義して実装すれば、通信方法を変えることもできる。
図2 プロトコルの階層化の例
電話での会話を調べ、いくつかのプロトコルに分割したプロトコルの階層の例。複数の層に分割したことでプロトコルが理解しやすくなり、「メーカーへの問い合わせ」や「無線機の使い方」といった新しいプロトコルの追加も容易になる。
Copyright© Digital Advantage Corp. All Rights Reserved.