Taxa de envio de pacotes
Quando se fala que a camada de enlace de dados do transmissor aguarda uma confirmação de que o pacote enviado foi realmente recebido, talvez tenha-se a impressão de que ela interrompe o seu trabalho e fica aguardando uma reposta. Eu também pensava assim, até começar a estudar o assunto mais a fundo.
Se a coisa funcionasse deste jeito, com certeza as transferências demorariam muito mais para terminar. Tome os números fictícios abaixo (eles são fictícios porque na verdade as durações reais são bem menores):
Tempo para o transmissor despachar um pacote: 1 segundo
Tempo para o pacote chegar no destino: 1 segundo
Tempo para o receptor ver se o pacote chegou ok: 1 segundo
Tempo para o receptor despachar a confirmação: 1 segundo
Tempo para a confirmação chegar no transmissor: 1 segundo
Tempo para o transmissor processar a confirmação: 1 segundo
Note que o tempo total do processo de transmitir um único pacote é de 6 segundos. Se a camada de enlace de dados do transmissor interrompesse seu trabalho para aguardar a confirmação, seria necessário um minuto para enviar 10 pacotes. Além disso, repare que, se assim acontecesse, enquanto uma etapa estivesse acontecendo, as outras estariam ociosas. Puro desperdício. Veja na tabela abaixo, por exemplo, que dez segundos seriam suficientes apenas para despachar dois pacotes e receber a confirmação de um.
E ainda há um agravante: se por um acaso o primeiro pacote não chegasse, o transmissor ficaria parado até alcançar o tempo limite de espera. Se este tempo fosse de 10 segundos, estes seriam 10 segundos desperdiçados. Uma conta desta em larga escala é, sem dúvida, um desastre.
O que acontece na verdade é que, assim que o transmissor despacha o primeiro pacote, começa a trabalhar no segundo. Quando o segundo está pronto, ele já o despacha, antes mesmo de receber a resposta do primeiro. Como os tempos de trabalho em cada etapa são os mesmos, enquanto despacha o segundo pacote, o primeiro está sendo transportado para o receptor. Veja na tabela abaixo que, desta forma, os mesmos dez segundos seriam suficientes para despachar todos os pacotes e receber a confirmação de cinco.
A cada pacote despachado, o transmissor inicia um "cronômetro" para controlar o tempo de espera para que uma confirmação chegue. Se a confirmação não chega dentro deste limite, o pacote perdido é reenviado, e após ele, o próximo da seqüência ainda não enviado. Veja a tabela abaixo para ver como funciona isso, imaginando que o tempo de espera seja de sete segundos.
Repare: no primeiro segundo o transmissor despachou o pacote 1, que se perdeu ao ser transportado. Só que o transmissor não sabe que o pacote 1 se perdeu, pois o tempo de espera ainda não acabou. Ainda assim, ele continua despachando os outros pacotes, que seguem seu curso normal. Depois dos sete segundos de espera, ele vê que não recebeu a confirmação do pacote 1 e então o despacha novamente. Em seguida, continua com o pacote 9, pois já tinha despachado até o 8.
Há ainda alguns protocolos ainda mais espertos, que "raciocinam" da seguinte forma: o transmissor manda o primeiro pacote, o segundo, o terceiro, e por aí vai. Se a confirmação chegar fora de ordem, ele automaticamente reenvia o pacote cuja confirmação não chegou (e supostamente deveria ter chegado primeiro), mesmo que o tempo de espera para ele não tenha terminado. Veja a tabela abaixo para entender melhor (note que logo após receber a confirmação do pacote 2 ele reenvia o pacote 1):
Por fim, deixo um exercício para minhas leitoras: vimos no início do artigo que se a camada de enlace de dados esperasse a confirmação de um pacote para mandar o próximo, todo o processo de envio de 10 pacotes levaria um minuto. Pergunto: quanto tempo levaria para mandar os mesmos 10 pacotes no "modo rápido", ilustrado na segunda tabela?
Links interessantes:
2 comentários:
30 segundos?
Não, anônimo. O tempo necessário para mandar dez pacotes no modo rápido, mostrado na segunda tabela do artigo, é de apenas 15 segundos.
Pela segunda tabela, você vê que a cada segundo um pacote é enviado. Logo, o décimo pacote sairia do transmissor no décimo segundo.
(Não, não é no 12º, mas sim no 10º segundo, não confunda.)
Ainda pela tabela, vemos que todo o trabalho de "lidar" com um pacote termina cinco segundos após o momento em que o pacote é enviado. Logo, o décimo pacote termina de ser trabalhado no décimo quinto segundo, finalizando a transmissão.
Ficou entendido?
***
Agora me diga, como é que você chegou aos 30 segundos?
Postar um comentário