编码和解码的数据
若要通过通信介质(如电话线)发送数据,必须将数据 序列化,即转换为通过线路串行传输的一个字符串和零。 必须以这样的方式进行序列化,以便接收数据的计算机可以将数据转换回其原始格式。 序列化的实现方式称为 通信协议,并由软件和数据传输硬件控制。 在多个级别上转换数据。 下图显示了通信协议层的大幅简化视图。
上图显示了将要传输的数据(通常由文本字符和数字的某种组合组成)发送到编码/解码层的计算机 #1 上的应用程序层。 编码/解码层将数据编码为计算机字节流。 在最低级别,硬件层会将数据的字节转换为通过行传输到计算机 #2 的一个和零的串行流。 计算机 #2 的硬件层将 1 和 0 转换回计算机字节,并将其传递到编码/解码层进行解码。 编码/解码层将字节解码回其原始格式,并将数据传递到应用程序层。
接受的软件设计原则是使用 抽象,即用常规参数描述问题或对象的过程,而不是描述解决问题所需的所有详细信息,或描述对象的所有详细信息。 使用抽象,设计器可以指定具有特定品质的软件对象,而不必担心对象在软件代码中的实际实现方式。 这种做法使实现保持打开状态。 它还简化了规范,并可以说明有关实现对象时可以证明的对象的公理。 然后,当对象在另一个更高级别的对象中使用时,可以假定这些公理。 抽象是大多数当代软件规范的标志。
大多数 通信协议 涉及大量抽象。 较高层的对象是抽象定义的,旨在使用较低层的对象来实现。 例如,一个层的服务可能需要在计算机之间传输某些抽象对象。 较低层可以使用编码规则将抽象对象转换为一个和零的字符串。
指定要串行传输的抽象对象的一种常见方法称为 抽象语法表示法一(ASN.1)。 ASN.1 在 CCITT 建议 X.208中定义。 一组 ASN.1 规则表示此类对象(如 1 和零的字符串)称为 可分辨编码规则 (DER),并在 CCITT 建议 X.509第 8.7 节中定义。 这些是 CryptoAPI 当前使用的编码方法。
有关编码/解码函数的详细信息,请参阅 对象编码和解码函数。