# Introdução à comunicação entre computadores e tecnologias de rede/A sub-camada de controle de acesso à meios (MAC)

A Subcamada de Acesso à Meios (também conhecida pela sigla em inglês MAC) é uma parte da Camada de Enlace de Dados responsável por estabelecer uma lógica quanto ao uso do meio de transmissão em topologias de difusão.
Como vimos na primeira parte deste wikilivro, quando temos em uma rede topologia de difusão, isso significa que vários nós usam exatamente o mesmo meio para poderem enviar mensagens. Em uma topologia assim, se mais de um nó tentar enviar dados ao mesmo tempo, ocorre o que se chama de colisão. Toda vez que uma colisão ocorre, todos os dados enviados são perdidos e precisarão ser retransmitidos.
O objetivo do MAC é justamente tentar evitar ao máximo as colisões, pois elas fazem com que a rede torne-se mais lenta. Para conseguir isso, existem vários protocolos que foram desenvolvidos ao longo do tempo:

## O Protocolo ALOHA

O Protocolo ALOHA é o mais antigo protocolo de controle de acesso à meio. Ele foi criado na década de 70 como uma experiência na qual computadores espalhados em vários campi de diferentes ilhas da Universidade do Havaí começaram a se comunicar trocando dados por meio de sinais de rádio. A rede criada passou a ser chamada de ALOHAnet e foi a primeira rede de computadores sem fio da história.
O protocolo ALOHA funciona da seguinte forma:
* Se você tem dados para mandar, envie-os.
* Se ocorrer colisão, tente enviar novamente mais tarde.
Uma característica original deste protocolo é que ele dividia os dados em pacotes menores e mandava eles entre um certo intervalo de tempo. Isso impedia que um único nó ficasse usando a rede sem parar impedindo que os outros também enviassem dados.
Para detectar se houve ou não colisão, o nó verificava se ele conseguia ouvir a mensagem que ele mesmo havia enviado por meio de um hub central. Se ele ouvisse, ele enviava o próximo pacote. Caso contrário, era sinal de colisão e ele esperava um período de tempo aleatório para enviar de novo.
Este protocolo tinha uma taxa de sucesso de envio de 18,4%. Isso significava que 81,6% da largura de banda disponível era desperdiçada por excesso de colisão.

## O Protocolo ALOHA Discreto

Em virtude do desempenho ruim do Protocolo ALOHA puro, foram feitas tentativas de melhorá-lo. Uma destas tentativas foi definir melhor o conceito de "mais tarde" mostrado no algoritmo acima. O Protocolo ALOHA Discreto estabeleceu que só seria permitido enviar mensagens no começo de intervalos de tempo discretos.
Com esta pequena alteração, a taxa de sucesso de envio de dados subiu para 36,8%.

## O Protocolo CSMA

Ao contrário do ALOHA, que serve para redes sem fio, o CSMA funciona apenas em redes com fio. Ele funciona da seguinte forma: primeiro é feita uma verificação para saber se o barramento está ocupado. Se ele estiver livre, a mensagem é enviada. Já se ele estiver ocupado, podem ocorrer duas coisas, dependendo da implementação do protocolo. Se a implementação for 1-Persistente CSMA, o nó continuamente monitora o barramento até que ele fique livre. Assim que ele for liberado, ele inicia a transmissão. Já se o CSMA for um Não-Persistente CSMA, se o canal está ocupado, ele não fica monitorando-o continuamente. Ele espera um intervalo de tempo aleatório e tenta novamente.
O intervalo de tempo do CSMA Não-Persistente é sempre um número aleatório entre 0 e $2^{n-1}$ sendo "n" o número de tentativas que foram feitas até então. Entretanto, o tempo esperado nunca será maior do que 1024 unidades de tempo e na décima sexta tentativa, o nó desiste de enviar a mensagem.
Ambos os protocolos - o 1-Persistente CSMA e o Não-Persistente CSMA previnem quase todas as colisões, exceto as que ocorrem quando dois nós enviam dados quase simultaneamente. Por exemplo, se o nó A e B quiserem enviar dados ao mesmo tempo, ambos irão verificar se o barramento está livre e irão descobrir que sim. Então, ambos começam a transmitir e assim ocorre a colisão.
Dentre estes dois tipos de protocolo, o Não-Persistente CSMA é considerado melhor. O motivo é que fazendo com que os nós esperem um tempo aleatório diminui a probabilidade de colisão devido à nós tentarem enviar dados ao mesmo tempo. Para entender o porquê, imagine que um nó A está transmitindo e ao longo desta transmissão, B e C também passam a querer transmitir. Como eles não conseguem, eles passam a monitorar o canal até que A pare de transmitir. Quando A parar de transmitir, tanto B como C perceberão que o barramento está livre e mandarão suas mensagens simultaneamente. Com isso, temos uma colisão. Este problema é bastante minimizado quando o tempo de espera até uma segunda tentativa é definido aleatoriamente. No CSMA Não-Persistente, obtém-se cerca de 70% de sucesso na entrega de dados.

## O Protocolo CSMA com Detecção de Colisão (CSMA/CD)

Um dos grandes problemas do CSMA é que ele não é capaz de perceber quando ocorre uma colisão. Para sanar esta limitação, surgiu o CSMA/CD. A diferença entre o CSMA e o CSMA/CD está no que acontece quando ocorre colisão. Assim que um nó detecta colisão, ele imediatamente para de transmitir mensagens e envia um sinal de alerta que consiste em uma mensagem de 64 bytes composta apenas de "1"s. Assim que todos os nós ao longo de barramento receberem o sinal de alerta que impede que eles também tentem enviar dados, o sinal de alerta é interrompido e então os nós que desejam enviar algo esperam uma quantidade de tempo aleatória para começarem a enviar dados.
A grande vantagem do CSMA/CD é que ele busca avisar todos os nós da rede que houve colisão. Então os outros nós não tentarão enviar mensagens pela rede desnecessariamente quando eles sabem que está havendo uma colisão. Graças à isso, o CSMA/CD possui uma taxa de sucesso de entrega de cerca de 92%.
O CSMA/CD Não-Persistente é o protocolo mais usado em redes de computador com fio.

## O Protocolo CSMA com Prevenção de Colisão (CSMA/CA)

Este protocolo é para redes sem fio. Ele funciona assim: o nó que deseja se comunicar com outro, pede autorização para ele enviando um sinal RTS (Request To Send). Se um nó receber um RTS e estiver livre para se comunicar, ele envia um sinal chamado CTS (Clear To Send). Somente depois de receber um CTS, um nó pode começar a transmitir dados para outro. Toda vez que um nó que não está envolvido na troca de dados percebe um RTS ou CTS na rede, ele fica sem enviar dados por algum tempo.
Desta forma, a taxa de sucesso de envio chega a 100%. Todas as colisões são evitadas, já que os nós só podem enviar dados quando recebem a confirmação do receptor de que eles podem transmitir sem problemas. As colisões com este protocolo só são possíveis em situações especiais em que cada nó possui um alcance de transmissão diferente ou caso existam nós móveis capazes de se deslocar pela área de transmissão.
O CSMA/CA é o protocolo mais usado hoje em redes sem fio.

## O Protocolo Token Ring

O Protocolo Token Ring, criado pela IBM na década de 60, só podem ser usados em redes que possuem uma topologia em Anel. Ou seja, todos os nós devem estar ligados à dois outros nós. Nestas redes, existe uma mensagem de 3 bytes conhecida como "token" (também pode ser chamada de ficha ou bastão) que circula pela rede. Só tem permissão para enviar dados a máquina que está com o token. Caso uma máquina não deseje se comunicar, basta passar o token para a próxima máquina. Além disso, existe um limite de tempo que cada máquina tem para ficar com o token. Com isso, também não ocorrem colisões.
Apesar de poder chegar à velocidades maiores que a redes que se baseiam no CSMA/CD, atualmente o Token Ring é muito pouco usado. O motivo são os altos custos dos equipamentos necessários para manter uma rede assim. Até mesmo a própria IBM que desenvolveu o padrão já migrou suas redes para o padrão Ethernet, que usa CSMA/CD.