Universidade de Brasília ‚ UnB Instituto de Ciências Exatas ‚ IE Departamento de Ciência da Computação ‚ CIC Transmissão de Dados ‚ Turma A Trabalho 03 - Implementação do Go Back N Igor Coelho - 06/ Thiago Melo Stuckert do Amaral - 06/96773 Brasilia, 29 de março de 2009 Sumário 1 Introdução teórica 1 2 Objetivos 1 3 Procedimentos 3 4 Dados 3 5 Gráficos 3 6 Análise dos Dados 3 7 Conclusão 3 8 Decisões 3 9 Cuidados 3 10 Pseudo Código do Wikipedia 4 11 Bibliografia 4 DAR IMPORTANCIA PARA O RELATÓRIO!!!! A pasta bin conterá os executáveis. A pasta doc a documentação. A pasta trabalhosr elacionadoscontmoexemplodesimulaodokuroseeumtrabalhodeumcaradaunicampqueeune simulaodokurosef eitacumumabibliotecacnet(http : //www.csse.uwa.edu.au/cnet/introduction.html). 1 Introdução teórica 2 Objetivos Primeiro tentei responder as perguntas sem implementar o go back n.. Assuma um transmissor e receptor com buffers de B bits. Assuma que o objeto a ser transmitido seja de O bits e que o canal tenha capacidade de R bits e RTT de t ms. Assuma que erros podem ocorrer a uma taxa de 1, 5, 10, 20, 40, 80%. Com base nestes parâmetros você deverá implementar o mecanismo go back N que permita simular uma transmissão de dados entre dois hospedeiros. Após a implementação, você deverá responder as seguintes perguntas: 1) Qual a melhor forma de se calcular o tempo de timeout para os eventos? Qual o efeito do tamanho da janela (se a janela for muito grande ou muito pequena)? Mostre isso num gráfico e explique. 1) Qual a melhor forma de se calcular o tempo de timeout para os eventos? O tempo de timeout deve ser calculado em cima dos SampleRTTs. 1 TimeoutInterval = EstimatedRTT + 4 * DevRTT EstimatedRTT = (1-alfa) * EstimatedRTT + alfa * SampleRTT O primeiro Estimated RTT acredito que será igual ao SampleRTT alfa tem valor tipico de 0.125 . DevRTT = (1- beta) * DevRTT + beta * | SampleRTT - EstimatedRTT | O primeiro DevRTT deve ser igual a 0 beta tem valor tipico 0.25 . Qual o efeito do tamanho da janela (se a janela for muito grande ou muito pequena)? Uma janela muito pequena limitaria a quantidade de pacotes que eu conseguiria enviar sem receber o ack. No caso de ocorrer uma perca de um pacote entre os primeiros de uma janela muito grande faria com que eu tivesse que reenviar vários pacotes. Basta fazer um gráfico variando o tamanho da janela. 2) Em quais cenários é possível obter a maior vazão? Assumindo uma taxa de erros de 1%. Qual a melhor relação entre as diversas variáveis acima para obter esse resultado? Mostre num gráfico e explique. Em quais cenários é possível obter a maior vazão? Lógicamente quando tivermos uma taxa de erro baixa. Um buffer grande. O tamanho do pacote grande? talvez porém quando ocorrem perdas desse pacote grande perderemos bastante dados. Capacidade do canal Alta! O tamanho da janela grande? talvez quando a taxa de perda é baixa. Qual a melhor relação entre as diversas variáveis acima para obter esse resultado? Simulando, com a situação descrita acima. 3) Conforme aumenta a probabilidade de erro, como fica a utilização do canal? Dos buffers? Qual a taxa de goodput (ou seja, a taxa de dados efetivamente transmitida no canal). Mostre isso num gráfico e explique. Com o aumento da taxa de erro a utilização do canal deve aumentar, pois vou ter que enviar mais coisas pelo mesmo canal para que a transmissão do dado seja efetuada. A utilização do buffer deve aumentar? nao sei A taxa de goodput deve diminuir pois estarei transmitindo mais lixo. O seu programa deverá ser implementado sob uma conexão UDP. Todas as premissas acima assumem uma conexão UDP mas os mecanismos estarão sendo implementados pela sua aplicação (motivos óbvios). 2 3 Procedimentos 4 Dados 5 Gráficos 6 Análise dos Dados 7 Conclusão 8 Decisões Tamanho máximo de um pacote UDP é 1492 bytes (Li essa informação em um site tem que confirmar) Devemos escolher as entradas do usuario, no enunciado da especificaçao: "Assuma um transmissor e receptor com buffers de B bits. Assuma que o objeto a ser transmitido seja de O bits e que o canal tenha capacidade de R bits e RTT de t ms. Assuma que erros podem ocorrer a uma taxa de 1, 5, 10, 20, 40, 80%. " Devemos escolher se enviaremos um arquivo de verdade, ou se alocaremos e enviaremos bytes "Falsos" Lógico que deveremos entrar com o N tamanho da janela. Possíveis entradas seriam: tamanho do buffer, o qual seria igual tanto para o destinatario quanto para o rementente caso escolhemos enviar um arquivo de verdade, devemos informar o nome do arquivo. Uma biblioteca interessante para tratarmos as entradas do usuário é a arp.h porém eu n tenho ela instalado no meu notebook. Tem um exemplo no meu trabalho do ping UDP. O trabalho que eu fiz com o jedi ta cum um probleminha em relaçao ao primeiro ping entao é melhor utilizar o que o alex me envio. A capacidade R bits do canal vai ser dificil de determinar, nao será informado pelo usuário. O RTT vai ser calculado para cada ACk recebido. Deveremos implementar uma fila para a janela deslizante. O Udp implementa um checksum? Caso sobre tempo implementamos o checksum do jedi: http://en.wikipedia.org/wiki/Adler-32 9 Cuidados Linguagem: Os programa devem ser feito na linguagem C, padrão ANSI (gcc –ansi -Wall pgma.c). Um Readme.txt deve ser entregue juntamente com o programa fonte descrevendo a tarefa que foi implementada, nome dos componentes do grupo, matrícula, a forma de compilar, executar, e testar o programa, bem como a saída 3 esperada, mensagens,.. enfim, tudo que for necessário para entender, compilar, executar e testar o programa. Lembrado que o monitor irá testar o seu programa primeiro de acordo com o seu exemplo, e depois com um teste específico. Portanto, certifique-se que o mesmo funciona conforme descrito no seu arquivo Readme.txt. No nosso caso o readme é este pdf. 10 Pseudo Código do Wikipedia N = windowsize Rn = request number Sn = sequence number Sb = sequence base Sm = sequence max Receiver: Rn = 0 Do the following forever: If the packet received = Rn the packet is error free Accept the packet and send it to a higher layer Rn = Rn +1 Send a Request for Rn Else Refuse packet Send a Request for Rn Sender: Sb = 0 Sm = N – 1 Repeat the following steps forever: 1. If you receive a request number where Rn > Sb Sm = Sm + (Rn – Sb) Sb =Rn 2. If no packet is in transmission, Transmit a packet where Sb <= Sn <= Sm. Packets are transmitted in order. 11 Bibliografia KUROSE, F.J. and ROSS W.K , Redes de computadores e a Internet. Addison Wesley, 2003. http://en.wikipedia.org/wiki/Go-Back-N_ARQ http://www.jmartinho.net/sd/ 4