ファイル共有/プリンタ共有から電子メール、Web、音楽・動画再生まで、LANやインターネットなどを使って利用できるサービスは非常に豊富になった。このようにネットワークを使ったさまざまなサービスを利用できるようにするために、それぞれに複雑な通信手順(プロトコル)が考案されてきた。
しかし本来ネットワークに必要な機能が何かといえば、ネットワークで接続されたコンピュータ同士がデータ交換を行うということである。こういってしまえば簡単だが、相手に正しくデータを送り、あるいは逆に相手から正しくデータを受け取るためには、そのためのしくみや、やりとりの手順に関する取り決めが必要だ。
■通信相手や自分を特定するアドレッシング
まず始めに、データをやりとりしたい相手を特定する手段がなければならない。誰かと手紙を交換したり、誰かに電話したりすることを考えればこれは明らかだ。あて名が分からなければ手紙は出せないし、電話番号を知らなければ電話はかけられない。コンピュータ・ネットワークにおいても、通信する者同士がお互いに相手を特定するための手段が必要である。これは一般に「アドレッシング(addressing)」と呼ばれる。例えばTCP/IP(IPv4)では、32bitのIPアドレスを使って相手を特定できるようにしている。あとで詳しく述べるが、NetBIOSでは、16bytesの文字列を使ってアドレッシングを行うようになっている。
■データグラム型通信
次に必要なのは、いうまでもなく、データを通信相手に送るための手段である。実際のデータ転送の手段や必要になる手順は、物理的なネットワーク媒体(イーサネットなどのバス接続型デバイスか、電話などの回線交換網を利用するデバイスか、無線ネットワークかなど)によっても異なるが、通常はデータの送り手から受け手に対して、一方的にデータを送信し、それがいつ相手に届くか、相手がそのデータを正しく受信したかを関知しない、「送りっぱなし」が基本になっている場合が多い。例えば、現在のイーサネットの祖先は、無線通信を利用して離島間でコンピュータのデータ交換を行うハワイ大学の実験ネットワーク「アロハネット」だといわれている。無線機のマイクに向かって話しかけたところで、相手がそれをちゃんと聞いているかどうか(相手へ届いたかどうか)は、送信した側では分からないのだから、これは明らかに「送りっぱなし」の特性を持った通信媒体である。
このように、送信側から受信側に対し、相手の状態(相手が受信可能状態にあるかどうか)にはおかまいなしに、一方的にデータを送信する通信方法は、「データグラム(datagram)型通信」と呼ばれる。前出の無線ネットワークだけでなく、現在最も普及しているイーサネットも含め、ほとんどの通信媒体では、このデータグラム型通信が基本となっている。つまり、「相手を指定して、指定されたデータを送信する」というのが基本な機能である(相手の指定方法や、1度に送信できるデータの最大サイズなどは媒体ごとに大きく異なるが)。相手に届いたかどうかの確認は行われないし、もし届いていない場合は再送処理するかどうかなどは、必要なら上位のプロトコルで対応することになっている。
「送りっぱなし」などというと、ずいぶんいい加減なように聞こえるかもしれないが、現在のネットワークでも、このデータグラム型通信は広く使われている。データグラム型通信では、次に述べるコネクション指向通信とは異なり、面倒な前準備を省略して、いきなりデータを送信することが可能である。典型的な用途の1つは、ブロードキャスト(broadcast=「放送する」の意味)である。ブロードキャストとは、一斉同報通信のことで、ネットワーク上に存在するすべてのコンピュータに同じデータを送りたいときに使う通信手段だ。
■コネクション指向通信
データグラム型通信では、これといった前準備もなく、いきなりデータを送れるという利点があった。しかしデータグラム型通信では、データが相手にきちんと届いたか分からないという大きな欠点がある。相手に届くまでの途中で何らかのトラブルが発生し、データが失われているかもしれないのだが、送信側はそれを検知する手段がない。失われたデータがあるなら、そのデータを再送すればよいのだが、相手側に届いたかどうかは送信側では検知できないので、データグラム型通信ではそれが不可能である。これでは、信頼性の高い通信を行うことは難しい。
また、データグラム型通信しか利用できないとすると、アプリケーションにとっては非常に面倒である。通常ネットワーク・アプリケーションといえば、一方からコマンドやデータを送ると、他方ではそれに対する応答などを返す、というふうに動作している。データを送ったはずなのに相手に届かなかったり、間違ったデータが届くとか、送った順番とは異なる順番で(バイト単位やブロック単位で入れ替わって)データが届いたりするようでは、まったく役に立たないであろう。そこで、ネットワーク媒体の機能(データグラム送信機能)を使って、その上に「信頼性のある」通信路を仮想的に実現できると、アプリケーションにとっては非常に都合がよい。「信頼性のある」とは、一方からデータを送ると、それが相手側へ、送った順番通りに、重複や欠落、エラーなどがなく、正しく届くという意味である。
このような機能を実現する通信方法として、「コネクション指向(connection oriented)」の通信がある。データグラム型通信と異なり、コネクション指向の通信では、通信に先立ち、通信する者同士がデータを送受信するための通信路を確保(オープン)する。以後、この通信路を使ったデータ交換では、データが正しく相手に届くことが保証されるようになる。そして通信が完了したら、通信路を閉じる(クローズする)。ただし通信路を確保するといっても、物理的にケーブルを引き回したりするということではなく、あくまで論理的にそのような接続を確立するということだ。
このようなコネクション指向の通信は、非常に一般的な機能なので、基本的なネットワーク・サービスとしてシステム側で用意するのが普通である。具体的には、(通信媒体でサポートされている)データグラム型通信を下位プロトコルとして使用し、その上位にコネクション指向通信を行うプロトコルを実装する。例えばTCP/IPプロトコルでは、データの確実な送信を保証しない代わりに高速なデータグラム型通信を行うIPプロトコルをベースとし、その上位プロトコルとして、IPを使ってコネクション指向通信を可能にするTCPプロトコルが実装されている(これに対してUDPプロトコルは、IPプロトコルをほぼそのまま使うための機能。データグラム通信を行うにはこのUDPを使う)。
もし通信媒体上のエラーでデータが相手に届かなかったり、データにエラーがあったりすると、再送処理を行って、正しいデータが相手に届くように努力する(どうしても送信できなければ、アプリケーションには送信失敗という結果を返す)。一般的には、データを受けた側では、必ずその応答確認を返信して、データの送信とその受け取りが正しく行われたということを相互に確認しあうことになっている。これによってエラーのない、信頼性のあるコネクション通信を実現している。
コネクション指向通信の典型例は電話である。周知のとおり電話では、会話に先立って相手に電話をかけ、通話相手が電話に出たことを確認してから会話(データ通信)を始める。相手との接続が完了すれば、どちらか一方が通話を終えるまで、1対1の通信が可能になる。
Copyright© Digital Advantage Corp. All Rights Reserved.