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
Download

Trabalho 03 - Implementação do Go Back N