エンコードされたデータとデコードされたデータ

電話回線などの通信メディアを介してデータを送信するには、データを シリアル化する必要があります。つまり、行を介してシリアル化される 1 と 0 の文字列に変換されます。 シリアル化は、データを受信するコンピューターがデータを元の形式に変換できるように行う必要があります。 シリアル化を実現する方法は 通信プロトコルと呼ばれ、ソフトウェアとデータ転送ハードウェアの両方によって制御されます。 データが変換されるレベルは複数あります。 次の図は、通信プロトコル レイヤーの大幅に簡略化されたビューを示しています。

通信プロトコル レイヤー

上の図は、エンコード/デコード レイヤーに送信されるデータ (通常はテキスト文字と数字の組み合わせで構成されます) を送信するコンピューター #1 のアプリケーション レイヤーを示しています。 エンコード/デコード レイヤーは、データをコンピューター バイトのストリームにエンコードします。 最下位レベルのハードウェア 層では、ハードウェアはデータのバイトを、行を介して Computer #2 に送信される 1 と 0 のシリアル ストリームに変換します。 Computer #2 のハードウェア レイヤーは、1 と 0 をコンピューター バイトに変換し、デコードのためにエンコード/デコード レイヤーに渡します。 エンコード/デコード レイヤーは、バイトを元の形式にデコードし、データをアプリケーション レイヤーに渡します。

受け入れられるソフトウェア設計の原則は、 抽象化、つまり、問題を解決するために必要なすべての詳細を記述したり、オブジェクトのすべての詳細を記述したりするのではなく、一般的なパラメーターの観点から問題またはオブジェクトを記述するプロセスを使用することです。 抽象化を使用して、デザイナーは、オブジェクトが実際にソフトウェア コードに実装される方法を気にせずに、特定の品質を持つソフトウェア オブジェクトを指定できます。 このような方法では、実装は開いたままにします。 また、仕様が簡略化され、オブジェクトの実装時に証明できるオブジェクトに関する公理を示すことができます。 これらの公理は、オブジェクトが別の上位レベルのオブジェクトで使用されている場合に想定できます。 抽象化は、最も現代的なソフトウェア仕様の特徴です。

ほとんどの 通信プロトコルには、 多くの抽象化が含まれます。 上位レイヤーのオブジェクトは抽象的に定義され、下位レイヤーのオブジェクトを使用して実装することを目的としています。 たとえば、1 つのレイヤーにあるサービスでは、コンピューター間で特定の抽象オブジェクトを転送する必要がある場合があります。 下位レベルのレイヤーでは、エンコード規則を使用して、抽象オブジェクトを 1 と 0 の文字列に変換できます。

シリアル送信を目的とした抽象オブジェクトを指定する一般的な方法の 1 つは、 抽象構文表記 1 (ASN.1) と呼ばれます。 ASN.1 は、CCITT Recommendation X.208 で定義されています。 1 と 0 の文字列などのオブジェクトを表す ASN.1 規則の 1 つのセットは、Distinguished Encoding Rules (DER) と呼ばれ、CCITT Recommendation X.509、セクション 8.7 で定義されています。 これらは、CryptoAPI で現在使用されているエンコード メソッドです。

エンコード/デコード関数の詳細については、「 オブジェクト エンコードおよびデコード関数」を参照してください。