3. Camada de enlace de dados

Camada 2 Enlace de dados segundo o modelo OSI

editar

A camada de enlace se responsabiliza por organizar a maneira como as máquinas acessam o meio físico. por exemplo, um cenário de rede sem fio, em que todas as máquinas enviam sinais (que carregam os dados) ao mesmo tempo e na mesma faixa de frequência...

é claro que um sinal vai interferir no outro e os receptores não terão como reconhecer o sinal que lhes interessa.

Isso acontece em redes em que o enlace é compartilhado por diversas máquinas e que operam por broadcast (difusão). Essas situações são solucionadas por meio dos protocolos de múltiplo acesso.

Enquadramento

editar

A primeira funcionalidade da camada de enlace de dados que iremos estudar é a de enquadramento.

Como dissemos, o enquadramento é necessário para que um receptor saiba onde começa e termina cada bloco de dados e, assim, possa realizar o processamento necessário e repassar esses blocos às camadas superiores. Os métodos para realizar enquadramento são basicamente quatro:

» Contagem de caracteres;

» Bytes de flags, com inserção de bytes;

» Flags iniciais e finais, com inserção de bits;

» Violação de codificação da camada física.

A contagem de caracteres consiste em inserir, num campo do quadro da camada de enlace, um valor que indica o número de caracteres do quadro, de modo a indicar ao receptor quantos caracteres ele deve processar antes que um novo quadro se inicie. O principal problema com esta técnica é que, caso ocorra um erro no próprio campo de contagem, o receptor vai achar que há menos (ou mais) caracteres do que deveria, o que compromete o sincronismo na comunicação. Para evitar essa possibilidade, foi proposto um método de enquadramento baseado em bytes de flags, com inserção de bytes. Nela, o início e o fim de um quadro são marcados com um byte especial que, aqui, denotamos por FLAG. Quando um receptor observa a chegada de dois FLAGs sucessivos, ele sabe que, ali, termina um quadro e se inicia outro. Para contonar situações em que o próprio FLAG apareça entre os dados úteis do quadro e, portanto, não deva ser interpretado como um delimitador, utiliza-se um byte de escape, denotado por ESC. Sempre que um FLAG (ou o próprio ESC) aparecer entre os dados úteis, devendo ser ignorado, ele será precedido por um byte ESC e a ambiguidade será corrigida.

O terceiro esquema, com flags iniciais e finais e inserção de bits, remove a necessidade de se ter um protocolo orientado a bytes, como acontece na última técnica descrita. Cada quadro começa e termina com o padrão de bits 01111110 (na verdade, esse padrão corresponde a um byte de flag). Para evitar uma ambiguidade, caso esse padrão apareça no meio dos dados úteis, utiliza-se inserção de bits, que consiste, simplesmente, em inserir um bit 0 (zero) sempre que se observar a ocorrência de cinco bits 1 consecutivos. No momento da recepção, o padrão descrito pode ser interpretado como delimitador do quadro e os bits inseridos são retirados. A última alternativa para enquadramento consiste em violar a codificação da camada física, também conhecida como codificação de linha. Para entendermos melhor essa técnica, observemos a Figura 1.2. Na parte superior, ela apresenta uma sequência de bits e, na parte inferior, o sinal elétrico correspondente a ser injetado no meio de transmissão, conforme o código Manchester. Veja que o bit 1 é representado por um pulso “alto / baixo” e que o bit 0 é representado por um pulso “baixo / alto”. Caso enviássemos um pulso “alto / alto” (ou “baixo / baixo”), que não corresponderia nem ao bit 1 e nem ao bit 0 (eis a violação da codificação da camada física!), poderíamos interpretá-lo como um delimitador de quadro. Por fim, é importante dizermos que técnicas de enquadramento mais frágeis, como a de contagem de caracteres, normalmente, são usadas de forma combinada com técnicas para detecção e correção de erros. Isso torna a transmissão mais robusta e evita que os dados sejam interpretados erroneamente


Técnicas de detecção e correção de erros

editar

Quando desejamos realizar uma transmissão de dados, nunca temos a garantia plena de que, no lado do receptor, será recebida exatamente a mesma sequência de bits enviada. Isso acontece porque o meio de transmissão, seja ele qual for, está repleto de fontes de distorção que podem modificar os sinais que ali trafegam e ocasionar erros na forma como esses sinais são interpretados. É essa a situação que a camada de enlace precisa enfrentar. O que ela faz é incluir, no momento da montagem de um quadro, bits de redundância gerados conforme determinado código, para que os bits de dados estejam protegidos enquanto passam pelo canal físico. Do outro lado, a camada de enlace receptora utiliza esses bits de redundância para verificar se há algum erro nos bits de dados e, em alguns casos, corrigir os erros encontrados. Assim, serão aumentadas as chances de o quadro ser entregue sem erro às camadas superiores. Um estudo amplo sobre o tema detecção e correção de erros requer uma série de conceitos que estão fora do escopo deste material. Assim, apresentaremos de forma resumida três das principais técnicas empregadas nos protocolos da camada de enlace de dados:

(i) verificações de paridade,

(ii) métodos de soma de verificação e

(iii) verificação de redundância cíclica.

A forma mais simples de detectar a presença de erros numa sequência de bits é utilizar um único bit de paridade. Na chamada paridade par, quando se tem uma sequência de b bits, o que se faz é transmitir a própria sequência acrescentando um bit que force o número total de bits 1 ser par. Se desejássemos enviar, por exemplo, a sequência “011001011”, o bit de paridade seria igual a “1”; assim, a sequência a ser de fato transmitida seria “0110010111” (o bit de paridade incluído está sublinhado). No receptor, o número de bits 1 seria contado e, caso esse número fosse ímpar, haveria a indicação de que pelo menos um erro aconteceu. Também se pode usar paridade ímpar, em que o bit adicional deve fazer com que o número total de bits 1 seja ímpar. A inclusão de um bit de paridade único é, no entanto, um esquema bastante frágil. Se ocorrerem erros num número par de bits, por exemplo, com o esquema descrito, o receptor pensará que “está tudo certo”. Uma forma de incrementar a robustez deste método é aplicá-lo de forma bidimensional, conforme apresentado na Figura 1.3 Os bits são organizados linha a linha, formando uma matriz; são calculados os bits de paridade para cada linha e para cada coluna dessa matriz. Esse esquema, além de possibilitar a detecção de erros de dois bits, permite também a correção de erros de 1 bit, o que pode ser compreendido a partir da figura mencionada. Outra maneira de detectar erros na camada de enlace é utilizando a soma de verificação (checksum). Essa técnica consiste em interpretar os bits de um quadro como se fossem uma sequência de números inteiros. Esses números são, então, somados e o complemento a 1 do resultado obtido é colocado num campo específico do quadro (na Internet, por exemplo, emprega-se uma soma de verificação de 16 bits). Quando o quadro chega ao receptor, a soma é refeita e o resultado é confrontado com o que se encontra no campo soma de verificação. Se os valores não coincidirem, uma indicação de erro é reportada. O terceiro e mais completo esquema para detecção de erros que estudaremos aqui é baseado na verificação de redundância cíclica (CRC, cyclic redundancy check). O procedimento básico consiste em anexar a uma parcela de dados D, com d bits, r bits adicionais, R, de modo que a nova sequência, agora com d + r bits, seja divisível por uma outra sequência binária G (gerador), previamente definida. Para ficar mais fácil de entender, imagine que desejamos transmitir o número D = 15. Antes de fazê-lo, incluiríamos uma redundância R, de modo que D + R fosse divisível por G = 6, por exemplo. Então, teríamos R = 3, pois (15 + 3) / 6 = 18 / 6 = 3 (o resto é zero). No receptor, essa conta seria refeita e, caso o resto da divisão não fosse zero, haveria uma indicação de erro. Na prática, o processo descrito é implementado usando aritmética módulo 2 e todas as sequências envolvidas são interpretadas como polinômios cujos coeficientes são os bits dessas sequências (há formas práticas de efetuar esses cálculos). Padrões internacionais foram definidos para geradores G de 8, 12, 16 e 32 bits. Cada um dos padrões de CRC pode detectar erros de bits consecutivos (erros em rajada) de r bits ou menos. Mostra-se que, sob determinadas condições, uma rajada de comprimento maior que r + 1 bits é detectada com probabilidade de 1 – 0,5r . Cada um dos padrões de CRC também pode detectar qualquer número ímpar de erros de bits.

Os detalhes de implementação dos códigos de verificação de redundância cíclica fogem ao escopo deste material. No entanto, se você deseja aprender mais sobre este assunto, há bastante material disponível nos livros e na Internet. Selecionamos dois links interessantes para você. Em https://ric.cps.sp.gov.br/handle/123456789/10439,

http://www.univasf.edu.br/~leonardo.campos/Arquivos/Disciplinas/Redes_I_2008_2/Redes_I_Aula_04.pdf apresenta, também, mas sobre a camada de enlace. Acesse já!