A camada de enlace de dados executa diversas funções específicas. Dentre elas estão as seguintes: Fornecer uma interface de serviço bem definida à camada de rede. Lidar com erros de transmissão. Regular o fluxo de dados, de tal forma que receptores lentos não sejam atropelados por transmissores rápidos.
A camada de enlace de dados recebe os pacotes da camada de rede e os encapsula em quadros para transmissão. Cada quadro contém um cabeçalho (header) de quadro, um campo de carga útil, que conterá o pacote, e um final (trailer) de quadro
Serviços oferecidos a camada de rede
A função da camada de enlace de dados é fornecer serviços à camada de rede. O principal serviço é transferir dados da camada de rede da máquina de origem para a camada de rede da máquina de destino.
Na camada de rede da máquina de origem, há uma entidade chamada processo que entrega alguns bits à camada de enlace de dados para transmissão ao destino. A tarefa da camada de enlace de dados é transmitir os bits à máquina de destino, de forma que eles possam ser entregues à camada de rede dessa máquina
A transmissão propriamente dita segue o trajeto descrito na (b) É mais fácil pensar em termos de dois processos da camada de enlace de dados que se comunicam por intermédio de um protocolo de enlace de dados (a)
Os três principais tipos de serviços oferecidos pela camada de enlace: Serviço sem conexão e sem confirmação. Serviço sem conexão com confirmação. Serviço orientado a conexões com confirmação.
O serviço sem conexão e sem confirmação consiste em fazer a máquina de origem enviar quadros independentes à máquina de destino Sem que a máquina de destino confirme o recebimento desses quadros. Nenhuma conexão lógica é estabelecida antes ou depois da comunicação
Se um quadro for perdido devido a ruídos na linha, não haverá nenhuma tentativa de detectar a perda ou de recuperá-lo na camada de enlace de dados. Essa classe de serviço é apropriada quando a taxa de erros é muito baixa, e a recuperação fica a cargo de camadas mais altas. Boa parte das LANs utilizam este tipo de serviço.
O serviço sem conexão com confirmação não existe nenhuma conexão lógica Cada quadro enviado é confirmado individualmente. Serviço útil para canais não confiáveis como redes sem fio.
O serviço orientado a conexão é o serviço mais sofisticado oferecido pela camada de enlace de dados. As máquinas de origem e destino estabelecem uma conexão antes de os dados serem transferidos Cada quadro enviado pela conexão é numerado, e a camada de enlace de dados garante que cada quadro será de fato recebido.
A camada garante que todos os quadros serão recebidos uma única vez e na ordem correta. As transferências passam por três fases distintas: 1. A conexão é estabelecida, as variáveis e contadores para controlar os quadros são inicializados. 2. Um ou mais quadros são transmitidos 3. A conexão é encerrada os recursos (contadores, variáveis, buffers,...) são liberados
Enquadramento
A camada de enlace de dados recebe um fluxo de bits brutos oriundos da camada física. É responsabilidade da camada de enlace de dados detectar erros (se necessário corrigir) nos bits vindos da camada física. A estratégia é dividir o fluxo de bits em quadros e calcular o checksum do quadro. Quando um quadro chega no destino o checksum é recalculado e validado.
Uma forma de obter esse enquadramento é inserir intervalos de tempo entre os quadros, de modo muito semelhante aos espaços entre as palavras de um texto comum. No entanto, as redes raramente oferecem qualquer garantia em relação à temporização Portanto, é possível que esses intervalos sejam condensados, ou que outros intervalos sejam inseridos durante a transmissão.
Como é muito arriscado contar com a temporização para marcar o início e o fim de cada quadro, outros métodos foram criados: Contagem de caracteres Bytes de flags, com inserção de bytes Flags iniciais e finais, com inserção de bits
Contagem de caracteres Utiliza um campo no cabeçalho para especificar o número de caracteres do quadro.
Contagem de caracteres O problema com esse algoritmo é que a contagem pode ser adulterada por um erro de transmissão
Bytes de flags, com inserção de bytes Cada quadro começa e termina com bytes especiais. A maioria dos protocolos utilizam os mesmos bytes para indicar inicio e fim do quadro (byte de flag)
Bytes de flags, com inserção de bytes Nessa técnica pode ocorrer que os dados a serem transmitidos incluam o byte de flag. Uma forma de solucionar esse problema é fazer com que a camada de enlace de dados do transmissor inclua um caractere de escape especial (ESC) imediatamente antes de cada byte de flag "acidental" nos dados. A camada de enlace de dados da extremidade receptora remove o byte de escape antes de entregar os dados à camada de rede.
Bytes de flags, com inserção de bytes O que acontecerá se um byte de escape ocorrer em uma posição intermediária nos dados?
Bytes de flags, com inserção de bytes Ligeira simplificação do protocolo PPP. Uma das principais desvantagens da utilização desse método de enquadramento é que ele depende da utilização de caracteres de 8 bits. Por exemplo, o UNICODE emprega caracteres de 16 bits.
Flags iniciais e finais, com inserção de bits Permite que os quadros de dados contenham um número arbitrário de bits Possibilita a utilização de códigos de caracteres com um número arbitrário de bits por caractere. De acordo com essa técnica, cada quadro começa e termina com um padrão de bits, 01111110 Sempre que encontra cinco valores 1 consecutivos nos dados, a camada de enlace de dados do transmissor insere um bit 0 no fluxo de bits que está sendo enviado
Flags iniciais e finais, com inserção de bits Ao ver cinco bits 1 consecutivos sendo recebidos, seguidos por um bit 0, o receptor remove automaticamente o bit 0 A inserção de bits, assim como a inserção de bytes, é completamente transparente para a camada de rede de ambos os computadores. Se os dados do usuário contiverem o padrão de flag 01111110, esse flag será transmitido como 011111010, mas será armazenado na memória do receptor como 01111110.
Flags iniciais e finais, com inserção de bits
Controle de erros
como ter certeza de que todos os quadros serão entregues na camada de rede de destino, e na ordem apropriada? A forma mais comum de ser controlar erro é dar uma resposta para transmissor de como o processo está ocorrendo.
Imagine um protocolo que sempre quando enviar um quadro espera uma resposta do receptor para o envio do próximo quadro. O que ocorreria se o quadro de resposta do receptor se perder devido a ruídos ou problemas de hardware?
Essa possibilidade é tratada com a introdução de timers na camada de enlace de dados. Quando o transmissor envia um quadro, o timer é inicializado e se o quadro de resposta não chegar dentro de um tempo pré- estabelecido ocorre time-out e o quadro poderá ser re-transmitido.
Quando os quadros são transmitidos várias vezes, existe o perigo de o receptor aceitar o mesmo quadro duas ou mais vezes e de repassá-lo à camada de rede mais de uma vez. Para impedir que isso aconteça, geralmente é necessário atribuir números de seqüência aos quadros enviados, para que o receptor possa distinguir as retransmissões dos quadros originais.
Controle de Fluxo
Outra questão de projeto importante que ocorre na camada de enlace de é aquela em que um transmissor quer enviar quadros mais rapidamente do que o receptor é capaz de aceitar. Mesmo que a transmissão não contenha erros, em um determinado ponto o receptor não será capaz de tratar os quadros à medida que eles chegam e começará a perder alguns deles.
São usadas comumente duas abordagens: Controle de fluxo baseado em feedback Controle de fluxo baseado em feedback Controle de fluxo baseado na velocidade
Controle de fluxo baseado em feedback O receptor envia de volta ao transmissor informações que permitem ao transmissor enviar mais dados, ou que pelo menos mostram ao transmissor qual a situação real do receptor.
Controle de fluxo baseado na velocidade O protocolo tem um mecanismo interno que limita a velocidade com que os transmissores podem enviar os dados, sem usar o feedback do receptor.
Existem diversos esquemas de controle de fluxo. A maioria deles utiliza o mesmo princípio básico: O protocolo contém regras bem definidas sobre quando um transmissor pode enviar o quadro seguinte.
Mesmo com os mais modernos meios digital de comunicação erros ainda ocorrem com certa freqüência Os erros tendem a ocorrer com maior freqüência em grandes volumes (rajadas) do que isoladamente. Mas, erros em rajada são muito mais difíceis de serem concertados do que erros isolados.
Uma técnica de tratamento de erro é a introdução de informações redundantes em cada bloco de dados enviado, assim, o receptor conseguirá deduzir quais dados deveriam ter sido enviados. Outra forma é incluir uma redundância apenas suficiente para que o receptor deduza que houve um erro, mas, sem identificar qual.
A primeira estratégia utiliza códigos de correção de erros, e a outra emprega códigos de detecção de erros. O uso de códigos de correção de erros freqüentemente é denominado correção antecipada de erros. Em canais altamente confiáveis,como como os de fibra, é mais econômico utilizar um código de detecção de erros e simplesmente retransmitir o bloco defeituoso ocasional.
Em canais como enlaces sem fio que geram muitos erros, é melhor adicionar a cada bloco redundância suficiente para que o receptor seja capaz de descobrir qual era o bloco original, em vez de confiar em uma retransmissão.
um quadro consiste em m bits de dados (ou seja, de mensagens) e de r bits redundantes ou de verificação. O tamanho total n (isto é, n = m + r) unidade de n bits que contém bits de dados e bits de verificação é chamada palavra de código (codeword) denbits bits.
Dadas duas palavras de código, digamos 10001001 e 10110001, é possível determinar quantos bits correspondentes apresentam diferenças. Para determinar quantos bits apresentam diferenças, basta efetuar uma operação OR exclusivo entre as duas palavras de código, e contar o número de bits 1 no resultado
O número de posições de bits em que duas palavras de código diferem entre si é chamado distância de Hamming. Se duas palavras de código estiverem a uma distância de Hamming igual a d uma a outra, será necessário corrigir d erros de bits isolados para converter uma palavra na outra.