# Camada de enlace de dados

Na ciência da computação, mais especificamente em redes de computadores, a camada de ligação de dados, também conhecida como camada de enlace de dados ou camada de link de dados, é uma das sete camadas do modelo OSI. Esta camada detecta e, opcionalmente, corrige erros que possam acontecer na camada física. É responsável pela transmissão e recepção (delimitação) de quadros e pelo controle de fluxo. Ela também estabelece um protocolo de comunicação entre sistemas diretamente conectados (operando sob velocidades próximas de c).

## Protocolos

Exemplos de protocolos nesta camada: PPP, LAPB (X.25), ethernet. Também está inserida no modelo TCP/IP (apesar do TCP/IP não ser baseado nas especificações do modelo OSI). Na rede ethernet cada placa de rede possui um endereço físico, que deve ser único na rede. Em redes do padrão IEEE 802, e outras não IEEE 802 como a FDDI, esta camada é dividida em outras duas camadas: Controle de ligação lógica (LLC), que fornece uma interface para camada superior (rede), e controle de acesso ao meio físico (MAC), que acessa diretamente o meio físico e controla a transmissão de dados.

### Padrões da Camada de Enlace

Os protocolos e padrões desta camada, diferente das camadas superiores que são baseados em RFCs, estes geralmente são definidos por empresas de comunicações ou organizações de engenharias (Como ANSI, IEEE e ITU). Os serviços e especificações desta camada são geridos por múltiplos padrões de acordo com a tecnologia e o meio físico utilizado e integrado por tais protocolos, sendo alguns deles utilizados para ligar os serviços da camada de enlace com a camada física.
| Organização | Protocolo |
| ISO | HDLC (High Level Data Link Control) |
| IEEE | 802.2(LLC), 802.3(Ethernet), 802.5(Token Ring), 802.11(Wireless) |
| ITU | Q.922(Frame Relay Standard), Q.921(ISDN Data Link Standard), HDLC (High Level Data Link Control) |
| ANSI | 3T9.5, ADCCP(Advanced Data Comunications Control Protocol) |

## Responsabilidades da Camada de Enlace
### Enquadramento

A camada de enlace de dados fica acima da camada física, ela é responsável por oferecer serviços à camada de rede, recebendo pacotes e encapsulando em quadros para transmissão nos canais. Os quadros são enviados da camada de rede da máquina transmissora até a camada de rede da máquina receptora, então os quadros são remontados em forma de pacotes. Alguns dos principais métodos utilizados para a realização dos enquadramentos são:
* Contagem de caracteres;
* Bytes de flag com inserção de bytes;
* Flags iniciais e finais;
* Violações de codificação da camada física;

### Controle de erros

A camada de enlace também é responsável pelo controle de erros, pois pode acontecer erros durante a transmissão de bits devido as características da camada física, como por exemplo a troca física de um bit, que devem ser detectados e resolvidos usando algum algoritmo. Uma forma de garantir se os quadros chegaram ao receptor de forma correta é recebendo um feedback, para isso é solicitado ao receptor o retorno de quadros contendo confirmações, caso houver uma confirmação negativa, quer dizer que houve um problema no envio do quadro e o quadro deve ser reenviado para o receptor.
Um cenário comum e que agrega mais uma complicação, é quando um quadro desaparece completamente acarretado por problemas de hardware, nesse caso o receptor não terá uma causa para reagir. Para resolver esse problema foi implementado a funcionalidade de timers, com ela, quando um quadro é enviado para um destino, um timer é configurado com um tempo suficientemente grande para que o quadro trafegue até o destino e retorne a origem, mas se o pacote não voltar até que o timer seja desligado, o transmissor será alertado que existe algum problema. Após o aviso, a reação mais obvia que poderíamos pensar é enviar o quadro novamente, embora pareça uma boa solução não é, pois há uma possibilidade do receptor aceitar o quadro mais de uma vez e levá-lo até a camada de rede. Quando é necessário enviar um quadro mais que uma vez por consequência de um erro de tempo, é necessário enviar junto com o quadro um número que corresponde ao seu lugar na sequência de quadros.

### Controle de fluxo

Outra responsabilidade da camada de enlace é o controle de fluxo, pois a máquina transmissora pode enviar quadros mais rápido e o receptor pode não ser capaz de conseguir aceita-los a tempo, podendo perder alguns quadros, mesmo sem haver erros durante a transmissão. Um exemplo bem comum de controle de fluxo é quando um smartphone, que é um aparelho mais fraco, faz uma requisição de um site em um servidor, que é muito mais rápido e forte. Ou seja, a camada de enlace de dados juntamente com o controle de fluxo tem que trabalhar para que este tipo de situação não ocorra. Comumente é utilizado um controle de fluxo baseado em feedback, onde o dispositivo receptor envia novamente ao transmissor informações (feedback) que avisam a o receptor que mais dados podem ser enviados ou que mostrem a situação em que o receptor se encontra naquele momento.

## Topologia de Redes

* Ponto-a-ponto
* Anel - Token Ring
* Estrela
* Barramento
* Árvore

## Subcamada de controle de acesso ao meio

A camada de enlace de dados ainda possui uma subcamada chamada de subcamada de controle de acesso ao meio ou também conhecida como MAC (Medium Acess Controll) utilizada para realizar o controle de acesso aos canais de transmissão em redes de broadcast (redes com canais de múltiplo acesso), esse controle é realizado através da utilização de protocolos de acesso que se encontram nesta subcamada. O controle de acesso é de suma importância principalmente em redes LANs, especialmente em redes wireless (sem fio) por serem uma rede do tipo broadcast.
O controle de acesso pode ser:
* centralizado —; uma máquina é responsável por controlar o acesso ao meio. Exemplo: estrela, antena de celular.
* distribuído —; todas as máquinas fazem o controle de acesso. Ex: Anel, ethernet.

### Protocolos de acesso

Existem dois tipos de Enlace(segunda camada do modelo ISO/OSI): O Enlace ponto a ponto e o Enlace broadcast.
No enlace ponto a ponto, mesmo que exista uma conexão física de vários hospedeiros (hosts), somente haverá comunicação entre um único remetente numa extremidade do enlace com outro remetente na outra extremidade do enlace, uma analogia bem simples que mostra o funcionamento do enlace ponto a ponto é o sistema de telefonia, mesmo que o remetente esteja interconectado a uma central telefônica só vai haver troca de informações quando este discar e a outra pessoa do outro lado da linha atender. Protocolos que utilizam esse tipo de comunicação: PPP e HDLC.
No enlace broadcast vários nós (computador, servidor etc), remetentes e receptores, estão conectados em um único canal de transmissão. Um exemplo deste tipo de comunicação é a televisão tradicional. A TV é um enlace unidirecional. Como uma analogia, imagine você na sala de aula, onde o meio de transmissão é o ar, nós receptores e remetentes são seus colegas. Para que não exista problema na comunicação, algumas regras são seguidas.
Ex:
* "Não fale até que alguém fale com você."
* "Levante a mão se tiver alguma pergunta a fazer."
* "Não interrompa uma pessoa quando esta estiver falando."
As redes de computadores possuem regras como essa, as quais são denominadas protocolos de acesso múltiplo. Dezenas desses protocolos foram implementados na camada de enlace, de fato que podemos dividi-los em três categorias:
* Protocolos de Divisão do Canal;
* Protocolos de Acesso Aleatório; e
* Protocolos de Revezamento.

### Multiplexação (divisão do canal)
#### TDM, FDM e CDMA

Uma forma simples para a comunicação ser efetiva (sem colisões), seria dividir o tempo de comunicação e entregar para cada um dos nós. Imagine uma rede com dez computadores e um tempo de 20 segundos para comunicação, por rodada. Assim, pode-se dividir o número de tempo pelo número de computadores e entregar esse tempo para cada um dos computadores. Então ter-se-ia 20 (segundos)/ 10 (computadores), que é igual a 2 segundos por computador, em cada rodada.
Esse tipo de divisão é feita pelo TDM (multiplexação por divisão de tempo). Essa multiplexação divide o tempo em quadros temporais, dentro desses quadros existem N compartimentos, onde N é igual ao número de computadores. Para uma dada TDM taxa de transmissão em bits são alocados slots (intervalos) no tempo para cada canal de comunicação.
No FDM (multiplexação por divisão de frequência), uma divisão semelhante é feita, porém, em vez de espaços iguais de tempo, tem-se faixas iguais de frequência. Essas são técnicas eficientes, levando em consideração que todos os nós transmitem informações freqüentemente. Porém, se a largura de banda for dividida em N partes e menos de N usuários usarem o canal, haverá desperdício de largura de banda, e se mais de N usuários usarem o canal, alguns terão acesso negado por falta de largura de banda. Se em dado momento apenas um nó transmitir informações, este somente o poderá fazer através de sua "faixa", mesmo que ninguém mais transmita absolutamente nada. Dessa forma o canal broadcast fica ocioso em grandes períodos de tempo.
CDMA (multiplexação por divisão de código), A tecnologia CDMA é um sistema de múltiplo acesso que permite a separação de sinais que coincidam no tempo e na frequência. Todos os sinais compartilham o mesmo espectro de frequência, cada sinal é codificado, através de um código específico para cada usuário, e espalhado por toda largura de banda, como um ruído para todos os usuários. A identificação e demodulação do sinal ocorrem no receptor, quando é aplicada uma réplica do código utilizado para o espalhamento de cada sinal na transmissão. Este processo retorna com o sinal de interesse, enquanto descarta todos os outros sinais como sendo interferência.Utilizados no Bluetooth.

### Protocolos de acesso aleatório
#### Slotted ALOHA

Um dos protocolos mais simples é o slotted ALOHA. Nesse protocolo, o tempo de transmissão é dividido pelo número de quadro formando intervalos, de fato que um intervalo é igual ao tempo de transmissão de um quadro. Cada nó conhece o início do intervalo. Em cada colisão, todos os nós identificam a mesma antes mesmo do término do intervalo. Quando um nó tem algum quadro para enviar, ele espera até o início do próximo intervalo e o envia, se for detectada colisão, ele espera um tempo aleatório e envia novamente. Se esse tempo for muito curto, a chance de ocorrer novamente uma colisão é grande, e se o tempo for grande, o reenvio terá um atraso elevado.
Note-se que quando um nó quer enviar um quadro ele o envia no primeiro intervalo que aparecer e, se não tiver colisão e for preciso o envio de outro quadro, o nó o fará no próximo intervalo, até que termine os quadros ou que haja uma colisão e tenha que esperar um tempo aleatório. A "chave" desse protocolo é que se vários nós estiverem enviando, os intervalos que houver colisões serão desperdiçados e certos intervalos não serão utilizados, porque o tempo aleatório citado acima tem um caráter probabilístico. Portanto este não é um protocolo tão eficiente para uma rede com muitos nós enviando, sempre, informações.

#### ALOHA Puro

O Slotted ALOHA precisa que seus nós sincronizem as transmissões de acordo com os intervalos. Porém o primeiro protocolo ALOHA, chamado de ALOHA Puro era descentralizado. Quando um quadro chega à camada física para ser enviado, ele o é imediatamente. Então, se houver colisão, um tempo aleatório é esperado para enviar novamente.

#### CSMA/CD

Os protocolos descritos anteriormente, durante uma transmissão de dados, no caso de algum outro nó estiver se comunicando, interrompem a comunicação por um tempo aleatório. O CSMA é diferente, ele escuta o canal (detecção de portadora) antes de enviar as informações. Caso algum outro nó o esteja fazendo ele espera um tempo para então voltar a escutar o canal broadcast. Outra característica importante é, se quando o canal estiver ocioso e o nó for transmitir e outro o fizer no mesmo momento, o CSMA realiza a detecção de colisão, fazendo com que pare a transmissão, até que algum protocolo determine quando deve tentar transmitir novamente.

### Protocolos de revezamento
#### Polling

O protocolo de polling requer que um dos nós seja nomeado o nó mestre. Esse nó escolhe de forma circular os nós que precisam transmitir. Quando o nó 1 for transmitir, o nó mestre o concede um determinado número de quadros para transmitir, acabando essa transmissão, o nó 2 inicia e assim sucessivamente. Os intervalos vazios característicos dos protocolos de acesso aleatório já não existem mais, porém não é seguro colocar as transmissões da rede nas mãos de um nó. Porque se este falhar, toda a rede para. Outro problema é o tempo de escolha do nó que deverá transmitir. Esse tempo é bastante significativo.

#### Token

No protocolo de passagem de permissão, por token, essas passagens de permissão são distribuídos por todos os nós. Por exemplo, o nó 1 poderá enviar permissão ao nó 2, o nó 2 poderá enviar permissão ao nó 3, o nó N poderá enviar permissão ao nó 1. Quando um nó recebe a permissão, ele a segura se precisar enviar alguma informação, se não, ele passa para o próximo nó.