Algoritmo de Recuo Binário Exponencial

Em vários artigos do Vovó Viu a Rede eu já falei de uma atitude comum a muitos dos protocolos: quando há uma colisão, as máquinas que tentaram enviar esperam um tempo aleatório para tentar novamente. A única coisa que ainda não tinha ficado clara é como se define este tempo aleatório.

Até agora.

A este trabalho de definir um tempo de espera aleatório foi dado o feioso nome de recuo binário exponencial. Apesar do nome feio, a explicação é simples. Para entender isso, vamos a mais uma das minhas metáforas.

***


Imagine um destes programas de debates, com um monte de gente querendo falar. Quando dois começassem a falar juntos, ambos parariam e ambos jogariam uma moeda. Quem tirasse cara esperaria um minuto para começar a falar, quem tirasse coroa esperaria dois minutos.

Claro que acontecia muitas vezes o azar de os dois tirarem o mesmo lado da moeda. Quando isso acontecia, eles trocavam as moedas por dados: cada um jogava um dado e cada um esperava o número de minutos que tivesse caído nos dados. Se novamente eles dessem o azar de tirar o mesmo número nos dados, partiriam para jogar dois dados ao mesmo tempo. Se, azar dos azares, eles novamente tirassem números iguais, seria a vez de jogar naquelas roletas de cassino.

Veja que a cada vez que uma colisão acontecia em seqüência, o sorteio era feito de maneira que as chances de haver uma colisão eram cada vez menores. É exatamente isso que faz o recuo binário exponencial.

***


Quando há uma colisão, o protocolo inicialmente sorteia dois intervalos de tempo entre os transmissores que colidiram. Se por acaso houver uma nova colisão, o protocolo sorteia quatro intervalos. Em caso de nova colisão, o número de intervalos sorteados sobe para oito, e daí em diante, sempre em potências de dois, com o limite máximo de 1024 espaços.

Colocando em termos mais claros ainda: o número de intervalos de tempo a serem sorteados entre os transmissores que colidiram é igual a dois elevado ao número de colisões seguidas.

***


Este procedimento é eficiente tanto em momentos de baixo tráfego quanto de alto, pois ele vai se adaptando gradualmente.

Se não houvesse esse aumento gradual, em momentos de pico ninguém transmitiria. Veja só: imagine que uma rede tem 50 máquinas interligadas, todas ávidas por um espaço para transmitir. Haveria uma colisão atrás da outra, sem parar, sempre havendo sorteios entre elas para tentarem pegar o primeiro intervalo de tempo ou o segundo.

Para que uma máquina conseguisse transmitir, seria necessário que só ela recebesse um intervalo e todas as outras recebessem o outro, o que é muito improvável. Com o aumento gradual de intervalos a serem sorteados, as chances de que duas máquinas recebam o mesmo diminuem bastante.

Em uma situação inversa, no caso de poucas máquinas querendo transmitir, o sorteio de poucos intervalos já é suficiente para resolver o problema das colisões. Se sempre fossem sorteados um número muito grande intervalos, haveria um desperdício muito grande de tempo, gerando retardos desnecessários.

Imagine no exemplo do programa de debates, aí de cima: duas pessoas tentam falar ao mesmo tempo e partem direto para a roleta de cassino, e a primeira tem que esperar 20 minutos e a outra 45, e enquanto isso não aparece mais ninguém querendo falar. Não tem cabimento.

***


Este é, então, o algoritmo de recuo binário exponencial. Simples, mas eficiente.

Veja mais sobre alguns protocolos que usam este algoritmo:
Protocolo MACA
Protocolos CSMA que permitem colisão
Protocolo Aloha

4 comentários:

AJS disse...

Mário, adoro suas metáforas :)
Faço curso de Tecnologia de Redes no Senac e te digo que, sem metáforas, é muito mais complexo entender a teoria dos computadores.
Seu blog é realmente interessante... vc ajuda muito.

Agora, mudando um pouco de assunto, tenho uma curiosidade: o que são esses números, em laranja, que aparecem a cada post? É tipo um rating de qualificação? Como vc fez para inserir? (dúvida blogueira... hehe)

Abraços,
Claudia

Mário Marinato disse...

Oi, Angel.

Primeiramente, obrigado pelos elogios ao blog. Esta linguagem cheia de matáforas e o mais simples possível de entender é o meu principal objetivo aqui. É muito bom saber que estou agradando.

Sobre os números laranja, eles vêm do site Rec6, que é um site de notícias no qual as notícias são escolhidas pelos usuários. Funciona mais ou menos assim:

A pessoa vai lá e cadastra o endereço de algum artigo que ache interessante. As pessoas, quando visitam o site do Rec6 e lêem estes artigos, podem votar neles. Os que recebem mais votações podem até alcançar a página inicial do site, o que dá maior visibilidade para eles.

O lance do botão aqui no blog é que o 'dono' do link (não o cara que inseriu no Rec6) pode inserir este botão de votação no seu próprio site, para que as pessoas que caírem direto nele, sem ser via Rec6, tenham oportunidade de votar também.

No meu caso, sou eu mesmo que adiciono meus artigos mais interessantes ao Rec6, e logo em seguida adiciono o botão aqui no blog. Mas nada impede que alguém veja um artigo aqui e adicione lá. Assim como eu já adicionei artigos que não são meus.

Se você quiser, posso escrever um tutorialzinho explicando como colocá-lo no seu blog.

AJS disse...

Mário, você é muito atencioso :)
Adoraria uma ajuda para fazer isso tb no meu blog. Comecei amontar um blog com uma temática similar a sua (explicar informática para leigos) e queria colocar o link do seu blog no meu.. pode ser? A abordagem do meu é um pouco diferente... fala sobre como instalar programas, fazer segurança do pc... não havia pensado entrar em rede. Por isso que seria interessante indicar o seu blog. Sou uma principiante no mundo blogueiro. A cada dia descubro um "gueri-gueri" diferente para incrementar... rs.
Se preferir, pode entrar em contato comigo por email: angel.cfs@gmail.com

Abraços e sucesso com o blog,
Claudia

Mário Marinato disse...

Que isso, Cláudia, atenciosas são vocês, minhas queridas leitoras.

E é claro que te ajudo com o blog e é claro que você pode linkar para o Vovó Viu a Rede. Este é o tipo de coisa que nem precisa pedir.

Pode deixar que eu entro em contato contigo por email.

Abraços.