====== 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 ==== * Cabe ao estudante apresentar um de janelas deslizantes implementando a estratégia de volta-n. * Os algoritmos podem ser implementados dentro do trabalho I, ou de forma independente. * Caso seja escolhido implementar de forma independente a linguagem da implementação pode ser escolhida pelos alunos. * O trabalho precisa ser versionado e estar disponível em alguma ferramenta que utilize git (recomenda-se o [[https://gitlab.c3sl.ufpr.br/|GitLab do C3SL]]). * Quaisquer escolhas feitas pelos alunos deverão ser explicadas durante a apresentação do trabalho. * Valor: **1,0** ==== Referências ==== * [[https://en.wikipedia.org/wiki/Sliding_window_protocol#Go-Back-N| Explicação janelas deslizantes]] * [[https://www.geeksforgeeks.org/window-sliding-technique/|Janelas deslizantes (GeekforGeeks)]]