Controle de erros
Como 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:
- O primeiro método utiliza a retransmissão dos dados pelo emissor quando forem detectados os erros.
- E o segundo método, utiliza a transmissão de códigos especiais junto aos dados transmitidos.
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 fluxo
Outro 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.