PR

エラー処理

 ほかのホストと通信する場合には、必ずエラーを想定していなければなりません。これには通信上のエラー(相手と通信できない)ということもありますが、相手のソフトウエアが古いものであったり、バグがあるなどして、おかしなデータや要求を行う可能性もあるからです。

 また、Webで、存在しないページのURLをユーザーが指定してしまうように、「実際に処理してみたらエラーになった」という場合も考えなければなりません。

 通信に関するエラー処理は大部分TCPに任せられますが、アプリケーション・プロトコル側で処理を行う必要もあります。たとえば、通信相手が突然クラッシュして通信ができなくなった場合、TCPではエラーから回復することはできません。このような場合、相手と通信できないのですから、結局はしばらく待って回復しないなら、通信を強制終了させるしか方法はありません。多くの場合、ユーザーに対してエラーを通知し、継続するか終了するかの判断を求めます。

 アプリケーション・プロトコルは、原理的にTCP/IPとは独立しています。しかし、これを実現しているプログラムは、TCP/IPなどの下位の層に対して無関係とはいきません。実際には、アプリケーション・プログラムは、OSなどが提供するTCP/IPのインタフェースを呼び出してTCP/IPを制御します。たとえば、TCPを使うのかUDPを使うのかや、ユーザーが指定したホスト名をIPアドレスに変換するなどの処理を実行します。

サーバーとクライアント

 インターネットで使われる多くのサービスは、クライアント/サーバー・モデルで作られています。クライアント/サーバー・モデルとは、ネットワークを介してサーバーとクライアントが通信しながら処理を行うものです。サーバー、クライアントともどちらもコンピュータ(TCP/IPでいえばホスト)ですが、役割としてサービスを提供する側をサーバー、サービスを受ける側をクライアントといいます。

 一見、かつて使われていたコンピュータとターミナル(端末装置)の関係に似ていますが、どちらもコンピュータであり、それぞれデータ処理能力を持っている点が違います。

 通信しながら、複数のコンピュータが連携して1つの処理を行うことを「分散処理」ともいい、「クライアント/サーバー・モデル」は、その一種でもあります。ただし、このモデルでは、両者の役割がはっきり分かれています。サーバーはあくまでもサービスを提供する側で、クライアントがサービスを提供することはありません。原則的にクライアント側から通信を開始し、サーバー側がクライアント側を呼び出すことはありません。

 たとえば、Webでは、HTTPサーバーとWebブラウザ(クライアント)に分かれており、クライアントがサーバーに表示のためのデータを要求し、クライアントは受け取ったデータを解釈して表示します。つまり、情報の表示という作業をサーバー、クライアントの2つのコンピュータが連携して行っているわけです。

ポート番号に対応

 TCPもしくはUDPでは、通信のあて先としてIPアドレスとともにポート番号を指定します。このポート番号は16ビットの数値ですが、1~1024までは、ウェルノウン・ポート番号(Well-Known Port Number)として使われています。