Dados codificados e decodificados
Para enviar dados por meio de um meio de comunicação, como uma linha telefônica, os dados devem ser serializados, ou seja, convertidos em uma cadeia de caracteres de zeros e uns que são transmitidos serialmente pela linha. A serialização deve ser feita de forma que o computador que recebe os dados possa converter os dados de volta em seu formato original. A forma como a serialização é realizada é chamada de protocolo de comunicaçãoe é controlada por hardware de transmissão de dados e software. Há vários níveis em que os dados são convertidos. A ilustração a seguir mostra uma exibição muito simplificada das camadas de protocolo de comunicação.
A ilustração anterior mostra a camada de aplicativo no Computador nº 1 enviando os dados a serem transmitidos (que geralmente consiste em alguma combinação de caracteres textuais e números) para a camada de codificação/decodificação. A camada de codificação/decodificação codifica os dados em um fluxo de bytes de computador. No nível mais baixo, a camada de hardware, o hardware converte os bytes de dados em um fluxo serial de uns e zeros que é transmitido pela linha para o Computador nº 2. A camada de hardware do Computador nº 2 converte os zeros e aqueles de volta em bytes de computador e os passa para a camada de codificação/decodificação para decodificação. A camada de codificação/decodificação decodifica os bytes novamente em seu formato original e passa os dados para a camada do aplicativo.
Um princípio de design de software aceito é usar abstração, ou seja, o processo de descrever um problema ou objeto em termos de seus parâmetros gerais em vez de descrever todos os detalhes necessários para resolver o problema ou descrever todos os detalhes de um objeto. Usando a abstração, um designer pode especificar um objeto de software que tenha qualidades específicas sem se preocupar com como o objeto é realmente implementado no código de software. Essa prática deixa a implementação aberta. Ele também simplifica a especificação e torna possível declarar axiomas sobre o objeto que podem ser provados quando o objeto é implementado. Esses axiomas podem então ser assumidos quando o objeto é empregado em outro objeto de nível superior. A abstração é a marca registrada da maioria das especificações de software contemporâneas.
A maioria dos protocolos de comunicação envolve uma boa quantidade de abstração. Objetos em camadas mais altas são definidos de forma abstrata e devem ser implementados usando objetos em camadas inferiores. Por exemplo, um serviço em uma camada pode exigir a transferência de determinados objetos abstratos entre computadores. Uma camada de nível inferior pode usar regras de codificação para transformar os objetos abstratos em cadeias de caracteres de zeros e uns.
Um método comum de especificar objetos abstratos destinados a serem transmitidos em série é chamado AsN.1 (Abstract Syntax Notation One). O ASN.1 é definido na recomendação CCITT X.208 . Um conjunto de regras ASN.1 para representar objetos como cadeias de caracteres de um e zeros é chamado de DER (Distinguished Encoding Rules) e é definido na Recomendação CCITT X.509, Seção 8.7. Estes são os métodos de codificação atualmente usados pela CryptoAPI.
Para obter mais informações sobre funções de codificação/decodificação, consulte funções de codificação e decodificação de objeto.