【NW】通信プロトコル
以前(というか4年前)にPPPに関する記事を書いて以来長らくネットワーク関連の記事を書いていなかったのですが、最近TCP/IPについて再勉強し始めたので今回はプロトコルについて軽くまとめてみたいと思います。
プロトコルとは
プロトコル(通信プロトコル)とは、コンピュータ同士が通信する際の規約を指します。コンピュータ間通信は、この規約に則って情報をやり取りしています。コンピュータはこの規約がないと、正しく相手に情報を送ることができません。
コンピュータ間の通信を、人間のコミュニケーションに例えてみましょう。AさんとBさんという二人の人物がおり、互いに挨拶をするとします。もしこのとき、Aさんが「こんにちは」Bさんが「مرحبا هناك」というように、互いに異なる(しかも相手には理解できない)言語で会話しようとすると、会話が成り立ちません。これは、互いの言語体系、すなわちコミュニケーション上の「ルール」が異なっているからです。
コンピュータも同じで、この「ルール」が異なっていると通信が成立しません。そのため、人間が扱う自然言語のようなコミュニケーション上のルールをコンピュータにも設けるために「プロトコル」という概念が考案されました。
もしAさんとBさんが「英語」という共通の言語を使用すれば、互いにコミュニケーションを取ることができます。
同様に、コンピュータ同士が同じプロトコルの上で通信を行えば、情報の交換を行うことができるというわけです。
プロトコルの階層
各プロトコルは、取り決める規約の種類によって階層構造に分類することができます。
再び人間のコミュニケーションに例えてみましょう。
AさんとBさんはコミュニケーションを取るとき、言語という共通のルールに従っていました。
ところで、「英語」というルールが決まっていれば、会話でなくてもコミュニケーションをとることができますね。もっともベーシックなのは口頭での会話ですが、ほかにも電話越しに話したり、LINEでチャットしたり・・・など様々方法があります。
このように、「話の内容をやり取りするためのルール」として英語があるのと同時に、実は「英文をやりとりするためのルール」が前提として存在します。この「英文をやりとりするためのルール」もコミュニケーションする者同士で一致させておく必要があります。
英文をやり取りするための手段にLINE(チャット)を用いたとしましょう。この場合、AさんもBさんも「LINEという共通のアプリを使ってその中で文字をうち、送信する」というルールの中で英文を交換することになります。AさんがLINEを使っている中、Bさんが別のアプリでメッセージを送ったとしてもAさんには届きません。このルールのもと、AさんとBさんは英語でやり取りをすることになります。
上の図のように、人間同士のコミュニケーション間のルールは単純に一つではなく、ルールの前提となるルールが階層的に存在していることがわかります。
コンピュータ間通信も同様です。あるプロトコルによるやり取りの前提として、別のプロトコルの存在があります。プロトコルは単一のものではなく、様々なプロトコルが縁の下の力持ちとなって上位のプロトコルを支える構造になっています。
このような階層化によって、いくつかのメリットが発生します。
まず1つに、プロトコル階層では各機能階層が独立している点が挙げられます。会話で例えば、「英語で話す」というルールは、口頭で話すか、電話で話すか、LINEで話すかというルールとは独立しています。どの手段をとっても、英語で話すことには変わらないはずです。
コンピュータ通信のプロトコルも同様に、あるレベルでの通信のプロトコルが、下位、あるいは上位のプロトコルに大きく影響を及ぼさない作りとなっています。これにより、あるプロトコルでの変更による他の階層のプロトコルへの影響を小さくでき、大きな変更にならずに済みます。
役割の明確化という点でも、階層化は役に立ちます。通信の信頼性を担保するプロトコルなのか、End to Endの通信規格だけを提供するのかなど、役割を明確にすることで実装に結びつけやすくなります。またコミュニケーションを取る際にも、「どの階層(のプロトコル)の通信までフィルタリングするか」といった具合に共通言語として扱うことができるのも階層化のメリットです。