Você está na página 1de 72

Capítulo 08

Presentation Layer
Giovane Simamoto Lemes - giovane.lemes@ufu.br
Mateus Honorato de Almeida - mateus.honorato@ufu.br
Rafael Alves de Lima - rafael.alv334@ufu.br
Tiago de Paula Alves - tiago.paula@ufu.br
Yuri Teixeira Mendes - yuri.txm@ufu.br
Sumário
8.1 Presentation Layer Design Issues
8.1.1 Representação de Dados
8.1.2 Compressão de Dados
8.1.3 Segurança e Privacidade de Rede
8.1.4 The OSI Presentatation Service Primitives
8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures
8.2.2 Abstract Syntax
8.2.3 Transfer Syntax
8.3 Técnicas de Compressão de Dados
8.3.1Codificação de um conjunto finito de símbolos
igualmente prováveis
8.3.2 Codificação dependente de frequência
8.3.3 Codificação dependente de contexto
Ch08 - Camada de Apresentação

Contexto Histórico:
Camada em Busca de Função.
Apenas um Local de Conversão.
Permitir que programas orientados a visualização fossem utilizados
em uma variedade de terminais.
Função: resolver todos os problemas relacionados a representação
de dados transmitidos.
Compreensão entre computadores com diferentes
representações.
Ch08 - Camada de Apresentação / 8.1 Design Issues

A camada de Apresentação possui quatro funções principais:


Fornecer aos usuários uma maneira de executar as primitivas do
serviço de sessão.
Promover uma maneira de de especificar estruturas complexas de
dados.
Gerenciar o conjunto de estrutura de dados requeridos.
Converter dados entre as formas internas e externas.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.1 Data Representation

Diferentes formas de representação:


Representação Binária: Os computadores armazenam
informações em formato binário, utilizando 0s e 1s.
Representação de Caracteres: Diferentes sistemas utilizam
diferentes padrões para representar caracteres.(Unicode)
Representação Imagens e Vídeos: Imagens e vídeos são
representados digitalmente por meio de pixels. Cada pixel é
codificado com informações de cor e intensidade.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.1 Data Representation

Ex.: Maquina de complemento de 1's que estabelece uma conexão


com outra de complemento de 2's e então transmite um array de
16 bits inteiros, um a um.
Mesmo que nenhum erro de transmissão ocorra, ele podem ter
uma diferença de valor.
Conversão necessária para corrigir tal erro.
Significado em detrimento do padrão de bits.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.2 Data Compression

O Custo de uso de uma rede depende da quantidade de dados


enviados.
A compressão de dados está intimamente relacionada à sua
representação.
É amplamente usada para economizar espaço na memória, no
disco e na fita magnética.
Foco é reduzir o tamanho de dados digitais enquanto preserva as
informações essenciais contidas neles.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.3 - Network Security and Privacy

Com o advento das redes, a segurança e privacidade de dados


tornou-se algo muito mais complexo.
Principais serviços de segurança são relacionados com:
1. Proteger seus dados para que não sejam lidos por pessoas
sem autorização
2. Prevenir que pessoas sem autorização insira ou remova
mensagens
3. Verificar o transmissor de cada mensagem.
4. Tornar possível que usuários enviem eletronicamente
documentos assinados.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.3 - Network Security and Privacy

Logo, algum tipo de encriptação é necessária para tornar os dados


incompreensíveis para todos a não ser seus devidos donos.
O local da encriptação no modelo OSI é bem controverso.
Pode ser realizada em qualquer camada mas três delas são mais
compatíveis: física, transporte e apresentação.
Quando a criptografia é feita na camada física, uma unidade de
criptografia é inserida entre cada computador e o meio físico.
Esse esquema é chamado de criptografia de link. É simples,
mas relativamente inflexível.
Vantagem: os cabeçalhos, assim como os dados, são
criptografados.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.3 - Network Security and Privacy

Para a maioria das aplicações comerciais, a análise de tráfego não


é um problema, então a criptografia de ponta a ponta feita em uma
das camadas superiores é a solução preferida.
Colocá-la na camada de transporte faz com que toda a sessão seja
criptografada.
Uma abordagem mais sofisticada é colocá-la na camada de
apresentação, para que apenas as estruturas de dados ou campos
que necessitam de criptografia sofram o overhead dela.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.4 - The OSI Presentation Service Primitives

Similares as da camada de Sessão.


As entidades de Aplicação podem:
Estabelecer sessões com um P - CONNECT.request o que faz a
entidade de apresentação emitir um S - CONNECT.request.
Na prática, quase todas as primitivas de serviço de apresentação
são apenas repassadas para a camada de sessão.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.4 - The OSI Presentation Service Primitives
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.4 - The OSI Presentation Service Primitives

As últimas três linhas da Figura 8-1(a) possuem a função de


permitir que os usuários incluam quaisquer estruturas de dados
complexas necessárias para a aplicação em questão.
As estruturas de dados necessárias por uma aplicação podem
ser agrupadas em conjuntos, chamados de contextos.
Cabe à camada de apresentação gerenciar o processo de
negociação pelo qual os usuários concordam em quais estruturas
de dados vão em qual contexto.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.4 - The OSI Presentation Service Primitives

Procedimento padrão de negociação:


Processo de usuário forneça uma lista das bibliotecas de
estruturas de dados que deseja usar.
A outra parte pode aceitar ou rejeitar essas.
A qualquer momento, qualquer lado pode alterar o contexto ao
propor adicionar ou excluir bibliotecas do contexto atual.
A camada de apresentação pode (opcionalmente) manter múltiplos
contextos, facilitando a troca repetida de contexto durante uma
sessão.
Ch08 - Camada de Apresentação / 8.1 Design Issues
8.1.4 - The OSI Presentation Service Primitives

É possível que a camada de apresentação redefina o contexto de


apresentação sempre que uma atividade for retomada ou uma
ressincronização for feita.
Por exemplo, a camada de apresentação pode lembrar o
contexto de transferência de arquivo e restaurá-lo quando a
atividade de transferência de arquivo for retomada. As
primitivas listadas no final da Figura 8-1(a) fornecem esses
serviços.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)

Exercício mental:
Suponha que fosse possível copiar dados, de maneira confiável, da
memória de um computador diretamente para a de outro computado. Se
isso fosse possível, o problema da comunicação estaria “resolvido”?
Depende de como se define “problema de comunicação”. Com certeza, uma
cópia perfeita, memória a memória, comunicaria com exatidão os bits e os
bytes de uma máquina para outra.
Mas essa cópia exata de bits e bytes significa que, quando o software que
estiver sendo executado no computador receptor acessar esses dados, ele
verá os mesmos valores que estavam armazenados na memória do
computador remetente?
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)

Solução: “Não necessariamente”! O ponto crucial da questão é que diferentes


arquiteturas de computadores, diferentes sistemas operacionais e
compiladores têm diferentes convenções de armazenamento e representação
de dados. Quando se trata de comunicar e armazenar dados entre vários
computadores (como acontece em todas as redes de comunicação), fica
evidente que esse problema da representação de dados tem de ser resolvido.

A ASN.1 é um padrão originado na ISO, usado em uma série de protocolos


relacionados à Internet, em particular na área de gerenciamento de rede.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures

Desenvolvida pelo CCITT (ITU-T), a ASN.1 fornece um meio formal e abstrato para definir tipos de
dados e estruturas.
A camada de aplicação contém muitas aplicações diferentes, cada uma com uma variedade de
estruturas complexas que são transmitidas como APDUs (Application Protocol Data Units). Os
campos dessas APDUs geralmente possuem um tipo (por exemplo, Booleano ou inteiro) e em
muitos casos os campos podem ser omitidos ou ter valores padrão.
A ideia básica é criar tipos de estrutura (ou seja, tipos de dados) necessários para cada aplicativo
em ASN.1 e empacotá-los juntos em um módulo (biblioteca). Quando uma aplicação deseja
transmitir uma estrutura de dados (ou seja, um APDU), ela pode passar a estrutura de dados para
a camada de apresentação, junto com o nome ASN da estrutura de dados. Usando a definição
ASN.1 como guia, a camada de apresentação sabe. quais são os tipos e tamanhos dos campos
solares e, portanto, sabe como codificá-los para transmissão.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures
Por outro lado, cada APDU só deve ser convertido uma vez, em vez de duas. No esquema ASN.1,
as conversões são necessárias em ambas as extremidades porque a sintaxe de transferência
ASN.1 especifica que o complemento de dois deve ser usado.

A B

A)O remetente converte os dados para ASN.1 transfere a sintaxe para transmissão e o receptor converte
os dados do ASN.1 para o formato interno.B)Cada recptor converte diretamente para o formato receptor.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures

Um problema muito mais complicado tem a ver com a ordem de bytes usada por diferentes
computadores.
Como exemplo desse problema, considere o fragmento simples em linguagem C a seguir.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures

Outro exemplo desse problema, considere o fragmento em linguagem Pascal a seguir.

Input:
Name: estegossauro
Lengh: 10 metros
Carnivorous: False
Bones: 300
Discovery:1887
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures

Representação na memória do codigo em Pascal


Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures

Problemas: aqui os inteiros e o booleano estão corretos, mas se a string for


impressa, ela aparecerá como “getsuaso sur” em vez de “stegosaurus”
porque espera-se que o computador armazene as strings em ordem,
começando no primeiro byte.
A camada de apresentação poderia até fazer essa reversão
automaticamente. O problema é que acabamos com a imagem de memória.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures

Solução:
1. Alternativa seria o agente enviar os bytes do inteiro na mesma
ordem em que serão armazenados na entidade gerenciadora.
2. Agente enviar o inteiro em sua própria ordem de
armazenamento, deixando à entidade gerenciadora a
responsabilidade de reordenar os bytes quando necessário.
Qualquer uma das alternativas exigiria que o remetente ou o receptor
conhecesse o formato de representação de inteiros do outro.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures

Portanto no Jargão ISO o ASN.1 descreve um serviço de apresentação — o serviço de transmitir e traduzir
informações de um formato específico de uma máquina para outro. A Figura ilustra um problema de
apresentação no mundo real; nenhum dos receptores entende a ideia essencial que está sendo comunicada
— que o interlocutor gosta de algo.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.1 Data Structures

Por fim um serviço de apresentação pode resolver esse problema traduzindo a ideia para uma linguagem
inteligível (pelo serviço de apresentação), independentemente de quem fala, enviando essa informação ao
receptor e, em seguida, traduzindo-a para uma linguagem que o receptor entende.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

Originalmente foi pensado pela ISO que essas definições seriam lidas apenas por
humanos

A descrição de um tipo de dado é chamada Sintaxe Abstrata, pois não é


implicado nenhuma representação

OCTET
==
Pascal ASN.1 BYTE

ISO - International Organization for Standardization


Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

Os tipos primitivos em
ASN.1 estão embultidos na
linguagem, e funcionam
como base para tipos mais
complexos.

Como todas as palavras


reservadas em ASN.1, são
sempre escritas em CAIXA
ALTA.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

INTEGER - Números Cardinais utilizados para contagem, sem nenhum valor máximo
especificado. Como efeito, é possível definir nomes que correspondam a valores
específicos, como domingo = 1, segunda = 2, etc.

BOOLEAN - Pode conter um de dois valores: TRUE ou FALSE

BIT STRING - São listas ordenadas de bits, contendo 0 ou mais bits, sem quantidade
máxima, sem necessidade de ser um multiplo de 8 ou qualquer outro valor

OCTET STRING - São listas ordenadas de bytes, contendo 0 ou mais bytes, sem
quantidade máxima. Podem ser utilizadas para representar caracteres ou outros
dados orientados a byte
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

ANY - Um tipo especial, caso um campo seja desse tipo, pode ser preenchido por
qualquer tipo válido. Essencialmente é a união de todos os tipos.

NULL - É o complemento de ANY, sem tipo algum. Só possuí um valor, também


chamado NULL. Se um record for transmitido, os campos NULL não precisam ser
enviados, e sua representação é dependente da implementção.

OBJECT IDENTIFIER - Quando uma sessão é estabelecida, a camada de apresentação


faz uma negociação para que ambos lados concordem com as sintaxes abstratas,
regras de codificação e protocolos que serão utilizados pelas aplicações.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

Os tipos primitivos podem ser combinados para construir tipos mais complexos. A
seguir temos os principais construtores utilizados pela ASN.1 para esse propósito:
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

SEQUENCE - Lista ordenada de vários tipos, podendo esses também ser tipos
construídos

SEQUENCE OF - Lista ordenada de um único tipo, similar a um array.

SET - Similar a sequence, porém os componentes não são garantidos a estarem na


mesma ordem quando forem transmitidos.

SET OF - Uma coleção de elementos do mesmo tipo, sem ordem estabelecida

CHOICE - Uma estrutura de dados pode conter qualquer um de diversos tipos


Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

Em adição aos tipos primitivos, o padrão ASN.1 discute alguns tipos pré-definidos
que são uteís em diversas aplicações.

ASN.1 permite que campos sejam declarados como OPTIONAL, ou


alternativamente declarados como DEFAULT, seguidos pelo valor a ser utilizado
caso o campo não seja transmitido.

A existência dos tipos OPTIONAL e DEFAULT causa potenciais problemas com a


identificação dos dados. A solução é utilizar tags, permitindo que os campos
tenham tags que os identifiquem. São permitidos quatro tipos de tags: UNIVERSAL,
APPLICATION, PRIVATE e específica de contexto (sem palavra reservada). São
escritas entre colchetes (EX.: [APPLICATION 4]).
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

Caso não seja necessário enviar o tipo de um valor que utiliza tags, é utilizado a
palavra chave IMPLICIT após a tag.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

Tipos de tags:

UNIVERSAL - Reservada para tipos primitivos, e alguns tipos quasi-primitivos

APPLICATION - Utilizadas por vários protocolos da camada de aplicação, porém


não é proibido o uso pelos usuários onde não há ambiguidade

PRIVATE - É encorajado que os usuários utilizem essa tag para seus próprios tipos

context specific - Quando é necessário diferenciar os campos, mas a quantidade é


limitada pelo tipo de dado.
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.2 Abstract Syntax

ASN.1 não permite apenas a definição de tipos, mas também um meio de


determinar valores para esses tipos
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.3 Transfer Syntax

A motivação por trás da ASN.1 é a necessidade de representar estruturas


de dados de forma inequívoca no fio de transmissão. Existem diversas
regras associadas com a sintaxe abstrata relacionadas a esse problema,
como por exemplo:

Embora IMPLICIT possa ser usada como tag em qualquer tipo, é proibido
seu uso nos tipos ANY e CHOICE, pois sem a informação explicita do tipo,
não é possível que o recipiente saiba o tipo do valor sendo enviado
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.3 Transfer Syntax

Cada valor transmitido, tanto primitivo quanto um construido,


potencialmente é composto por quatro campos:

1. O Identificador (Tipo ou Tag)


2. O comprimento do campo de dados, em bytes
3. O campo de dados
4. Uma flag sinalizando o fim dos dados, caso o comprimento não seja
conhecido

Os três primeiros estão sempre presentes. O último é opcional


Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.3 Transfer Syntax

O Identificador tem três sub-campos, como mostrado na figura

Tag - 2 bits
00 - UNIVERSAL
01 - APPLICATION
10 - context-specific
11 - PRIVATE
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.3 Transfer Syntax

Os últimos 5 dígitos são utilizados para codificar o valor da tag caso esteja
entre 0 e 30. Caso seja maior é codificada com 11111, indicando que o
valor verdadeiro está no próximo byte ou bytes.

Utilizando 2 bytes é possível armazenar valores até 2^7-1, e com 3 bytes o


valor vai até 2^14-1
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.3 Transfer Syntax

A imagem a seguir mostra uma tabela com as tags


do tipo UNIVERSAL e seus respectivos códigos:

Além das mencionadas anteriormente, temos:

OBJECT DESCRIPTOR - String que pode ser lida por


humanos identificando um objeto
OBJECT IDENTIFIER - Utilizado para
reconhecimento do objeto por máquinas
EXTERNAL - Permite a referência a outras sintaxes
abstratas, sem as incluí-las de fato
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.3 Transfer Syntax

São registrados dois tipos para notar o tempo, por motivos históricos.

SEQUENCE e SEQUENCE OF utilizam o mesmo tipo universal, bem com SET


e SET OF. Isso faz com que se percam informações na sintaxe de
transferência, uma decisão que não parece ter razão técnica válida por
parte da ISO
Ch08 - Camada de Apresentação / 8.2 Abstract Syntax Notation (ASN.1)
8.2.3 Transfer Syntax

Seguindo o campo identificador, segue um campo notando quantos bytes os


dados ocupam. É utilizada a mesma lógica aplicada em tags maiores que 30.

Comprimentos menores que 128 bytes são codificados em um byte. Caso o


comprimento seja maior, são utilizados 7 bits por byte e o de maior ordem é
colocado como 1.

Em alguns casos, dados são transmitidos da camda de aplicação para a de


apresentação em pequenas unidades. Se a camada de apresentação tem
espaço limitado de buffer é indicado que os dados tem tamanho variado e
seu final é indicado por uma flag especial
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3 Técnicas de Compressão de Dados

Compressão é o processo de redução do tamanho de dados. Isso é


alcançado por meio de algoritmos que eliminam redundâncias e
simplificam a representação da informação, permitindo economia de
espaço de armazenamento e rapidez na transmissão de dados pela
rede.

Tipos de compressão de dados:


Compressão sem perdas
Compressão com perdas
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3 Técnicas de Compressão de Dados

Técnicas de compressão de dados é crucial na otimização da largura


de banda, redução do tempo de transmissão e minimização do
armazenamento.

Principais aspectos que são considerados durante o desenvolvimento


de algoritmos de compactação:
A finitude do conjunto de símbolos
As frequências relativas com as quais os símbolos são usados
Contexto em que um símbolo aparece
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.1 Codificação de um Conjunto Finito de Símbolos Igualmente
Prováveis
A abordagem central é encontrar uma representação eficaz para
transmitir informações sobre elementos de um conjunto finito, onde
cada elemento possui probabilidade igual de ocorrência. Neste método
não há perda de dados.

Exemplo:
Transmissão diária de todos os títulos solicitados naquela filial
naquele dia, o número da filia deve ser enviado primeiro.
Se cada título tiver 20 caracteres, é necessário 140 bits/título.
Biblioteca mais antiga do mundo tem 2^26 títulos
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.1 Codificação de um Conjunto Finito de Símbolos Igualmente
Prováveis
Exemplo:
Podemos enviar uma lista ordenada, utilizando apenas 26 bits, ao
invés dos 140 bits.
Se o título não estiver na lista previamente combinada, o título
pode ser soletrado.
Cada título é delimitado pelo caractere ASCII ETX (fim de texto).
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência
A abordagem central é encontrar uma representação eficaz para
transmitir informações sobre elementos de um conjunto finito,
onde cada elemento possui uma probabilidade diferente de
ocorrência. Neste método não há perda de dados.
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência
Entropia de Shannon:

N: É o número total de símbolos diferentes na distribuição de


probabilidade
Pi: Representa a probabilidade de ocorrência de cada símbolo
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Algoritmo de codificação de Huffman:


Liste os símbolos com suas probabilidades, em ordem crescente
Construção de uma árvore binária:
Encontre os dois nós com menores probabilidades e marque-
os
Adicione um novo nó com a soma de suas probabilidades
Repita os passos acima até que todos os nós estejam marcados
Algoritmo de decodificação dos símbolos:
Rastreie o caminho da raiz até o nó com o símbolo
Registrando o caminho (esquerda=0 e direita=1 ou
esquerda=1 e direita=0) como o código do símbolo
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Liste os símbolos com suas probabilidades, em ordem crescente

D C B A

0,1 0,2 0,3 0,4


Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Construção da árvore:
Encontre os dois nós com menores probabilidades e marque-
os
Adicione um novo nó com a soma de suas probabilidades

0,3
D+C

D C
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Construção da árvore:
Encontre os dois nós com menores probabilidades e marque-
os
Adicione um novo nó com a soma de suas probabilidades

D+C B A

0,3 0,3 0,4


Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Construção da árvore:
Encontre os dois nós com menores probabilidades e marque-
os
Adicione um novo nó com a soma de suas probabilidades

0,6

B 0,3
D+C+B

D C
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Construção da árvore:
Encontre os dois nós com menores probabilidades e marque-
os
Adicione um novo nó com a soma de suas probabilidades

A D+C+B

0,4 0,6
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Construção da árvore:
Encontre os dois nós com menores probabilidades e marque-
os
Adicione um novo nó com a soma de suas probabilidades
1,0

A 0,6

D+C+B+A
B 0,3

D C
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Codificação dos símbolos:


Rastreie o caminho da raiz até o símbolo
Registre o caminho (esquerda=0 e direita=1 ou esquerda=1
e direita=0) como o código do símbolo
1,0
0 1
Exemplo:
A 0,6
A D C A B - 0 110 111 0 10 0 1

B 0,3
0 1

D C
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Algoritmo de codificação aritmética:


Determine a probabilidade para cada símbolo
Atribua a cada símbolo um intervalo proporcional à sua
probabilidade no intervalor [0, 1], de forma acumulativa
Reduzir o intervalo para o subintervalo correspondente ao
símbolo atual proporcional à sua probabilidade, e atualizar o
intervalo para o próximo símbolo
Selecionar qualquer ponto dentro do intervalo final como o
código para a sequência
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Determine a probabilidade para cada símbolo

D C B A

0,4 0,1 0,3 0,2


Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Atribua a cada símbolo um intervalo proporcional à sua


probabilidade no intervalor [0, 1], de forma acumulativa
Reduzir o intervalo para o subintervalo correspondente ao
símbolo atual proporcional à sua probabilidade, e atualizar o
intervalo para o próximo símbolo
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Selecionar qualquer ponto dentro do intervalo final como o


código para a sequência

Exemplo:
bdabc - 0,38900
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.2 Codificação Dependente de Frequência

Algoritmo de decodificação aritmética:


Use a mesma probabilidade dos símbolos que foram usadas na
codificação
Para cada símbolo na sequência codificada:
Encontre o símbolo cujo o intervalo contém o ponto atual
dentro do intervalo global
Adicione esse símbolo a sequência decodificada
Atualize o intervalo para o próximo símbolo
Após decodificar todos os símbolos, a sequência estará invertida
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.3 Codificação Dependente de Contexto

Essa forma de compactação de dados, considera o contexto em que


um símbolo aparece, enquanto, outras formas de compactação não
presumem que a ocorrência de um símbolo é independente do
símbolo anterior.
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.3 Codificação Dependente de Contexto

Probabilidade condicional:
Utiliza-se de uma tabela para cada símbolo do conjunto, se for o
alfabeto são 26 símbolos.
Quanto maior a correlação entre entre os símbolos, maior é a
economia.
A desvantagem é que precisa é necessário grandes número de
tabelas.
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.3 Codificação Dependente de Contexto

Probabilidade condicional:
Uma melhoria que pode ser feita é utilizar uma variação do
código de Baudot, que utilize-se de 5 bits (32 símbolos) e um
sistema de “shifts”.
Na variação utilizará de minúsculas, maiúsculas, números +
especiais e controle, 4 códigos são para mudança e 28 códigos
para símbolos (104 símbolos distintos).
Para mudança de conjuntos de símbolos, é necessário símbolos
especiais.
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.3 Codificação Dependente de Contexto

Probabilidade condicional:
A suposição básica por trás desse modelo é que o símbolo
seguinte a uma letra minúscula provavelmente será outra letra
minúscula (ou espaço ou nova linha), e que o símbolo seguinte a
um número provavelmente será outro número.
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.3 Codificação Dependente de Contexto

Probabilidade condicional:
Uma vantagem do código de Baudot são de tamanho fixo,
enquanto códigos como o de Huffman tem tamanhos variáveis.
O código de Baudot também é mais resiliente a erros de
transmissão.
Mas não gera tanta grande compressão dos dados.
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.3 Codificação Dependente de Contexto

Compressão de sequência de símbolos repetidos:


Esse método reduz sequências repetidas de símbolos usando
contagem e símbolo.
A eficiência dessa técnica depende da frequência e do
comprimento das sequências repetidas nos dados.
Exemplo:
"AAABBBCCC" = "3A3B3C"
"AAABBBCCC" = 7 (bits/símbolo) * 9 (símbolos) = 63 bits
"3A3B3C" = 2 (bits/número) * 3 (quantidade de números) +
7 (bits/símbolo) * 3 (quantidade de símbolos) = 27 bits
Gerou 57% de economia.
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.3 Codificação Dependente de Contexto

Codificação por execução de comprimento:


Cada símbolo de k bits é usado para representar o número de
zeros que ocorrem entre dois bits 1 consecutivos na sequência
original.
Exemplo:
00010000010000001000000000000001000000100010000000
110100000101

Sequência por codificação por execução de comprimento:


011 101 110 111 111 000 110 011 111 000 000 001 101 001
Gerou uma economia de 34%.
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.3 Codificação Dependente de Contexto

Codificação por execução de comprimento:


É uma técnica eficaz para reduzir a redundância de dados,
especialmente em situações onde há muita repetição.
Em uma transmissão digital de televisão em cores, com 30
quadros/segundos, com um imagem 1000x600 pixels e 16
bits/pixel para cores.
600.000 pixels/quadro, são 288 megabits/segundo. Mas
segundo o teorema de Nyquist séria necessário uma largura de
banda de 480 MHz ou 572 MHz.
Entretanto, é possível utilizar 6 MHz.
Ch08 - Camada de Apresentação / 8.3 Técnicas de Compressão de Dados
8.3.3 Codificação Dependente de Contexto

Codificação por execução de comprimento:


A maioria dos quadros são quase idênticos aos seus
predecessores.
Cada televisão pudesse ser equipada com um buffer contendo um
quadro (1,2 Mbytes), séria necessário apenas transmitir as
diferenças entre o quadro atual e o anterior.
Bibliografia

Andrew S. Tanenbaum - "Computer Networks", 2nd edition Prentice-


Hall, Inc. Upper Saddle River, NJ, USA, 1988, ISBN:0-13-162959-X-
8° Capítulo.

Kurose Ross- “Redes de Computadores e Internet: Uma abordagem


topdown.” 5ed, Pearson, 2010 - 9° Capítulo.

Você também pode gostar