Introdução
A função da segunda camada no modelo de referência OSI – camada de enlace de dados – é converter o fluxo de dados sem formatação, fornecido pela primeira camada (camada física) em um fluxo de quadros a ser utilizado pela camada de rede.Vários métodos de enquadramento são utilizados, como a contagem de bits, ou caracteres, e a inserção de caracteres e flags através da inserção de bits.
Os protocolos que atuam na camada de enlace de dados podem oferecer recursos de controle para retransmissão de quadros (frames) com falhas ou perdidos. Outra função importante da camada de enlace de dados, é o controle de fluxo, na qual ela impede que um transmissor (servidor) rápido “afogue” um receptor lento. Um dos protocolos mais importantes dessa camada é o “sliding windows” – janela deslizante que consegue integrar de forma eficiente, tanto o controle de erros, como o controle de fluxo. As antigas redes locais de difusão, exerciam outra questão fundamental na camada de enlace de dados, que era a de controlar o acesso ao canal compartilhado quando utilizavam ainda o padrão 802.3 – 10BaseX nas chamadas topologias em barramento. Este problema era resolvido através da subcamada especial da camada de enlace de dados, a subcamada MAC – Controle de Acesso ao Meio. * É importante lembrarmos que, apesar deste artigo referir-se exclusivamente à camada de enlace de dados, as funções de controle de erros e controle de fluxo, fazem parte também da camada de transporte. |
|
Serviços oferecidos à camada de rede
Transmissão de dados no modelo OSIA figura 1 mostra como os dados podem ser transmitidos no modelo OSI. Esse modelo foi baseado em uma proposta desenvolvida pela ISO (Organização de Padrões Internacionais) como primeiro passo na direção para uma padronização internacional dos protocolos utilizados nas diferentes camadas. A ideia geral é a de que, embora a transmissão de dados seja na vertical (comunicação real), os protocolos das camadas adjacentes são projetados “simulando” uma comunicação virtual (horizontal). Quando a camada de transporte emissora recebe uma informação da camada de sessão, ela anexa um cabeçalho de transporte e transmite à camada de transporte da camada adjacente receptora. “Trata-se apenas de um detalhe técnico o fato de que (a camada de transporte) na verdade deve transferir a mensagem para a camada de rede de sua própria máquina.” [Tanenbaum, 1997] A finalidade principal da camada de enlace de dados, é fornecer serviços à camada de rede. O mais importante é a transferência de dados da camada de rede do host de origem para a camada de rede do host de destino. Para entendermos os serviços oferecidos pela camada de enlace devemos considerar a comunicação virtual ao invés da comunicação real entre as duas camadas de rede dos equipamentos interligados. A camada de enlace de dados pode ser desenvolvida para oferecer diversos serviços. Os serviços mais frequentes oferecidos pela camada de enlace, são:
Serviço sem conexão e sem confirmaçãoA camada de enlace de dados oferece a menor confiabilidade possível, no entanto, é o serviço em que oferece maior performance. Para a escolha deste tipo de serviço, é vital uma boa qualidade de transmissão de dados por parte da camada física. Caso a taxa de erros for baixa, e permitir que a correção de eventuais erros seja feita pelas camadas superiores, pode ser uma boa escolha para este tipo de serviço na camada de enlace. Nas aplicações que exigem alta performance, como transmissão de voz e teleconferência, em que muitas vezes a performance (rapidez) possui mais prioridade do que a qualidade, pode ser uma escolha interessante. Serviço sem conexão com confirmaçãoA confirmação neste tipo de serviço oferecido pela camada de enlace de dados, garante que os quadros recebidos pelo destinatário são “integros”, ou seja, não houve qualquer perda ou dano por parte da informação presente no quadro. Esta confirmação é feita através de pequenas informações ou sinais ACK (ACKnowledge). Caso o servidor (emissor) não receba esta confirmação ACK por parte de algum quadro, o emissor pode resolver reencaminhar o quadro correspondente, garantindo, portanto, a recepção íntegra e completa de todos os quadros transmitidos. Uma falha deste tipo de serviço oferecido pela camada de enlace de dados, em relação a um serviço com conexão, seria quanto à numeração dos quadros. Imagine uma situação em que ocorra um erro ou perda por parte da confirmação (ACKnowledge) e o emissor resolva retransmitir o quadro novamente, como os quadros não são numerados, o receptor ficaria impossibilitado de identificá-lo e descartá-lo. Este tipo de serviço é muito utilizado em aplicações que exigem alto desempenho, mas a taxa de ruído no meio físico de transmissão é muito alta. Serviço orientado a conexãoEste tipo de serviço oferecido pela camada de enlace é dividido em três etapas. Neste serviço, as máquinas de origem e destino, estabelecem uma conexão antes dos dados serem transmitidos: na primeira etapa é estabelecido uma troca inicial de informações entre as duas camadas de enlace através de variáveis e contadores para controlar quais quadros foram recebidos e quais não foram recebidos. Após esta troca de informações, os quadros são transmitidos. E, novamente, uma outra troca de informações a liberação de variáveis e buffers para o encerramento da conexão. A partir da abertura de uma conexão, a camada de enlace do emissor passa a enumerar todos os quadros encaminhados, fazendo com que eles sejam recebidos uma única vez e na ordem correta, impedindo assim, a retransmissão de múltiplos quadros no caso de uma confirmação perdida. Outra vantagem do serviço orientado à conexão, é o controle de fluxo de informações entre emissor, receptor e os roteadores intermediários que participam da comunicação. |
|
Enquadramento
Como vimos na introdução, umas das principais finalidades da camada de enlace de dados é oferecer serviços à camada de rede. A principal função da camada física, é receber e transmitir um fluxo de bits brutos e tentar levá-los ao seu destino, mas a camada física não consegue “garantir” que esse fluxo de bits esteja livre de erros.Neste caso surge outra função primordial da camada de enlace que é detectar os erros, caso existam e corrigi-los. Uma das práticas mais utilizadas pela camada de enlace de dados é dividir o fluxo de bits em quadros e verificar a sua integridade através de algoritmos matemáticos chamados checksums.
Um dos métodos utilizados para fazer esse enquadramento, é a utilização de intervalos entre os quadros, mas a probabilidade de que esses intervalos sejam alterados é muito grande, pois a maioria das redes de comunicação de dados não oferecem qualquer garantia quanto a este recurso. Por isso, outros métodos foram criados. Nesta parte do artigo veremos os principais métodos de enquadramento, como:
Contagem de bits ou caracteresEste é o mecanismo mais simples utilizado para gerar o quadro, o protocolo de enlace do receptor conta o número de bits recebidos a partir do início do quadro, fechando o quadro quando o número total de bits for alcançado. Embora seja um método simples, ele pode falhar em caso de problemas de sincronismo, pois qualquer falha de contagem, impedirá não só a recepção do quadro como a dos quadros posteriores. Mesmo assim, este método é ainda utilizado como no caso do Ethernet – protocolo da camada física – que utiliza esse mecanismo de contagem para identificar o limite final de cada quadro. Inserção de caracteres iniciais e finaisEste método de enquadramento resolve, de alguma forma, o problema de sincronização após um erro, pois cada quadro começa com a sequência dos caracteres ASCII DLE STX e termina com a sequência dos caracteres DLE ETX. O significado das siglas são:
A função do caractere STX – (Start of TeXt) é delimitar o inicio dos quadros, já o caractere ETX – (End of TeXt ) é delimitar o final de cada quadro. Assim, caso o destinatário perca as fronteiras entre os quadros, ele terá que localizar a sequência dos caracteres DLE STX ou DLE ETX, para saber se os quadros estão no início ou se estão no fim. Uma técnica muito utilizada neste tipo de enquadramento é a character stuffing, na qual a camada de enlace de dados do emissor, adiciona um caractere ASCII DLE antes de cada caractere DLE, presente acidentalmente nos dados a serem transmitidos. A camada de enlace do receptor remove a sequência DLE antes dos dados serem passados para a camada de rede, assim é possível distinguir um enquadramento DLE STX ou DLE ETX de uma sequência de caracteres contidas nos dados do emissor, como: dados binários e números com ponto flutuante com base na presença ou ausência de uma sequência ASCII DLE. As sequências DLE dos dados serão sempre duplicadas. Fluxo de dados antes do processo de inserção (stuffing), depois do processo de inserção e depois do processo de remoção (destuffing). AssinaturaCom a evolução das redes de comunicação de dados, a dificuldade de manter um mecanismo de enquadramento utilizando caracteres do tipo ASCII, se tornaram cada vez maiores, surgindo novas técnicas de enquadramento de dados. Uma delas, é a assinatura através do mecanismo de flags iniciais e finais, utilizando a técnica de inserção de bits (bits stuffing). Este método funciona através da utilização de sequências especiais (assinatura) de bits no início e final de cada quadro. Através da identificação destas sequências pelo receptor, os quadros são delimitados. No caso da presença dos bits de assinatura dentro dos campos normais do quadro, o protocolo do transmissor insere um bit 0 (zero), impedindo a confusão com a sequência de bits da assinatura. No receptor, neste exemplo, será retirado o bit 0 a cada cinco bits 1, restaurando assim, a mensagem original. A assinatura (01111110) é inserida no final da montagem do quadro pelo transmissor, e retirada pelo receptor antes do processo de análise da integridade do quadro. O método por assinatura é bastante comum, sendo utilizado por diversos protocolos, como: Frame Relay, HDCL e o Ethernet, que utiliza esse mecanismo para marcar o início dos quadros. É importante notarmos que, tanto a inserção de bits como a inserção de caracteres, é um processo transparente para a camada de rede de ambos os computadores, exatamente como foi comentado sobre o método de comunicação virtual utilizado pelo modelo de referência OSI, na qual o programador dos protocolos das camadas adjacentes não se preocupa com as camadas inferiores “imaginando” uma comunicação direta fim-a-fim. |
|
Controle de erros e fluxo
Controle de errosComo vimos, a camada física transmite diretamente os conjuntos de bits ao receptor, sem se preocupar com possíveis erros, ou ausência de bits, nos conjuntos originalmente entregues à camada física do transmissor. Realmente, a camada física não possui nenhum mecanismo que possa corrigir eventuais meios de comunicação. Para resolver este problema em um sistema de transmissão de dados, é necessário utilizar um mecanismo de análise dos dados recebidos. Esse mecanismo de análise é possível se utilizarmos parte dos dados recebidos para verificar e conferir o conjunto completo dos dados. O fato de estar mais próximo da camada física, a função de corrigir possíveis erros de transmissão e permitir certa redundância nos dados recebidos, está atribuído à camada de enlace de dados. Outro papel importante desempenhado por esta camada, é a detecção e correção de erros, muito utilizado nos serviços com confirmação. Para fazer o controle de erros, a camada de enlace utiliza dois métodos: a retransmissão ou a correção dos erros:
Esses códigos conseguem corrigir os dados eventualmente defeituosos sem a necessidade de retransmissão por parte do transmissor dos dados. Ambos os métodos encontram problemas muito complexos, como a perda de conjuntos completos de dados, pois neste caso não há como detectar a existência de erros, porque parte dos dados desaparecem por completo no trajeto entre transmissor e receptor. Cronometrar o tempo máximo para a confirmação de recebimento dos quadros pelo receptor, é uma forma de solucionar casos como estes, pois o receptor não enviará nenhuma confirmação devido a ausência dos quadros perdidos durante a conexão. Um outro problema muito comum, é quanto à ordenação na chegada dos quadros, caso ocorra uma falha de confirmação, o receptor poderá encontrar dificuldades para descartar os quadros repetidos que serão entregues à camada de rede. Enfim, para solucionar todos estes problemas quanto aos erros de comunicação, a camada de enlace de dados implementa alguns algoritmos matemáticos, como: paridade, checksum e o código polinomial ou CRC (Código de Redundância Cíclica). Mas devido à extensão de cada um destes assuntos, eles só poderão ser comentados em um próximo artigo. Controle de fluxoOutro papel importante exercido pela camada de enlace de dados é o controle de fluxo, que nada mais é do que a capacidade do receptor de controlar o fluxo de informações recebidas do transmissor, fazendo o tratamento das informações recebidas sem erro. Em um ambiente heterogêneo como a Internet, é muito comum um servidor mais rápido e com uma largura de banda maior do que o receptor, “sufocar” um cliente que, além de possuir uma máquina mais lenta, pode estar sobrecarregada com outros processos simultâneos. Já em um ambiente homogêneo como as redes locais (Ethernet), poderíamos argumentar: – Haveria a necessidade deste controle por parte da camada de enlace de dados? A resposta é sim. Por causa da existência de colisões de pacotes de dados, devido à existência de múltiplos transmissores com dados a serem encaminhados. Geralmente, o controle de fluxo é estabelecido no momento do estabelecimento da conexão. O controle de fluxo consegue determinar a quantidade de dados que pode ser transmitida, a necessidade do recebimento da confirmação de um quadro antes da transmissão do outro, e o que fazer, caso a confirmação do quadro não chegue ou ocorrer erros durante a transmissão dos quadros. Estes e outros detalhes são abordados quando estudamos alguns dos protocolos de enlace, como os protocolos Simplex (stop-and-wait e canais com ruído), os protocolos utilizados em confirmações no sentido contrário (Piggybacking e Pipeline), além de outros como Sliding Window e Go-Back-N. Mas devido à extensão e profundidade do assunto, poderemos comentá-los num próximo artigo. |
|
Conclusão
Acho que este artigo mostrou, de forma muito simples e clara, a importância da camada de enlace de dados, não apenas para o controle de erros e de fluxo através dos diferentes protocolos de enlace, mas também no suporte, tanto para recepção como para transmissão de informações, para a camada imediatamente acima a camada de rede.No modelo de referência OSI (Open Systems Interconnection) vimos que, apesar dos protocolos serem programados visando uma comunicação virtual (fim-a-fim), outra função importante da camada de enlace, é a de oferecer a integridade das informações vindas tanto da camada de rede adjacente, como também oferecer a integridade das informações para as camadas adjacentes superiores, como: transporte, sessão, apresentação e aplicação.
|