Trabalho III: Janelas Deslizantes

Motivação

Imagine que você está tentando baixar o último episódio da primeira temporada da série House of the Dragon da HBO, você inicia o Download no horário do lançamento do episódio, as 21h. Como se sabe, o tamanho máximo de um pacote na Ethernet é de 1500 bytes. Imagine a seguinte situação, tanto a comunicação do seu computador com o servidor da HBO, quando a comunicação do servidor com a sua casa demoram exatamente um segundo para ser concluídos. desconsiderando a requisições e mensagens menores só para enviar o episódio que em em torno de 4GB levariam 2863312 segundos, contando o tempo para envio da resposta de recebimento (ack) seriam praticamente 66 dias para realizar o download. Até o episódio terminar de finalizar o download, você provavelmente já tomou spoiler de tudo que aconteceu, perdendo toda a graça da série.

Por conta disso, precisamos de uma forma mais eficiente de realizar a comunicação, de forma que você consiga assistir no mesmo dia o episódio. Uma forma simples de pensar seria ao invés de mandar um único pacote por vez, enviar 2 pacotes por vez. Desse modo, um ack seria enviado para o recebimento de 2 pacotes e caso um se perdesse, os dois seriam enviados novamente. Desse modo, o tempo para o envio do episódio seria cortado pela metade.

Se podemos enviar 2 pacotes, por que não 4, ou 8, ou então 16 e assim por diante? Essa é a ideia por trás das janelas deslizantes.

Desafio

Você, estudante de ciência da computação, tem em suas mãos um grande desafio, implementar um algoritmo de janelas deslizantes (utilizando a estratégia “volta-n”) para que seja possível enviar arquivos grandes de uma forma mais otimizada que o a estratégia de para-e-espera, afinal ninguém gosta de tomar spoiler da série favorita.

Requisitos

Referências