2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

プロトコルの話!

このセクションでは、ネットワーク上を行き来するデータについて・・・・・・。
そうですね~。データと言うよりネットワーク上を行き来するデータ君達は、ある一定の順序に従って通信を行っていることについて簡単にお話します。ある一定の順序に従って通信することを通信手順(プロトコル)と言います。プロトコルについて話す前に、私たちが良く使っているイーサーネットではちょっと面白いアクセス方式(ノードがサーバーと通信する方式)を使っているので、その事について触れておきます。さらに、データがどのような形状(パケット)でネットワーク上を行き来するかについても説明しておきます。


CSMA/CD

イーサーネットは、「早い者勝ち」の理論にもとずいて設計されています。ですから、先にサーバーにアクセスしたノードがその後のアクセス権を獲得します。
この方法は、IEEE802.3と言う規格に記載されています。たとえCarrir Sensed Multiple Access With Collision Detection の略で、この方式はノードがサーバーにアクセスする前に「ちょっと待った!」ってな具合にいったん待って「左右確認」じゃないけど「今現在サーバーと通信しているノードはいないか?」確認して通信してなかったら通信開始、通信してたらちょっと待ってから通信しましょう。しかし、万が一2台以上のノードが一緒に通信を始めた場合はお互い譲り合って通信しよう。「お先にどうぞ!私は一時停止して待ちます。」なんて言う規則を作っています。
2台以上のノードが一緒に通信を始めた場合をコリジョン(衝突)と言います。2台の自動車が同じ方向に走って行き、ぶつかってしまうようなものです。衝突した2台の自動車のために、後続の自動車は玉突き状態のように衝突して交通渋滞(トラフィック)を発生させます。この現象と同じように、コリジョンが多発するとネットワークの伝送路の流れが悪くなり、伝送速度を著しく低下させます。「最近、サーバーへのファイルコピーが遅くなった。」何てことありませんか?それは、コリジョン自体のせいではなくトラフィックが発生して自ノードが他のノードが通信中であることを検出して待ち状態に入っていることが主な原因です。このように、衝突検出を行いますがノードが多くなるにつれていつまでたっても通信を開始できないノードが発生するのも事実です。

パケット

今までCSMA/CD方式について説明してきましたが、なぜ「衝突する」と言うのでしょう?これは、ネットワーク上を行き来するデータの形状に関係します。

上の図は、データの固まりがネットワーク上を行き来している絵です。この固まりを「パケット」と呼んでいます。まるで電車のようにつらなって走っているようでしょ。

このように、数バイトのパケットの列でデータは行き来してるので上の図のように、衝突を起こすわけです。そんな訳で、ちょっと本題からは外れてしまいましたがCSMA/CD方式とパケットについて話しました。さて、これから本題のプロトコルの話です。

プロトコル

冒頭で説明したように、プロトコルとは通信手順を意味します。ネットワークのプロトコルには色々種類があります。
以下に、どんなプロトコルがあるか簡単に紹介します。

● IPX/SPX(アイピーエックスエスピーエックス)

有名なノベル社NetWareの標準プロトコルです。

● NetBeui(ネットビューイ)

Microsoft社のLANManagerの標準プロトコルです。さらに、現在はWindows95/98/MEの標準プロトコルとして有名です。NetBeuiはIPアドレスと言う概念がない為、通信する場合はネットワーク機器同士のMACアドレスを参照して互いに通信を行います。NetBeuiを拡張した物がNetBIOS over TCP/IPである。基本的にTCP/IP上で実現される。これは良くUnixのSAMBAと言うWindows互換のファイル共有を実現するシステムが採用しています。つまり、UnixでWindowsのファイル共有が実現できるのも影ではTCP/IPが活躍していると言うことです。

● AppleTake(アップルトーク)

Apple社のマッキントッシュの標準プロトコルです。基本的に通信速度が遅いので現在はマッキントッシュの世界でもTCP/IPが主流です。

● TCP/IP(テーシィピーアイピー)

Unixの標準プロトコル(Linux及びBSDも全てTCP/IP)です。さらに、Microsoft社のWindowsNT/2000/XPの標準プロトコルです。また、インターネットの標準プロトコルでもあります。まあ、代表的なプロトコルはこのくらいです。ここでは、ネットワークプロトコルを種類別に説明はしません。それではなにを説明するかと言うと、このようなネットワークプロトコルは部分的な仕様が違うだけでパケットを使って、ある手順にしたがって通信していることは全て共通なのです。したがって、その共通通信手順についてお話します。

上の図は、ノードからサーバーにデータを送信する手順を示しています。先ほど説明したようにネットワーク上では全てパケットで通信することを頭に入れながらこれからの説明を聞いてください。
まず、ノードはデータを送るサーバーに対して接続要求を送信します。これは、”これから送信するぞ!”というノードからサーバーへのアナウンスです。そして、サーバーはそのアナウンスに対してデータを受信できる準備が出来ているのならば”準備OK”をノードに送信します。しかし、まだ準備が出来ていなければ”まだだよ~”って応答を送信します。準備が出来ていない状態の場合、ノードはある一定時間待ってから再度接続要求をサーバーに送信します。ノードは準備OKの応答をサーバーから受信したら、実際の送信データをパケット単位で送信します。通常、パケットには通し番号が振られていて1番から7番までで7番までいったら、また1番に戻ると言う具合に巡回番号となっています。
上の図では3パケットに1回応答を受信するような手順になっています。ですから、ノードがパケット1からパケット3までサーバーへ送信したら、サーバーは何番までのパケットを受け取ったかを応答します。その後は、ノードが送信するデータが無くなるまで3パケットに1回応答しながら通信を続けます。
そして、ノードはデータをサーバーに全部送信し終えると”データの送信を終わります。”と言うEOFパケットをサーバーに送ります。EOFを受け取ったサーバーは”了解!”の応答をノードに送信して通信を終結します。データ通信の途中で仮に、パケット2番を受け取れなかった場合は”再送要求”といって”パケット2だけもう一度送ってくれ!”とノードに要求します。要求を受けたノードは要求のパケット2番を再送します。と言うわけで簡単ですが通信手順はこんな感じです。では次に、通信時のパケットの構成について説明します。

上の図は、パケットの構成を示しています。まず、”データが入ってないパケットの内訳”とは接続要求、EOF、応答パケットの内訳を示します。また”データが入っているパケットの内訳”とは、実際の送信データを含んでいるパケットの内訳を示します。では、以下にパケット構成の内容を説明します。

・ 宛て先のID

送信する相手先のIPアドレス。

・ 自分のID

自分(送信元)のIPアドレス。

・ 制御コード

この部分には、”接続要求”パケットであるとか”応答”パケットであるとか”データ”パケットであるとかの情報が入っています。また、データパケットの場合はパケット番号も入ります。

・ データ

実際の送信データを格納する部分です。

・ エラーチェックコード

パケットにエラーがあるかどうかを示すコード。

以上の情報をパケット化して通信を行います。サーバー側は、パケットを受信することにより”宛て先のID”で自分に来たパケットとして取り込み、さらに”自分のID”でどのノードから来たパケットなのかを知ることが出来ます。

ここまでで、このセッションは終了です。”プロトコル”なんとなく解りましたか?それでは、次のセッションで会いましょう!

以上

コメント