Você está na página 1de 30

Tecnologias de Redes de Computadores

Gustavo Sousa Pavani

Universidade Federal do ABC (UFABC) 2º Quadrimestre - 2016

Aula 3

Camada de enlace de dados

Camada de enlace de dados
Camada de enlace de dados

A camada de enlace de dados tem uma série funções específicas:

Prover uma interface de serviços bem definida para a camada de

rede;

Tratar os erros de transmissão;

Regular o fluxo de dados, de forma que um receptor lento não

seja inundado por um transmissor rápido.

Para cumprir esses objetivos, a camada de enlace de dados toma os pacotes que recebeu da camada de rede e os encapsula em quadros para a transmissão.

Cada quadro contém um cabeçalho de quadro, um campo de carga útil para guardar o pacote e um cauda de quadro.

O gerenciamento dos quadros formam o núcleo das tarefas da

camada de enlace de dados.

Relação entre pacotes e quadros

Relação entre pacotes e quadros
Relação entre pacotes e quadros
Relação entre pacotes e quadros  Note que as funções de controle de erro e de

Note que as funções de controle de erro e de controle de fluxo podem ser também encontradas em outras camadas!

Serviços providos a camada de rede

Serviços providos a camada de rede
Serviços providos a camada de rede

O principal serviço da camada de enlace de dados é transferir dados da camada de rede da máquina origem

para a camada de rede na máquina destino.

É mais fácil imaginar um protocolo de enlace de dados (a)!

camada de rede na máquina destino. – É mais fácil imaginar um protocolo de enlace de

Gustavo S. Pavani

4

Tipos de serviço - 1

Tipos de serviço - 1
Tipos de serviço - 1

Serviço sem conexão e sem confirmação

A máquina origem envia quadros para a máquina destino, sem

que o destino acuse o recebimento deles.

Não estabelecimento de nenhuma conexão lógica.

Apropriado quando a taxa de erros é tão baixa, que a recuperação é deixada para as camadas superiores.

Ex: redes locais.

Também é apropriada para acomodar tráfego tempo real.

Serviço sem conexão, mas com confirmação.

Não há nenhuma conexão lógica, mas cada quadro tem seu recebimento acusado.

Se a confirmação de recebimento do quadro não chega dentro de um certo intervalo, ele pode ser enviado novamente.

Apropriado para redes com canais não-confiáveis.

Ex: redes sem fio.

Tipos de serviço - 2

Tipos de serviço - 2
Tipos de serviço - 2

Serviço com conexão e com confirmação:

É o tipo de serviço mais sofisticado.

As máquinas origem e destino estabelecem uma conexão antes dos dados serem transferidos.

Cada quadro enviado na conexão recebe um número e a

camada de enlace de dados garante que cada quadro enviado é

recebido.

Também garante que cada quadro é recebido apenas uma vez e que todos os quadros são recebidos na mesma ordem.

Três fases

Estabelecimento da conexão com inicialização dos contadores.

Um ou mais quadros são transmitidos.

A conexão e os seus recursos (buffers, contadores, etc) são liberados.

Sub-rede WAN com enlaces ponto-a-ponto

Sub-rede WAN com enlaces ponto-a-ponto
Sub-rede WAN com enlaces ponto-a-ponto

Exemplo de sub-rede WAN com enlaces ponto-a-ponto.

Quando o quadro chega no roteador, o hardware o checa por erros

e passa o quadro para o software da camada de enlace de dados.

O software checa se o quadro é esperado e, em caso afirmativo, envia o pacote que está na carga útil para o software de roteamento.

O software de roteamento escolhe o enlace de saída e passa o

pacote para o software da camada de enlace de dados, que o

transmite.

o enlace de saída e passa o pacote para o software da camada de enlace de

Enquadramento

Enquadramento  Para prover o serviço a camada de rede, a camada de enlace de dados
Enquadramento  Para prover o serviço a camada de rede, a camada de enlace de dados

Para prover o serviço a camada de rede, a camada de enlace de dados deve usar o serviço fornecido pela camada física.

O fluxo de bits fornecido pela camada física não está isento de erros.

A camada de enlace de dados deve detectar e, se necessário, corrigir esses erros.

A camada de enlace de dados deve quebrar esse fluxo de bits em

quadros discretos e calcular um checksum para cada quadro.

Quando o quadro chega no destino o checksum é recalculado.

Se o novo valor de checksum for diferente daquele contido no quadro, então a camada de enlace de dados sabe que houve um erro e toma as

medidas necessárias para gerenciar essa situação.

Quebrar um fluxo de bits em quadros não é uma tarefa trivial! Métodos:

Contagem de caracteres

Bytes indicadores (flags) com preenchimento (stuffing) de bytes.

Indicadores de início e fim com preenchimento de bits.

Violações da codificação da camada física.

Contagem de caracteres

Contagem de caracteres
Contagem de caracteres

Cabeçalho do quadro contém campo que especifica o número de caracteres no quadro.

O número de caracteres pode ser modificado por erros de

transmissão.

O que causa um erro de sincronização.

Mesmo que o checksum esteja incorreto, o destino sabe que o quadro foi

danificado, mas não sabe aonde o próximo quadro começa.

Raramente usado hoje em dia.

Gustavo S. Pavani
Gustavo S. Pavani

9

Bytes indicadores com preenchimento de bytes

Bytes indicadores com preenchimento de bytes  Evita o problema da re-sincronização após um erro através
Bytes indicadores com preenchimento de bytes  Evita o problema da re-sincronização após um erro através

Evita o problema da re-sincronização após um erro através do uso de bytes especiais para o início e o fim de

cada quadro.

Normalmente se usa o mesmo byte, chamado de byte flag, como delimitadores do início e do fim do quadro.

Problemas com dados binários. Que pode ser resolvido com o uso de caractere especial de escape (ESC) antes de cada byte flag nos dados binários. A camada de enlace de dados remove o byte de escape antes que os dados sejam entregues para a camada de rede.

Caso um caractere de escape apareça no meio dos dados binários, ele também recebe um byte de escape para preenchimento. Assim,

um só byte de escape é parte de uma sequência de escape,

enquanto dois bytes de escape indica um caractere de escape que ocorreu naturalmente nos dados.

Essa técnica é conhecida como preenchimento (stuffing) de bytes.

Problema: supõe o uso de caracteres de 8 bits.

Quadros delimitados por byte flags

Quadros delimitados por byte flags (a) Exemplo do uso de flags como delimitadores. (b) Quatro sequências
Quadros delimitados por byte flags (a) Exemplo do uso de flags como delimitadores. (b) Quatro sequências
Quadros delimitados por byte flags (a) Exemplo do uso de flags como delimitadores. (b) Quatro sequências

(a)

Exemplo do uso de flags como delimitadores.

(b)

Quatro sequências de bytes antes e depois do

processo de preenchimento.

Indicadores de início e fim com preenchimento de bits

Indicadores de início e fim com preenchimento de bits  Permite que os quadros contenham um
Indicadores de início e fim com preenchimento de bits  Permite que os quadros contenham um

Permite que os quadros contenham um número qualquer de bits, permitindo códigos de caracteres com um

número qualquer de bits.

Cada quadro começa e termina com certo padrão de bits, como, por exemplo, 01111110.

Quando a camada de enlace de dados do emissor encontra 5

bits “1”, ele preenche com um bit “0”.

O preenchimento de bits é análogo ao preenchimento de bytes.

O receptor quando recebe 5 bits “1” seguido de um bit “0”, ele automaticamente remove o bit “0”.

quando recebe 5 bits “1” seguido de um bit “0”, ele automaticamente remove o bit “0”.

Gustavo S. Pavani

12

Violações da codificação da camada física

Violações da codificação da camada física  É possível somente quando a codificação na camada física
Violações da codificação da camada física  É possível somente quando a codificação na camada física

É possível somente quando a codificação na camada física contém certa redundância.

Por exemplo, algumas LANs codificam um bit de dados usando

dois bits físicos, pois as transições facilitam encontrar os limites de cada bit.

Ex: o par “1-0” indica um bit “1” e o par “0-1” indica o bit “0”. Assim, as combinações “0-0” e “1-1” não são usadas para dados, mas são usadas para delimitar quadros em certo tipos de protocolo.

Vários protocolos de enlace de dados usam uma combinação do método da contagem de caracteres com

outros métodos.

Quando um quadro chega, o campo contador é usado para localizar o final do quadro. Somente se o delimitador apropriado for encontrado naquela posição e o checksum estiver correto é

que o quadro será aceito como válido. Caso contrário, a entrada

é lida em busca do próximo delimitador.

Controle de erro

Controle de erro  Como ter certeza que os quadros foram entregues à camada de rede
Controle de erro  Como ter certeza que os quadros foram entregues à camada de rede

Como ter certeza que os quadros foram entregues à camada de rede do destino e na ordem correta?

A maneira usual de se obter uma entrega confiável é através do

envio de algum retorno ao emissor.

Usualmente, o receptor envia quadros especiais contendo confirmações positivas ou negativas sobre os quadros enviados.

Entretanto, um problema no hardware, como uma rajada de ruído, pode fazer com que um quadro se perca completamente.

Necessidade de um temporizador na camada de enlace de dados. Quando o emissor envia um quadro, ele deve iniciar um temporizador. Se o temporizador deve expirar após um intervalo longo o suficiente para o quadro atingir o destino, ser processado e ter a confirmação

retornada para o emissor.

Finalmente, se o quadro ou sua confirmação de recebimento é perdida, a solução óbvia é retransmitir o quadro.

Para evitar que o receptor receba o quadro mais de uma vez, é necessário alocar um número de sequência para os quadros, de forma que o receptor seja capaz de distinguir as retransmissões dos originais.

Controle de fluxo

Controle de fluxo  Um problema importante que ocorre na camada de enlace de dados (e
Controle de fluxo  Um problema importante que ocorre na camada de enlace de dados (e

Um problema importante que ocorre na camada de enlace de dados (e em outras também) é o que fazer

quando o emissor quer transmitir quadros mais

rapidamente que o receptor pode aceitar.

Duas estratégias são normalmente usadas:

No controle de fluxo baseado em realimentação (feedback), o receptor manda informação para o emissor dando permissão para enviar mais dados ou, ao menos, dizendo ao emissor a situação do receptor.

Vários esquemas são conhecidos, mas usam na maior parte das

vezes um conjunto de regras de quando o emissor pode transmitir o

próximo quadro.

No controle de fluxo baseado em taxa, o protocolo tem um mecanismo para limitar a taxa que o emissor pode transmitir

dados, sem usar uma realimentação do receptor.

Essa estratégia nunca é usada na camada de enlace de dados.

Tratamento de erros

Tratamento de erros  Duas estratégias para tratar os erros: – Inserir informação redundante em cada
Tratamento de erros  Duas estratégias para tratar os erros: – Inserir informação redundante em cada

Duas estratégias para tratar os erros:

Inserir informação redundante em cada bloco de dados enviado, o que permite o receptor deduzir os dados que foram transmitidos.

Ex: canais com alta taxa de erro, como redes sem fio. É melhor

entender os dados transmitidos do que se basear em

retransmissões, que também podem conter erros.

Incluir somente redundância suficiente para permitir que o receptor deduza que um erro aconteceu e que

será necessário a retransmissão do dado.

Ex: canais tem baixa taxa de erro, como comunicações ópticas. É mais barato usar um código detector de erro e retransmitir os dados que ocasionalmente tiverem problemas.

Distância de Hamming

Distância de Hamming  Um quadro contendo m bits de dados e r são bits redundantes
Distância de Hamming  Um quadro contendo m bits de dados e r são bits redundantes

Um quadro contendo m bits de dados e r são bits redundantes para checagem. Seja n = m + r, que

normalmente é referido como palavra-código (codeword).

Seja duas palavras código 10001001 e 10110001, é possível observar que há 3 bits diferentes.

O número de posições de bits que duas palavras-código diferem é

chamada de distância de Hamming.

Na maior parte das aplicações de transmissão de dados, todas as 2 m mensagens são válidas, mas nem todas as 2 n possíveis palavras- código são usadas, devido ao cálculo dos bits de checagem.

Assim, é possível construir uma lista completa de palavras-código e dessa

lista achar as duas palavras-código cuja distância de Hamming é mínima.

Essa é a distância de Hamming do código.

As propriedades de detecção e correção de erro dependem da distância de Hamming.

Detectar d erros: distância de Hamming = d + 1 Corrigir d erros: distância de Hamming = 2d + 1

Exemplos de códigos

Exemplos de códigos  Exemplo de código de detecção de erros: – Um bit de paridade
Exemplos de códigos  Exemplo de código de detecção de erros: – Um bit de paridade

Exemplo de código de detecção de erros:

Um bit de paridade é concatenado aos dados.

O bit de paridade é escolhido de forma que o número de bits “1” na

palavra é par (ou ímpar).

Ex: 1011010 é enviado em paridade par, um bit “0” é adicionado. Com paridade ímpar, um bit “1” é adicionado.

Um código com paridade única tem distância de Hamming igual a 2.

Exemplo de código corretor de erros:

Considere o seguinte código com somente 4 palavras-código válidas: 0000000000, 0000011111, 1111100000 e 1111111111.

A distância de Hamming do código é igual a 5, o que significa que esse código pode corrigir erros duplos.

Ex: Se 0000000111 chega no receptor, ele considera que o original foi 0000011111. Se houver um erro triplo, entretanto, o erro não será

corrigido de forma apropriada.

Correção de erros simples - 1

Correção de erros simples - 1  Código com m bits de mensagem e r bits
Correção de erros simples - 1  Código com m bits de mensagem e r bits

Código com m bits de mensagem e r bits de checagem que permite todos os erros simples sejam corrigíveis.

Todas as 2 m mensagens legais tem n palavras-código à distância de 1 dela.

Essas são formadas através da inversão sistemática de cada um dos n bits da palavras-código que formam essas mensagens.

Assim, cada uma das 2 m mensagens legais requer n + 1 padrões de bits dedicados.

Como o número total de padrões de bits é 2 n temos que (n + 1)2 m 2 n ou (m + r + 1)2 m 2 n

Método de Hamming (1950)

Os bits são numerados da esquerda para direita.

Os bits que são potência de 2 (1, 2, 4, 8, 16, etc) são bits de checagem. Os restantes (3, 5, 6, 7, 9, etc) são preenchidos com os m bits de dados.

Cada bit de checagem força a paridade de uma coleção de bits, incluindo a si próprio, de ser par (ou ímpar).

Correção de erros simples - 2

Correção de erros simples - 2 – Para ver quais bits de checagem o bit de
Correção de erros simples - 2 – Para ver quais bits de checagem o bit de

Para ver quais bits de checagem o bit de dado k contribui, é necessário reescrever k como uma soma de potência de 2.

Ex: 11 = 1 + 2 + 8 e 29 = 1 + 4 + 8 + 16.

Assim, um bit é checado pelos bits de checagem que ocorrem na sua expansão.

Quando uma palavra-código chega, o receptor inicializa o

contador para zero.

O receptor examina cada bit de checagem j (j=1, 2, 4, 8,

ver se tem a paridade correta. Se não tem a paridade correta, o receptor adiciona j ao contador.

Se o contador é zero após o exame de todos os bits de

), para

checagem, a palavra-código é aceita.

Se não é zero, contém o número do bit incorreto.

Ex: se os bits de checagem 1, 2 e 8 estão errados, o bit invertido é o 11, porque é o único checado por esses bits!

Correção de erros em rajada - 1

Correção de erros em rajada - 1  Os códigos de Hamming são capazes somente de
Correção de erros em rajada - 1  Os códigos de Hamming são capazes somente de

Os códigos de Hamming são capazes somente de corrigir erros simples.

Uma pequena modificação pode ser usada para permitir que os

códigos de Hamming sejam capazes de corrigir erros em rajada.

Uma sequência de k palavras-código consecutivas pode ser arranjada em uma matriz, com uma palavra-código por linha.

Normalmente, os dados seriam transmitidos com uma palavra- código por vez, da esquerda para direita.

Para corrigir erros em rajada, os dados devem ser transmitidos uma coluna por vez, começando pela coluna mais à esquerda.

Quando o quadro chega no receptor, a matriz é reconstruída,

uma coluna por vez. Se um erro em rajada de tamanho k ocorre,

no máximo 1 bit das k palavras-código são afetados.

Como o código de Hamming pode corrigir um erro por palavra- código, o bloco inteiro pode ser recuperado!

Método que usa kr bits de checagem para km bits de dados imunes a um único erro em rajada de k ou menos bits.

Correção de erros em rajada - 2

Correção de erros em rajada - 2 – Exemplo de alguns caracteres de 7-bits ASCII codificados
Correção de erros em rajada - 2 – Exemplo de alguns caracteres de 7-bits ASCII codificados

Exemplo de alguns caracteres de 7-bits ASCII codificados como palavras-código de 11 bits, usando o código de Hamming.

Lembre-se que os dados estão nas posições 3, 5, 6, 7, 9, 10 e 11.

o código de Hamming.  Lembre-se que os dados estão nas posições 3, 5, 6, 7,

Gustavo S. Pavani

22

Códigos de detecção de erros

Códigos de detecção de erros  Considere o canal onde os erros são isolados e que
Códigos de detecção de erros  Considere o canal onde os erros são isolados e que

Considere o canal onde os erros são isolados e que ocorrem com uma taxa de 10 -6 por bit.

Seja o tamanho do bloco de 1.000 bits. Para prover correção de erros para blocos de 1.000 bits, 10 bits de checagem são necessários.

Um megabit de dados requer 10.000 bits de checagem.

Para se detectar o erro de 1 bit em um bloco, seria necessário somente um bit de paridade por bloco.

A cada mil blocos, somente um precisará ser retransmitido.

O que resulta em 2.001 bits de checagem por megabit transmitido.

Entretanto, se somente um bit de paridade é adicionado ao bloco e o

bloco é atingido por uma rajada de erros, então a probabilidade de se

detectar a rajada de erros é de somente 0,5!

Usar um bloco de n bits de largura e k bits de altura, com um bit de paridade calculado para cada coluna e adicionado como última linha da matriz.

A matriz deve ser transmitida uma linha por vez. E o receptor checa todos os bits de paridade. Se um deles está errado, o receptor solicita a retransmissão do bloco.

É capaz de detectar uma rajada de erros de tamanho n. Mas se o bloco é atingido por uma longa rajada, a probabilidade de aceitar o bloco como

correto é 2 -n .

Gustavo S. Pavani

23

Checagem de redundância cíclica (CRC)

Checagem de redundância cíclica (CRC)  Também conhecido como código polinomial. – Pois tratam as strings
Checagem de redundância cíclica (CRC)  Também conhecido como código polinomial. – Pois tratam as strings

Também conhecido como código polinomial.

Pois tratam as strings de bits como a representação de polinomiais com coeficientes 0 e 1.

Um quadro de k bits é representado como uma lista de coeficientes de um polinômio de k termos, que vão de x k-1 a x 0

O bit mais a esquerda é o coeficiente de x k-1 , o próximo é o coeficiente de x k-2 e assim sucessivamente.

Ex: 110001 tem seis bits, representado o polinômio x 5 + x 4 + x 0 .

A aritmética polinomial é feita módulo 2.

Adição e subtração é idêntico ao operador XOR. Divisão é feita da mesma maneira que a operação binária, exceto que a subtração é feita módulo 2.

Quando o código polinomial é usado, o receptor e o emissor tem que fazer um acordo sobre o gerador polinomial, G(x), com

antecedência.

Os bits mais e menos significativos do gerador tem que ser 1.

Cálculo do checksum

Cálculo do checksum  Para se calcular o checksum de um quadro de m bits, que
Cálculo do checksum  Para se calcular o checksum de um quadro de m bits, que

Para se calcular o checksum de um quadro de m bits, que corresponde ao polinomial M(x), o quadro tem que

ser maior que o gerador polinomial.

Deve se adicionar o checksum no final do quadro de forma que o polinomial representado pelo quadro com o checksum seja divisível por G(x).

Quando o receptor recebe o quadro, ele o divide por G(x). Se há

resto, então houve um erro de transmissão.

Algoritmo:

Seja r o grau de G(x). Adicione r bits zero ao final do quadro, de forma que ele contém m + r bits e corresponde ao polinomial x r M(x).

Divida a string de bits correspondente a G(x) pela string de bits correspondente a x r M(x), usando divisão módulo 2.

Subtraia o resto da string de bits correspondente a x r M(x) usando subtração módulo 2. O resultado é o quadro com checksum, T(x), que deve ser transmitido.

Exemplo de checksum

Exemplo de checksum Gustavo S. Pavani 26
Exemplo de checksum Gustavo S. Pavani 26

Eficiência do CRC - 1

Eficiência do CRC - 1  Que tipos de erro podem ser detectados? – Supondo que
Eficiência do CRC - 1  Que tipos de erro podem ser detectados? – Supondo que

Que tipos de erro podem ser detectados?

Supondo que um erro de transmissão ocorre, ao invés de chegar

T(x), chega T(x) + E(x).

Cada 1 bit em E(x) corresponde a um bit que foi invertido.

Se há k bits 1 em E(x), k erros simples ocorreram.

Um erro simples em rajada é caracterizado por um 1 inicial, uma

mistura de 0s e 1s e um final 1, com os outros bits iguais a 0.

O quadro com checksum é recebido pelo receptor, que o divide por G(x), isto é, computa [T(x) + E(x)]/G(x).

Os erros que correspondem aos polinômios que contém G(x)

como fator podem escapar e os demais erros serão pegos.

Se há um erro simples de bit, E(x) = x i , onde i determina qual bit está errado. Se G(x) contém dois ou mais termos, ele nunca dividirá E(X), de forma que todos os erros simples serão detectados.

Eficiência do CRC - 2

Eficiência do CRC - 2  Se há dois erros de bits isolados, E(x) = x
Eficiência do CRC - 2  Se há dois erros de bits isolados, E(x) = x

Se há dois erros de bits isolados, E(x) = x i + x j , onde i > j, ou em outros termos, E(x) = x j (x i-j + 1).

Se assumimos que G(x) não é divisível por x, uma condição suficiente para que todos os erros duplos sejam detectados é que G(x) não divida x k + 1, para qualquer k até o máximo valor de i j (isto é, até o máximo tamanho do quadro).

Ex: x 15 + x 14 + 1 não divide x k + 1 para qualquer valor de k abaixo de

32.768.

Se há um número ímpar de bits errados, E(x) contém um número ímpar de termos.

Nenhum polinomial com um número ímpar de termos tem x + 1 como fator no sistema módulo 2.

Fazendo x + 1 como fator de G(x), pode-se detectar todos os erros com um número ímpar de bits invertidos.

Eficiência do CRC - 3

Eficiência do CRC - 3  Finalmente, se um código polinomial tem r bits de checagem,
Eficiência do CRC - 3  Finalmente, se um código polinomial tem r bits de checagem,

Finalmente, se um código polinomial tem r bits de checagem, ele é capaz de detectar todos os erros em rajada com comprimento r.

Um erro em rajada de tamanho k pode ser representado por x i (x k-1

+

recebido a rajada está localizada.

+ 1), onde i determina quão longe do lado direito do quadro

Se G(x) contém qualquer termo x 0 , ele não terá x i como fator, de forma que o grau da expressão de erro é menor que o grau de G(x), de forma que o resto nunca poderá ser zero.

Se o tamanho da rajada for r + 1, o resto da divisão por G(x) será 0, somente se a rajada for idêntica a G(x)!

Como, por definição, os primeiros e últimos bits da rajada são 1, as combinações dependem dos r 1 bits intermediários.

Supondo que todas as combinações são igualmente prováveis, temos que a probabilidade um quadro com erros ser aceito é de (0,5) r-1 .

Para erros em rajada maiores que r + 1, essa probabilidade é de (0,5) r .

Eficiência do CRC - 4

Eficiência do CRC - 4  Alguns polinômios viraram padrão. – O polinômio usado pelo IEEE
Eficiência do CRC - 4  Alguns polinômios viraram padrão. – O polinômio usado pelo IEEE

Alguns polinômios viraram padrão.

O polinômio usado pelo IEEE 802 é x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 5 + x 4 + x 2 + x 1 + 1

Capaz de detectar todas as rajadas de erro com tamanho 32 ou inferior;

Capaz de detectar todas as rajadas com um número ímpar de bits.

Embora o cálculo do checksum pareça complicado, um simples

registrador de deslocamento pode ser construído para computar e verificar os checksums em hardware.

A suposição dos erros serem totalmente aleatórios não é muito boa (Partridge, 1995).

Como os algoritmos de código polinomial fazem essa suposição, sob certas circunstâncias, erros podem passar despercebidos

mais comumente do que se acreditava.