Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

02 - Arquitetura e Processos

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Arquitetura e Processos da Camada de Apresentação

1. Arquitetura Lógica

A camada de Apresentação (OSI 6) é estruturada em torno de três subsistemas que cooperam para entregar dados de forma interpretável ao peer remoto:

  1. Subcamada de Tradução de Sintaxe — converte entre sintaxe local e sintaxe de transferência.
  2. Subcamada de Negociação de Contexto — combina sintaxe abstrata + sintaxe de transferência em contextos de apresentação.
  3. Subcamada de Serviços Auxiliares — compressão e criptografia aplicadas como transformações adicionais.

Essas subcamadas não existem como processos separados em código real; são uma decomposição lógica que ajuda a entender o fluxo interno da camada.

2. O Modelo de Três Sintaxes

A arquitetura OSI define três níveis de sintaxe que coexistem na camada 6:

Tipo de Sintaxe Função Exemplo
Sintaxe Local Como o dado é armazenado na memória do host int32 little-endian em x86
Sintaxe Abstrata Descrição lógica, independente de plataforma Definição ASN.1 em X.680
Sintaxe de Transferência Codificação concreta para transmissão ASN.1 BER/DER/PER, XDR, JSON

O fluxo é sempre Local → Abstrata → Transferência na transmissão, e o inverso na recepção.

3. Processo de Transmissão (Origem)

Quando a camada de aplicação chama P-DATA.request para enviar dados:

  1. A camada 6 recebe o SDU (Service Data Unit) com sua sintaxe local.
  2. Identifica o contexto de apresentação ativo para aquele fluxo.
  3. Aplica a codificação da sintaxe de transferência correspondente (ex.: DER).
  4. Opcionalmente comprime o resultado (ex.: gzip).
  5. Opcionalmente cifra (ex.: AES-GCM via TLS).
  6. Entrega o PDU resultante à camada de sessão como P-DATA.request.
[App] Dados locais (struct C, little-endian)
   |
   v  [Tradução de sintaxe] -> DER bytes
   v  [Compressão]          -> DER + gzip
   v  [Criptografia]        -> DER + gzip + AES-GCM
   |
   v  [Sessão] P-DATA.request

4. Processo de Recepção (Destino)

Na recepção, P-DATA.indication chega da camada 5 e é processado em ordem inversa:

  1. Decifra o payload (se criptografado).
  2. Descomprime (se comprimido).
  3. Decodifica a sintaxe de transferência → reconstrói a estrutura abstrata.
  4. Converte para a sintaxe local do receptor.
  5. Entrega à camada de aplicação via P-DATA.indication.

5. Contextos de Apresentação

Um Contexto de Apresentação é a associação (identifier, abstract_syntax, transfer_syntax). Cada conexão de apresentação pode ter múltiplos contextos ativos, identificados por um Presentation Context Identifier (PCRI) — tipicamente um inteiro pequeno (0, 1, 2...).

Negociação típica (simplificada do protocolo X.226):

Originador                              Receptor
   |                                       |
   |  CP (Connect Presentation)            |
   |  - context list: [{asn1-snmpv2, BER}] |
   |  - context list: [{asn1-x509, DER}]   |
   | -------------------------------------> |
   |                                       |
   |  CPA (Connect Presentation Accept)    |
   |  - accepted: [0 -> BER, 1 -> DER]     |
   | <------------------------------------- |
   |                                       |
   |  P-DATA: PCRI=0, payload               |
   | -------------------------------------> |

6. Regras de Codificação ASN.1 em Detalhe

BER (Basic Encoding Rules)

Cada valor é codificado como TLV (Tag, Length, Value):

[Tag][Length][Value]
   |      |      |
   |      |      +-- Conteúdo propriamente dito
   |      +--------- Quantidade de bytes no Value
   +---------------- Classe + tipo do dado (UNIVERSAL INTEGER, etc.)

Exemplo: o inteiro 255 em BER é codificado como 02 02 00 FF (tag 02 = INTEGER, length 02 = 2 bytes, value 00FF).

DER (Distinguished Encoding Rules)

Subconjunto restritivo de BER para garantir unicidade. Toda escolha ambígua em BER é fixada: por exemplo, comprimento deve usar a forma mais curta possível. É o que torna possível assinar digitalmente um certificado X.509 — se houvesse múltiplas codificações válidas, a assinatura poderia falhar.

PER (Packed Encoding Rules)

Não usa TLV. Aproveita o conhecimento da sintaxe abstrata para eliminar metadados redundantes. Por exemplo, um campo BOOLEAN é codificado em 1 bit (não 1 byte). Um INTEGER entre 0 e 255 ocupa exatamente 1 byte. Resultado: mensagens até 90% menores que BER.

EXER (XML Encoding Rules)

Codifica ASN.1 como XML — usado para interoperar com sistemas web legados.

7. XDR (External Data Representation)

Alternativa a ASN.1 desenvolvida pela Sun Microsystems para RPC/NFS. Mais simples que ASN.1:

  • Sempre big-endian (network byte order).
  • Inteiros de 4 bytes, floats IEEE 754.
  • Strings terminadas em null, alinhadas em múltiplos de 4 bytes.
  • Tipos compostos: enum, struct, union, array, optional.

Vantagem: trivial de decodificar. Desvantagem: menos compacto que PER, mais rígido que JSON.

8. Estado da Conexão de Apresentação

A camada 6 é stateful. Mantém:

  • Contextos de apresentação ativos (PCRI → sintaxe).
  • Estado de compressão (janela deslizante para LZW/DEFLATE).
  • Estado de criptografia (números de sequência, IVs, chaves de sessão).
  • Buffers para reordenação (se criptografia exigir ordem estrita).

9. Serviços Oferecidos à Camada de Sessão

Primitiva Função
P-CONNECT.request/indication Estabelecer conexão de apresentação
P-CONNECT.response/confirm Aceitar/recusar conexão
P-DATA.request/indication Transferir dados
P-TOKEN-GIVE Repassar token (controle de fluxo)
P-SYNC-MAJOR Sincronização (checkpoint)
P-RELEASE.request Encerrar conexão
P-U-ABORT Abortar (sem handshake)

10. Integração com TLS

Em TLS, a "negociação de contexto" vira o ClientHello/ServerHello, a criptografia ocupa o Record Protocol, e a "sintaxe de transferência" é basicamente TLV sobre os records. Embora TLS não seja formalmente a camada 6 OSI, cumpre exatamente as funções descritas neste documento.

11. Conclusão

A arquitetura da camada de Apresentação organiza a tradução de dados em três eixos: sintaxe local, sintaxe abstrata e sintaxe de transferência, conectados por contextos negociados. As regras de codificação ASN.1 (BER, DER, PER) implementam concretamente esse modelo. Na internet moderna, esses processos continuam vivos — não como camada isolada, mas embutidos em TLS, JSON, Protobuf e em cada biblioteca de serialização que um desenvolvedor utiliza.