Trabalho do Curso de Redes de Computadores
COS765/MAB731 – 2015/1
Universidade Federal do Rio de Janeiro Rosa M.M. Le˜ao e Daniel Sadoc Menasch´e
Primeiro Per´ıodo de 2015
1
Introdu¸
c˜
ao
O objetivo deste trabalho ´e fazer um programa que implemente algumas das fun¸c˜oes de um programa de transmiss˜ao de dados multim´ıdia. Mais especificamente, vocˆe vai implementar um protocolo simples de transferˆencia de ´audio. Usaremos o protocolo UDP para estabelecer uma conex˜ao de um processo a outro.
Todos os usu´arios de alguma plataforma de transmiss˜ao de dados multim´ıdia (e.g., Youtube) em algum momento j´a se depararam com a mensagem Aguarde, carregando buffer. O buffer no receptor ´e uma estrat´egia bastante utilizada por aplica¸c˜oes multim´ıdia para compensar o jitter introduzido pela rede. Um dos objetivos deste trabalho ´e entender o motivo de haver buffers de recep¸c˜ao nos softwares de transmiss˜ao multim´ıdia.
Aplica¸c˜oes multim´ıdia s˜ao principalmente baseadas na arquitetura cliente servidor ou na arquite-tura P2P. Na arquitearquite-tura cliente servidor, os blocos s˜ao em geral transmitidos de forma sequencial. J´a na arquitetura P2P, os blocos podem ser transmitidos de forma aleat´oria ou sequencial. Um outro objetivo do projeto ´e avaliar os tradeoffs envolvidos na decis˜ao entre a transmiss˜ao sequencial de blocos e a transmiss˜ao aleat´oria de blocos.
´
E aconselh´avel a leitura do cap´ıtulo sobre multim´ıdia do livro texto (Kurose e Ross) antes de implementar este trabalho.
2
Disponibilidade de Blocos No Emissor
Pretendemos emular um sistema P2P. Entretanto, para simplificar a implementa¸c˜ao, vamos assumir que temos apenas dois peers: um emissor e um receptor.
Para capturar o fato de que blocos em um sistema P2P podem estar indispon´ıveis para transmiss˜ao sequencial, vamos assumir que, a cada tentativa de transmiss˜ao sequencial de um bloco, este bloco est´a dispon´ıvel no emissor com probabilidade r e indispon´ıvel com probabiliade 1 − r. Suponha que o emissor precise transmitir um bloco que esteja indispon´ıvel, ele ent˜ao aguarda 20 ms e faz novo sorteio para calcular o novo status do bloco: dispon´ıvel ou indispon´ıvel. Esse procedimento ´e repetido at´e que o bloco esteja dispon´ıvel para ser transmitido.
Caso a pol´ıtica adotada seja a de transmiss˜ao aleat´oria, o emissor dever´a guardar todos os blocos que ele j´a transmitiu. A cada 20 ms, ele escolhe um novo bloco aleatoriamente dentre aqueles que ainda n˜ao transmitiu e o transmite.
Note que vocˆe pode implementar uma nova pol´ıtica de transmiss˜ao de blocos mais eficiente do que as duas propostas neste projeto, como por exemplo uma combina¸c˜ao das pol´ıticas sequencial e ale´atoria. Comece implementando as pol´ıticas propostas acima (estritamente aleat´orio e estritamente sequencial), e depois considere outras pol´ıticas. A hip´otese a ser mantida ´e sempre a seguinte:
1. ao escolher aleatoriamente um bloco dentre aqueles ainda n˜ao transmitidos, assume-se que este bloco est´a sempre dispon´ıvel.
2. se o ´ultimo bloco transmitido for o bloco k, ao escolher transmitir intencionalmente (e n˜ao por acaso) o bloco k + 1, o bloco k + 1 estar´a dispon´ıvel com probabilidade r. Caso esteja dispon´ıvel, ele pode ser transmitido. Caso contr´ario, deve-se esperar 20 ms para tentar nova transmiss˜ao de k + 1.
3
Funcionamento do Programa
Vocˆe deve fazer um aplicativo para transferir um arquivo de ´audio a 64 Kbps. Cada pacote deve ter tamanho de 160 bytes (1280 bits), e um pacote deve ser transmitido a cada 20 milisegundos (50 pacotes por segundo).
O seu aplicativo deve implementar fun¸c˜oes de transferˆencia de informa¸c˜ao, usando o protocolo UDP para simples estabelecimento de conex˜ao, conforme mostra a figura abaixo.
rede real ou computador único com comunicaçao entre processos camada de simulação de perdas e atrasos (parte de transmissão) camada de simulação de perdas e atrasos (parte de recepção) geração de dados de
áudio (1 pacote a cada 20 ms) recepção de dados de áudio (idealmente, 1 pacote a cada 20 ms) buffer de recepção TCP ou UDP
Ao iniciar, o programa de transferˆencia de ´audio deve receber informa¸c˜oes sobre a fonte de dados que gerar´a as amostras a serem transferidas. Vocˆe pode transferir um arquivo de ´audio pr´e-gravado (e nesse caso o nome do arquivo a ser transferido deve ser informado) ou at´e mesmo transmitir dados aleat´orios armazenados em um arquivo apenas para simular o que seria um arquivo de ´audio.
O programa de transmiss˜ao simplesmente envia um pacote, aguarda 20 milisegundos, envia o pr´oximo pacote, aguarda 20 milisegundos, e assim por diante.
O programa de recep¸c˜ao de dados implementa rotinas para (a) armazenar os pacotes em um buffer, (b) transmitir os pacotes para a aplica¸c˜ao que ir´a toc´a-los ou simplesmente registrar em um log o seu recebimento.
Vocˆe tamb´em dever´a implementar um m´odulo de perdas/atrasos que implementa as fun¸c˜oes de-scritas abaixo:
• Cada segmento deve conter um header. No header, vocˆe deve colocar o n´umero de sequˆencia do pacote e quaisquer outras informa¸c˜oes que julgar necess´ario. Vocˆe n˜ao precisa implementar a rotina para fazer o checksum.
• Vocˆe dever´a testar tanto o cliente quanto o servidor rodando-os numa mesma m´aquina ou em uma rede local. Nestes dois cen´arios, n˜ao existem perdas ou atrasos. Dessa forma, vocˆe dever´a implementar um m´odulo (ver figura) que emular´a atrasos e perdas de pacotes aleat´orios. Este m´odulo, recebe um segmento da camada UDP e o atrasa de um valor aleat´orio igual a RT T /2+X, sendo RT T fixo e X uma vari´avel aleat´oria com distribui¸c˜ao exponencial e m´edia E[X] (procure saber como vocˆe implementa uma distribui¸c˜ao exponencial a partir da fun¸c˜ao de randomiza¸c˜ao de C). O m´odulo tamb´em escolhe se entrega ou n˜ao um pacote `a camada acima. Isto ´e, um pacote ´e perdido com probabilidade F (procure tamb´em saber como vocˆe implementa essa probabilidade). Para implementar os atraso aleat´orios, vocˆe deve criar uma lista de segmentos da forma descrita abaixo. Quando um segmento ´e recebido, o tempo atual t ´e lido. A este tempo somamos RT T /2 + X, onde X ´e aleat´orio. O novo tempo tn= t + RTT/2 + X ´e colocado numa lista de
tempos com um indicador do segmento a que o tempo est´a associado. A lista ´e organizada por ordem de tempo. Os pacotes s˜ao entregues ao m´odulo superior quando o tempo atual for igual a tn.
Vocˆe pode saber quando entregar os segmentos de duas formas: (1) Criando um loop infinito no seu programa que verfica a cada t unidades de tempo se o tempo atual ´e igual a tn e se
for, entrega o segmento. (2) Disparando um timer com o valor de tn cada vez que houver uma
inclus˜ao de um elemento na primeira posi¸c˜ao da lista. Quando o timer expirar, o segmento deve ser entregue ao m´odulo superior. A solu¸c˜ao (1) ´e mais simples mas ´e computacionalmente mais custosa.
Desta forma, a camada de recep¸c˜ao de ´audio receber´a segmentos com atrasos aleat´orios e tamb´em, segmentos podem ser perdidos.
• O programa de emula¸c˜ao de perdas deve ler de um arquivo o valor de F , o valor de RT T e o valor de E[X].
• O seu programa deve ter como sa´ıda Os instantes em que (a) cada pacote foi enviado; (b) cada pacote foi recebido; (c) cada pacote foi tocado. O objetivo ´e reproduzir gr´aficos como os mostrados na Figura 2, para ambos os casos: transmiss˜ao sequencial e aleat´oria.
O tradeoff envolvido a ser ilustrado numericamente ´e o seguinte: a transmiss˜ao sequencial ir´a favorecer uma diminui¸c˜ao do tempo at´e que se possa iniciar a exibi¸c˜ao do ´audio. Entretanto, a
tempo pacote 5 4 3 2 1
transmitidos recebidos tocados
Figure 2: Tempo de transmiss˜ao, recep¸c˜ao e exibi¸c˜ao dos pacotes. Note que nessa figura estamos assumindo que os pacotes s˜ao transmitidos, recebidos e tocados em ordem. Neste trabalho, entretanto, consideramos a possibilidade de os pacotes serem transmitidos e recebidos fora de ordem. Faz parte do seu trabalho inventar uma forma de adaptar este gr´afico, ou inventar um novo gr´afico, para levar em conta essas possibilidades. Para simplificar, comece implementando o algoritmo sequencial, e assuma que n˜ao ocorrem reordem de pacotes na rede.
transmiss˜ao sequencial ir´a gerar mais falhas ao longo da recep¸c˜ao. J´a a transmiss˜ao aleat´oria ir´a gerar menos falhas, mas o tempo para que se comece a tocar o ´audio pode ser maior. Assuma que o receptor possui um buffer tal que, quando contiver os B primeiros pacotes de ´
audio cont´ıguos, o ´audio come¸ca a tocar.
Considere, em particular, a compara¸c˜ao das solu¸c˜oes sequencial e aleat´oria nas duas seguintes situa¸c˜oes:
1. B ´e o arquivo completo (nesse caso, espera-se que a solu¸c˜ao aleat´oria seja melhor)
2. B ´e igual a 1 bloco (nesse caso, dependendo da m´etrica de interesse e da probabilidade de perda de pacotes na rede, e da disponibilidade dos blocos, a solu¸c˜ao aleat´oria pode ser melhor ou pior que a sequencial)
O arquivo de teste deve ser longo para que possamos ter uma id´eia do comportamento do protocolo. O seu relat´orio deve ter conclus˜oes sobre o trabalho, baseadas nas medidas acima. Para isso voce deve variar F e RT T . Faz parte do projeto a escolha coerente destes parˆametros de forma a se conseguir fazer um estudo do comportamento do tamanho do buffer.
Comportamento do Buffer
Assuma que o receptor possui um buffer grande o suficiente de tal forma que perdas de pacotes por buffer overflow nunca ocorrem. Toda vez que o buffer contiver os pr´oximos B pacotes a serem tocados, vocˆe deve ler, remover e tocar os B pacotes a uma taxa de 1 pacote a cada 20 ms.
4
Relat´
orio
O relat´orio dever´a ser composto por: • Introdu¸c˜ao
Nesta se¸c˜ao vocˆe deve descrever em linhas gerais o objetivo do seu trabalho. • O Programa:
Aqui vocˆe deve descrever em linhas gerais como funciona o seu programa. • Resultados:
Neste item vocˆe deve fazer um estudo do protocolo de transmiss˜ao de ´audio variando a pol´ıtica de transmiss˜ao (sequencial versus aleat´oria), r, RT T e F , e plotar gr´aficos conforme indicado acima.
• Conclus˜ao:
Nesta se¸c˜ao vocˆe deve expor suas conclus˜oes sobre o trabalho. • C´odigo Fonte:
Incluir a listagem do c´odigo fonte.