エンコードされたデータとデコードされたデータ
電話回線などの通信メディアを介してデータを送信するには、データをシリアル化する必要があります。つまり、行を介して順次送信される文字列と 0 の文字列に変換されます。 シリアル化は、データを受信するコンピューターがデータを元の形式に変換できるように行う必要があります。 シリアル化を実現する方法は、通信プロトコルと呼ばれ、ソフトウェアとデータ伝送ハードウェアの両方によって制御されます。 データの変換には複数のレベルがあります。 次の図は、通信プロトコル レイヤーのビューを大幅に簡略化したものです。
上の図は、エンコード/デコード レイヤーに送信されるデータ (通常はテキスト文字と数字の組み合わせで構成されます) を送信するコンピューター #1 上のアプリケーション レイヤーを示しています。 エンコード/デコード レイヤーは、データをコンピューター バイトのストリームにエンコードします。 最下位レベルのハードウェア 層では、ハードウェアはデータのバイトを、コンピューター #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 つのセットは、識別エンコード規則 (DER) と呼ばれ、X.509の CCITT RecommendationX.509 セクション 8.7 で定義されています。 これらは、CryptoAPI で現在使用されているエンコード方法です。
エンコード/デコード関数の詳細については、「オブジェクト エンコードおよびデコード関数の」を参照してください。