通信を行うためには、様々な規約(約束事)を定めておく必要がある。
この規約のことをプロトコルという。
今回はネットワークの通信のあり方について観てみたいと思う。
・伝送制御
ネットワーク通信で確実にデータをやり取りするためには、様々なルールを決めておかないといけない。
ネットワークを介して機器と機器を接続しても、それだけではうまく通信はできず、タイミングを合わせるなどの制御が必要になる。
この制御のことを伝送制御という。
伝送制御では以下のものを制御する。
・回線の接続や切断などの制御
・データリンク(論理的な通信路)の確立や解放などの制御
・データ単位での確実な送受信を行う同期制御
・データ内容の検証や訂正を行う誤り制御
・同期制御
まずは同期制御の概要を観てみよう。
これは簡単にいうと、データの開始と終了を判断し、双方の間で伝送のタイミングを合わせる制御である。
①調歩同期
調歩同期は、1文字単位で同期をとる方式であり、非同期方式と呼ばれることもある。
1文字の前後にスタートビットとストップビットを付与して送信する。
②フレーム同期
フレーム同期(フラグ同期)は、フラグシーケンスというパターン(01111110)で囲まれたフレームという単位でデータを伝送する方式である。
データを伝送してない間は常にフラグシーケンスが流れていて、フラグシーケンス以外のパターンが出現した時点で受信側はデータの受信を開始し、次のフラグシーケンスを受信した時点でデータの受信を終了する。
・誤り制御
送信データは、伝送中にノイズなどの影響を受けて、誤った内容で受信されてしまうことがある。
この誤りを検出して、正しいデータを受信できるようにするのが誤り制御の役割である。
① パリティ検査
パリティ検査とは、データに1ビットの検査ビットを付与することで、データ中のビット1の個数を偶数または奇数に統一する方法である。
1の数が偶数個になるよう付与する方式を偶数パリティ、奇数個になるよう付与する方式を奇数パリティという。
送信側によって付加されたパリティビットは、受信側で誤りを検査する。
受信側は受信データ中の「1の数」を数え、偶数パリティのはずなのに「1の数」が奇数であった場合などは、誤りが発生したと判断する。
パリティ検査では、1ビット(奇数個)の誤りは検出できるが、2ビット(偶数個)の誤りは検出できない。
②垂直/水平パリティ検査
パリティ検査は、主として複数文字をまとめたブロックという単位で通信を行う場合に用いられる。
このとき、文字単位にパリティビットを付加する垂直パリティ検査と、ブロック中の文字の同じ位置のビットに対してパリティビットを付加する水平パリティ検査とがあり、どちらも奇数パリティ、偶数パリティを使うことが可能である。
水平パリティ検査では、誤り検査専用の文字が付加されることになる。
これをBCC(Block Check Character)という。
水平パリティ検査と垂直パリティ検査を組み合わせて使うことにより、2ビットまでの誤り検査と1ビットの誤り訂正が可能となる。
③CRC(Cyclic Redundancy Check : 巡回冗長検査)
CRCは、受信データを生成多項式で除算し、その結果で誤りの有無を判定する。
このような検査を行うため、送信側はあらかじめデータを生成多項式で割り切れるように剰余(あまり)を付与したデータを送る。
ここで付与した剰余をCRC符号という。
受信側は、CRC符号が付与されたデータを改めて生成多項式で除算する。割り切れないとき、誤りがあったと判断する。
CRCは精度の高い誤り検出方法で、連続したビット誤りにも強いので、さまざまなシステムで採用されている。
・フロー制御
送信したデータが確実に届いたかを知るには、受信側からの応答が必要である。
送信したデータに対するACK(ACKnowledgment:肯定応答)が返ってくれば受信者が受信できたと判断できる。
反対に、一定時間内にACKが返らない場合やNAK(Negative AcKnowlegement:否定応答)が返ってきた場合は、何らかの理由で正しく受信できなかったと判断でき、データを再送する。これを確認応答という。
確認応答では、ACKが返るまで次データの送信を待つよりも、いくつかのデータを連続して送信する方が効率的である。
送信側が無制限にデータを送信を続けると、受信側でそれらを対処できなくなってしまう可能性がある。
そのため流すデータの量を調整する必要が生じてくるが、これをフロー制御というのである。
・OSI基本参照モデル
通信を行うためには、さまざまな規約(約束事)を定めないといけない。
この規約のことをプロトコルという。
しかしながら、通信に必要な規約や制御をすべて一つのプロトコルで実現しようとすると、プロトコルが複雑になったり等で効率が悪い。
そこで、プロトコルが実現すべき機能をいくつかの層(レイヤ)に分けて、各層のプロトコルを組み合わせて使う。
この機能を分割したモデルの代表例が、OSI基本参照モデルである。
アプリケーション層(第7層) | 通信を行う各種アプリケーションの動作を定める。 |
プレゼンテーション層(第6層) | 各アプリケーションが送受するデータを、共通の転送構文に変換する。 |
セッション層(第5層) | アプリケーション間で取り交わす会話を成立させる。 |
トランスポート層(第4層) | ネットワークごとの品質の差を吸収した透過的な伝送路を上位層(5~7層)に提供する。 |
ネットワーク層(第3層) | データの選択や経路選択を行い、エンドツーエンドのデータ転送を実現する。 |
データリンク層(第2層) | 隣接ノード(ネットワークを構成する機器一つ一つを指す)間のデータ転送を行う。 |
物理層(第1層) | 伝送を行う上での物理的・電気的な特性を規定する。 |
7階層のうち、第5層~第7層では通信を行うアプリケーションを意識するため、上位層ともいわれる。
これに対して、第1層~第4層はアプリケーションに依存しないデータ転送に関係する規約をまとめているため、下位層ともいわれる。
この7層を覚えるコツがある。
それぞれの頭の文字をとって、ア・プ・セ・ト・ネ・デ・ブと覚えるとよい。
① 物理層
通信装置やコンピュータ、端末といった機器(ノード)をネットワークに接続するための物理的・電気的な特性を定めた層である。
物理的な特性としてはコネクタの形状、ピンの数、ピンの役割などが規定される。
ピン(ping)は、ネットワークにおいてノードの到達性を確認するためのソフトウェアである。
電気的な特性としては、電気信号の電圧や信号の波形などが規定される。
② データリンク層
一つの通信回路で接続された隣接ノード間(データリンク)において確実にデータの転送を実現するための層である。
この層では、前述の同期方式や誤り制御などが必要になってくる。
LANはデータリンク層に該当する。
③ ネットワーク層
最終的な送信元ノードから宛先ノードまでのエンドノード間(エンドツーエンド)でのデータ転送を実現するための層である。
これを達成するために、ネットワーク層ではルーティング(経路選択)や中継を行う。
データを送り届けるための最適な経路を選択する機能である。
④ トランスポート層
エンドツーエンドの伝送路を構成する各ネットワーク(データリンク)の品質を吸収し、エンドノード間に透過的な(トランスペアレント)なデータ転送を提供するための層である。
エラー検出機能や回復機能などが規定される。
ここで透過的とは、実際の構成を意識させない特性である。これがあると上位層は下位層の構成や品質の差を意識しないですむようになる。
⑤ セッション層
アプリケーションどうしで会話を成立させるための規約をまとめた層である。
アプリケーションどうしは、処理を遂行するために様々な会話を行う。時には相手からの返事を待たないとデータを送信できないことがある。
この場合、回線は全二重通信が可能であっても、データのやりとりは半二重で行わないといけない。
この半二重の制御はセッション層の役割である。
また、エラーの発生時の手戻りを少なくするため、会話の途中に同期点(チェックポイント)を設けておくのも重要な役割である。
⑥ プレゼンテーション層
アプリケーションが送受するデータ(抽象構文)と、実際に伝送するデータ(転送構文)などの規約をまとめた層である。
文字データの変換や暗号化などを行う。
⑦ アプリケーション層(応用層)
電子メールなどのアプリケーションプログラムに、アプリケーションの機能に応じた各種データ通信機能を提供する。
・TCP/IP
OSI基本参照モデルは、機能を分割したモデル(例)に過ぎず、現実のプロトコルを規定したものではない。
実際のプロトコルとしては、インターネットなどで用いられるTCP/IPというプロトコルが一般的である。
TCP/IPは4階層から構成される。
物理層とデータリンク層はTCP/IPのネットワークインタフェース層に、アプリケーション層、プレゼンテーション層、セッション層はTCP/IPのアプリケーション層に相当する。
・後記
ここのところ日曜日と祭日に婚活のお見合いがあり、なかなかブログを更新できなかった。
今後は仕事を終えた午後の早い時間帯にブログ作成を行っていきたい。