開発ノート【通信の共通言語:OSI参照モデル】
開発ノート【通信の共通言語:OSI参照モデル】です。
当サイトは、Bootstrap5で製作しています。
プロトコル
共通のルール。
-
通信規約、通信手順など、標準化された内容がプロトコル。
ホストやネットワーク機器が通信の際に守る規約であり、通信の際に守る手順。 -
プロトコルには、たくさんの種類がある。
・パソコンやスマホからメールを送る場合に使うプロトコル。
・ホームページやブログを見るときに使うプロトコル、など。 - 複数のプロトコルが組み合わさって動作している。
通信モデル
ホストやネットワーク機器が通信するときの動作。
内部的な処理をいくつかに分割して整理したもの。
- 一連の通信の流れ(動作・処理)を定義している。
- 流れは複数に分割される。
- 複数に分割=複数のプロトコルを組み合わせている。
例)インターネットを使ってブログを見る場合
- パソコンのブラウザでブログを開く。
- ブログがあるサーバの場所を特定する。
- サーバに向けてデータ(ブログのページを要求)を送信する。
- 電気(光)信号に変換してケーブルを伝わる。
↓これを一文のプロトコルとして書くと
- パソコンのブラウザでブログを開いたら、サーバを特定してデータを送信すると、電気信号に変換されてケーブルを伝わるプロトコル。
↓これを現実的にして、複数に分割して書くと
- パソコンのブラウザでブログを開くためのプロトコル。
- ブログがあるサーバの場所を特定するためのプロトコル。
- サーバに向けてデータ(ブログのページを要求)を送信するためのプロトコル。
- 電気(光)信号に変換してケーブルを伝わるためのプロトコル。
<<< プロトコルを複数に分割するメリット >>>
- 処理をシンプルにできる。
- 修正や変更が全体に影響を与えない。
<<< 通信モデルとは >>>
- 通信の流れを分割して、複数のプロトコルとして組み合わせる時に、どのような考え方で分割するか?を整理したもの。
ISO(国際標準化機構)の通信モデル(OSI参照モデル)
一連の流れを七つに分割して考えるモデル。
このモデルを「OSI参照モデル」「OSI7階層」と言う。
Layer7(L7):アプリケーション層
Layer6(L6):プレゼンテーション層
Layer5(L5):セッション層
Layer4(L4):トランスポート層
Layer3(L3):ネットワーク層
Layer2(L2):データリンク層
Layer1(L1):物理層
通信は、パソコンの他、宛先となるサーバやその途中にあるネットワーク機器も関係している。
通信モデルは、これら全ての機器において同じように考える。
但し、途中のネットワーク機器は、必ずしも7階層の処理全てを必要とはしていない。(L1~L3)
PDUとカプセル化
パソコンが何かしらのデータをサーバに伝えようとする際、その時のデータが七つの層で処理される。
(データは各層のプロトコルでそれぞれに処理される)
処理が済むと下位の層にヘッダを付けてデータを渡す。
このヘッダを付けることを「カプセル化」と言い、PDU(Protocol Data Unit)とも言う。
PDUは下位に進む際にヘッダが付加されていく。
物理層まで来たデータはケーブルを使って通信され、送信先に伝わります。
データを受信した先は、物理層から順に上位にデータを渡していきます。
その際、ヘッダは取り除かれていきます。
受信側でのこの逆の動作を、非カプセル化と言う。
七つの層
アプリケーション層
ホストの上で動くアプリケーションに関連したレイヤー。
- アプリケーションが別のホストやサーバと通信が必要になったときに動作するプログラムの部分のこと。
- Webブラウザやメールソフトなどのアプリケーションから渡された情報を元に通信に必要な処理を施し、ヘッダを付けて下位のプレゼンテーション層に渡す。
- レイヤー:層のこと。
- アプリケーション:Webブラウザやメールソフトなどのアプリケーションそのものではない。
プレゼンテーション層
アプリケーション層から渡されたデータをどのように表現するかを規定している。
- メーカー毎に異なる表現形式を共通の表現形式に変換する。
- またその逆。(共通の表現形式をメーカー毎に異なる表現形式に戻す)
- ヘッダを付けて下位のプレゼンテーション層にデータを渡す。
セッション層
アプリケーション毎に通信相手と円滑にデータをやり取りできるようにしている。
- どちらから通信を開始するのか、タイミングは合わせるのか、どのように送るのか、などを事前に打ち合わせる。
- 打ち合わせが完了すると、実際にデータを送ることができる状態になり、セッションが確立される。
- 通信が終了した際は、セッションを終了させる役割もある。
- セッション層では、アプリケーション単位にセッションを確立する。(複数のアプリケーションを同時に使ってもデータが混在することはない)
- ヘッダを付けて下位のトランスポート層にデータを渡す。
- セッション:アプリケーション同士で専用の道を作るようなもの。
- セッションを終了させることを、「切断する」「解放する」と言ったりする。
トランスポート層
渡されたデータを相手に届けるための品質管理を行う。
- データは確実に届いたか、途中で壊れていないか、紛失していないかなどをチェックしている。
- もし、途中でデータが壊れたり、紛失しているようなことがあれば、再度データを送り直す。
- 相手が受信できるだけのデータ量に抑えて、送り過ぎないように調整する役割もある。
- ヘッダを付けて下位のネットワーク層にデータを渡す。
ネットワーク層
トランスポート層から渡されるデータを通信相手に届ける役目がある。
宛先となるホストはどこにあるのか、宛先のホストまでどの通信経路を使って届ければいいのか、を決定する。
- ネットワークは、ホストやネットワーク機器間が必ずしも一本のケーブルで接続されているとは限らない。
- むしろ故障が発生した場合でも通信を継続できるように一か所の目的地に対して複数の通信経路があるのが普通。
- 末端にいるホストからホストに通信することを、End-to-Endと言うが、ネットワーク層ではこのEnd-to-Endを実現させる。
- ネットワークではホスト同士が直接繋がることもあるが、多くの場合はその途中にネットワーク機器を挟んだ構成になっている。
- 途中にあるネットワーク機器はネットワーク層のプロトコルで最適な通信経路についての決定を行っている。
- ヘッダを付けて下位のデータリンク層にデータを渡す。
データリンク層
通信したい相手がどこにいるのか、どこを経由していくかはネットワーク層で決めるが、実際に通信する際は直接接続された機器にしかデータを渡すことができず、いきなり最後の相手には渡せない。
直接接続された機器までの通信を行っているのがデータリンク層。
- 直接接続された機器から受け取ったデータが壊れていないかを調べる機能もある。
- そのために使うデータを、Frame Check Sequence(FCS)と言う。(上図のグラフの黒い部分)
- ホストは、ヘッダ+ネットワーク層のPDUにチェック用のFCSを追加して、下位の物理層にデータを渡す。
物理層
データリンク層から渡されたデータを0と1のビット列に変換して、直接接続された機器に伝えるのが物理層の役目。
- 何を0、何を1とするかなどを規定している。
- 電気信号なら電圧の違いで0と1を表現したり、光信号なら点滅で0と1を表現したりする。
セッション層とトランスポート層の違い
この二つはどちらもデータをきちんと相手に届けるという点では同じような役割を持っている。
この二つの違いは、何と何の間できちんとデータを届けるのか、と言う点。
- セッション層:アプリケーション間でデータが正しく届いているかを制御している。
- トランスポート層:機器同士間でデータが正しく届いているかを制御している。