编码和解码数据

若要通过通信媒体(如电话线)发送数据,必须 序列化数据,即转换为通过线路串行传输的一个和零的字符串。 必须以接收数据的计算机能够将数据转换回其原始格式的方式进行序列化。 序列化的实现方式称为 通信协议,由软件和数据传输硬件控制。 在多个级别上转换数据。 下图显示了一个大大简化的通信协议层视图。

通信协议层

上图显示了计算机 #1 上的应用程序层发送要传输的数据 (通常由文本字符和数字的某种组合组成,) 编码/解码层。 编码/解码层将数据编码为计算机字节流。 在硬件层的最低级别,硬件将数据字节转换为通过线路传输到计算机 #2 的 1 和零的串行流。 计算机 #2 的硬件层将 1 和零转换回计算机字节,并将它们传递到编码/解码层进行解码。 编码/解码层将字节解码回其原始格式,并将数据向上传递到应用程序层。

接受的软件设计原则是使用抽象,即使用 抽象化,即按照其一般参数描述问题或对象的过程,而不是描述解决问题所需的所有详细信息,或描述对象的所有详细信息。 使用抽象,设计器可以指定具有特定质量的软件对象,而无需考虑对象在软件代码中的实际实现方式。 这种做法使实现保持打开状态。 它还简化了规范,并使得可以声明有关在实现对象时可以证明的对象的公理。 然后,当对象在另一个更高级别的对象中使用时,可以假定这些公理。 抽象是大多数当代软件规范的标志。

大多数 通信协议 涉及大量抽象。 较高层的对象是抽象定义的,旨在使用较低层的对象来实现。 例如,一个层的服务可能需要在计算机之间传输某些抽象对象。 较低级别的层可以使用编码规则将抽象对象转换为 1 和零的字符串。

指定要串行传输的抽象对象的一种常用方法称为 抽象语法表示法 One (ASN.1) 。 ASN.1 在 CCITT 建议 X.208 中定义。 一组 ASN.1 规则将此类对象表示为 1 和 0 的字符串,称为 可辨别编码规则 (DER) ,并在 CCITT 建议 X.509 第 8.7 节中定义。 这些是 CryptoAPI 当前使用的编码方法。

有关编码/解码函数的详细信息,请参阅 对象编码和解码函数