Fundação Universidade Federal do Rio Grande Engenharia de Computação MulticastStreaming na Camada de Protocolos de Aplicação para Felipe Lopes Madruga Rio Grande, 1 de Abril de 2008 Fundação Universidade Federal do Rio Grande Engenharia de Computação MulticastStreaming na Camada de Protocolos de Aplicação para Felipe Lopes Madruga Trabalho de de Graduação Conclusão em do Engenharia Curso de Computação submetido à avaliação, como requisito parcial à obtenção do título de Engenheiro de Computação. Orientador(a): Prof. Dr. Nelson Lopes Duarte Filho Rio Grande, 1 de Abril de 2008 Este trabalho foi analisado e julgado adequado para a obtenção do título de Engenheiro de Computação e aprovado em sua forma nal pelo orientador. Prof. Dr. Nelson Lopes Duarte Filho Banca Examinadora: Prof. Dr. Nelson Lopes Duarte Filho Departamento de Matemática - FURG Profa . Dra . Silvia da Silva Costa Botelho Departamento de Física - FURG Prof. MSc. Celso Luiz Lopes Rodrigues Departamento de Matemática - FURG Dedico esse trabalho aos meus pais. Agradecimentos De forma especial, agradeço à minha família por me apoiar em todos os momentos, tornando mais fácil a conquista do diploma de nível superior. Agradeço ao professor Nelson Lopes Duarte Filho pela orientação, paciência e ajuda. O meu aprendizado com ele foi de extrema importância na minha carreira acadêmica. Agradeço também a minha namorada Aline pelo apoio e principalmente pela ajuda nos momentos difíceis. Finalmente, agradeço aos meus poucos, porém muito bons amigos pelos bons momentos que passamos juntos. Conteúdo Lista de Figuras iii Lista de Tabelas iv Lista de Abreviaturas v Resumo vii Abstract viii 1 Introdução 2 Streaming 4 2.1 Construção de um Sistema de Streaming . . . . . . . . . . . . . . . . . . . 6 2.2 Qualidade de Serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 Streaming sobre TCP/UDP . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.1 Transport Control Protocol (TCP) . . . . . . . . . . . . . . . . . . 8 2.3.2 User Datagram Protocol (UDP) . . . . . . . . . . . . . . . . . . . . 9 2.4 3 1 Protocolos Especializados . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4.1 Real-Time Streaming Protocol (RTSP) . . . . . . . . . . . . . . . . 10 2.4.2 Real-Time Transport Protocol (RTP) . . . . . . . . . . . . . . . . . 11 Multicast na Camada de Aplicação 3.1 13 Alguns Protocolos de Application-Layer Multicast (ALM) . . . . . . . . . . 14 3.1.1 YOID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.1.2 Host Multicast Tree Protocol (HMTP) . . . . . . . . . . . . . . . . 16 i CONTEÚDO ii 3.1.3 Application-Level Multicast Infrastructure (ALMI) . . . . . . . . . 17 3.1.4 NICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1.5 Bayeux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.6 CAN-Multicast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.7 Narada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2 Comparação entre os Protocolos Apresentados . . . . . . . . . . . . . . . . 20 4 O Protótipo 4.1 21 Descrição da Proposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.1.1 Rede Sobreposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.1.2 Topologia de Controle . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.1.3 Topologia de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.2 Implementação do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.3 Funcionamento do Protótipo . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.4 Experimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.5 Trabalhos Completos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5 Conclusão 30 Bibliograa 32 Lista de Figuras 1.1 Possibilidades de entrega de dados. . . . . . . . . . . . . . . . . . . . . . . 3 2.1 Diagrama representando download. . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Diagrama representando streaming. . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Variações no sistema podem interromper a reprodução da mídia. . . . . . . 6 2.4 Diagrama de tempo em uma transmissão RTSP. . . . . . . . . . . . . . . . 11 3.1 Modelo de Referência TCP/IP. . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 Tipos de árvores de distribuição. . . . . . . . . . . . . . . . . . . . . . . . . 15 3.3 Modelo de Camadas do NICE. . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.4 Estrutura de um Content-Addressable Network (CAN). . . . . . . . . . . . 19 4.1 Tipos de registros empregados no sistema. . . . . . . . . . . . . . . . . . . 22 4.2 Exemplo do processo de entrada. . . . . . . . . . . . . . . . . . . . . . . . 25 4.3 Camadas do sistema implementado. . . . . . . . . . . . . . . . . . . . . . . 26 4.4 Tela principal do protótipo. . . . . . . . . . . . . . . . . . . . . . . . . . . 28 iii Lista de Tabelas 3.1 Comparação entre protocolos de ALM. . . . . . . . . . . . . . . . . . . . . 20 4.1 Comparação entre arcabouços para programação P2P. . . . . . . . . . . . . 26 iv Lista de Abreviaturas ALM Application-Layer Multicast ALMI Application-Level Multicast Infrastructure API Application Program Interface CAN Content-Addressable Network FURG Fundação Universidade Federal do Rio Grande HMTP Host Multicast Tree Protocol HTTP HyperText Transfer Protocol ICMP Internet Control Message Protocol IGMP Internet Group Management Protocol IP Internet Protocol ISP Internet Service Provider JMF Java Media Framework JRE Java Runtime Environment LAN Local Area Network MMS Microsoft Media Streaming P2P Peer-to-Peer RDT RealNetworks Data Transport v LISTA DE TABELAS RP Rendezvous Point RTCP Real-Time Control Protocol RTP Real-Time Transport Protocol RTSP Real-Time Streaming Protocol RTT Round-Trip Time TCP Transport Control Protocol UDP User Datagram Protocol WWW World Wide Web vi Resumo O envio de um uxo contínuo de dados (streaming) para um grupo de computadores da Internet de forma eciente é um problema principalmente devido ao fato da funcionalidade de multicast do protocolo Internet Protocol (IP) ser de difícil utilização e pouca disponibilidade. Uma sugestão para solucionar essa questão é realizar tal função em camadas superiores da pilha de protocolos, sendo tal proposta chamada de multicast na camada de aplicação. Essa alternativa utiliza somente o modelo de comunicação unicast do protocolo IP, deixando todas as questões de criação e manutenção dos grupos para a camada de aplicação. Usando esse modelo de comunicação, foram projetados vários protocolos com diversas peculiaridades. A utilização desse paradigma é uma alternativa viável tanto para baratear os custos de grandes empresas que desejem enviar uxos para um grande número de usuários, quanto para usuários ao redor do mundo, que queiram utilizar os computadores domésticos para formar uma grande estrutura de transmissão. Esse trabalho analisa quais protocolos podem ser ecientes em criar um ambiente propício para streaming, bem como as principais características a serem levadas em conta. Além disso, é proposto um modelo de construção de árvores de distribuição usando uma combinação de técnicas, visando maior descentralização e escalabilidade em relação às propostas atuais. Para demonstrar a funcionalidade foi construído um protótipo para publicação de uxos e transmissão de mídia contínua através de um protocolo ApplicationLayer Multicast (ALM) e de um sistema Peer-to-Peer (P2P). Palavras-chave: Multicast na camada de aplicação, redes sobrepostas, streaming. vii Abstract The delivery of a continuous data ow (streaming) to a group of computers on the Internet eciently is a problem, mainly due to the diculty of use and the limited availability of the multicast funtionality of the IP protocol. One sugestion to solve this issue is to perform such function in upper layers of the protocol stack, and that proposal is called Application-Layer Multicast. This alternative uses only the unicast communication model from the IP protocol, leaving all the concerns about creation and maintenance of groups to the application layer. Many protocols were designed using this communication model, each one with its own peculiarities. The use of this paradigm is a feasible alternative for both minimize the costs of large companies wishing to send streams to a large number of users, and for users around the world, who want to use home computers to form a large structure of transmission. This work examines which protocols can be eective in creating an environment conducive to streaming, as well as the main features to be taken into account. In addition, it proposes a model of building distribution trees using a combination of techniques, seeking greater decentralization and scalability on the today proposals. Intending to demonstrate the functionality, a prototype was built to perform publication and transmission of streams of continuous media through a Application-Layer Multicast (ALM) protocol and a P2P system. Keywords: Application-Layer Multicast, overlay networks, viii streaming. Capítulo 1 Introdução A transmissão de dados como vídeo e áudio consome uma grande largura de banda em relação a um arquivo de texto, uma imagem ou qualquer documento típico da World Wide Web (WWW). O envio dessas mídias contínuas [Lee, 2005] (que possuem embutidos em si restrições de tempo), sendo elas consumidas antes da recepção de sua última parte, é chamado de streaming e geralmente se dá em uma relação de um transmissor para muitos receptores. Quando há muitos clientes em uma transmissão, a técnica de entrega mais indicada é o multicast. Notadamente, a respeito do consumo de largura de banda, o ideal seria a duplicação de pacotes acontecer nos roteadores, para o tráfego gerado ser o menor possível. Entretanto, a infraestrutura atual da Internet não disponibiliza de maneira satisfatória o serviço de entrega a vários receptores com esse modelo de comunicação. Assim, o que acontece na maioria das vezes é um transmissor ter uma comunicação gerando um gargalo. unicast com cada receptor, Uma outra opção é realizar o roteamento e a construção das árvores de distribuição nos hosts nais. O multicast IP, incumbido de implementar essa funcionalidade na camada de rede, ainda não é totalmente habilitado na seguir, apresentamos alguns motivos para isso [Diot et al., 2000]. • manutenção custosa de controle de grupos; • problemas de segurança; • localização de endereços pouco escalável; 1 Internet. A CAPÍTULO 1. 2 INTRODUÇÃO • robustez, controle de congestionamento, problemas de controle de uxo; • disponibilização lenta por parte dos Internet Service Provider (ISP)s. Para tornar o processo de streaming mais escalável, algumas pesquisas sobre multicast direcionaram-se para camadas superiores [Abad et al., 2004]. Nesses métodos todas as funcionalidades de criação e manutenção dos grupos são feitas pelos por isso, eles são chamados de ALM ou end-host multicast. podemos mais facilmente contornar os problemas do hosts nais; Com essa solução, multicast IP. Desse modo, a tarefa de disponibilização ca muito facilitada por não requerer nenhuma modicação na infraestrutura da Internet existente. Segundo o modelo de referência TCP/IP [Tanenbaum, 2003], a camada inter-redes (implementada através do protocolo IP) é responsável por fazer com que os pacotes injetados em uma rede cheguem ao seu destino. Portanto, realizar multicast na camada de aplicação vai de encontro a teoria que fundamentou a criação desse modelo. Existem algumas desvantagens e vantagens nessa abordagem. A diferença essencial entre o nos multicast IP e o ALM é que a duplicação dos pacotes no último é feita hosts nais. Essa duplicação feita nos hosts gera desperdício de largura de banda, atraso e, portanto, uma queda de performance considerável. Uma vantagem é a utilização de recursos como a capacidade de processamento e armazenamento dos computadores responsáveis pelo roteamento. Bons exemplos que tiram proveito disso são os de distribuição de conteúdo multimídia adaptativos (e.g., transcodicação [J. Youn and Sun, 2000] e codicação em camadas [Lee, 2005]). A gura 1.1 retirada de [Chu et al., 2000] ilustra quatro possibilidades de entrega de dados a partir de um transmissor A para os receptores B, C e D, onde R1 e R2 são roteadores. Na gura identicam-se (a) Ambiente do exemplo; (b) Múltiplos uxos transmissor; (c) unicast a partir do Multicast na camada de rede; (d) Multicast na camada de aplicação. Muitos são os serviços de distribuição de vídeo na Internet. O mais popular atualmente é o youtube [Youtube, 2008]. Sistemas como o youtube são chamados de vídeo sob demanda, pois os vídeos são requisitados e, em seguida, enviados. Existem, portanto, restrições diferentes das de um vídeo ao vivo, digamos, da exibição de um jogo de futebol, por exemplo. Essas diferenças são essenciais para a elaboração do arcabouço que torna CAPÍTULO 1. 3 INTRODUÇÃO Figura 1.1: Possibilidades de entrega de dados. possível sua implementação. Aqui levamos em consideração transmissões que não são sob demanda, ou assíncronas. O desao de construir um protocolo de multicast na camada de aplicação eciente para sistemas de streaming, como rádio e televisão pela Internet, é abordado nesse trabalho. Propomos também uma solução que visa atender primordialmente a dois requisitos desses sistemas: escalabilidade e descentralização. No próximo capítulo são apresentados tópicos sobre streaming, os dados geralmente envolvidos e as questões que caracterizam essa categoria de aplicações. No capítulo 3, são abordados os protocolos utilizados para comunicação em grupo em redes sobrepostas e são discutidos exemplos e características. Após, o capítulo 4 se refere ao protótipo decorrente deste trabalho, bem como questões acerca da sua implementação. Finalmente, são feitas considerações nais sobre ALM e o seu futuro, no capítulo 5. Capítulo 2 Streaming Na Internet, há vários tipos de mídia, como imagens, áudio, texto e vídeo. No contexto deste trabalho, é interessante classicar os tipos de mídia em dois grupos [Lee, 2005]: mídia discreta e mídia contínua. Consideremos um cliente utilizando um navegador para abrir uma página que contém uma imagem. Essa imagem será transferida do servidor web para a máquina cliente em um tempo que depende da largura de banda disponível, e então decodicada e apresentada. Embora seja bom minimizar o tempo da transferência, não existe restrição rígida quanto ao tempo que a imagem vai levar pra ser apresentada e, após concluída a apresentação, o processo está terminado. Isso é um exemplo de mídia discreta. Já na mídia contínua, há requerimentos explícitos de tempo embutidos nos dados. Bons exemplos dessa classe de mídia são áudio e vídeo. Esses dados, em muitos casos, são consumidos à medida em que são recebidos; as próximas partes que vão sendo recebidas são essenciais para a integridade da informação e devem estar disponíveis no cliente assim que forem necessárias para apresentação. Desse modo, o tráfego na rede para uma transmissão desse tipo precisa manter certos parâmetros para proporcionar a integridade de tempo. Variações quanto aos tempos de chegada dos dados, e outros parâmetros, são classicados entre quesitos de qualidade de serviço, tópico exposto em uma seção deste capítulo. A relação temporal entre transferência e consumo desse tipo de dados denota a diferença entre download(mídia discreta) e streaming(mídia contínua). A gura 2.1 mostra um diagrama representando um download, e a gura 2.2 mostra o mesmo no caso de um streaming. Obviamente, é possível realizar um download de um arquivo de áudio ou 4 CAPÍTULO 2. STREAMING 5 vídeo. Porém, em alguns casos, é melhor consumir os dados enquanto eles são recebidos, reduzindo drasticamente o atraso do início da reprodução. Figura 2.1: Diagrama representando download. Figura 2.2: Diagrama representando streaming. Este trabalho trata da construção de um arcabouço para realizar streaming sobre uma rede sobreposta (overlay). Tendo isso em vista, as próximas seções discorrem a respeito das questões envolvidas com esse tipo de aplicação. CAPÍTULO 2. 2.1 STREAMING 6 Construção de um Sistema de Streaming Uma das preocupações que devemos ter ao construir um sistema de streaming é que os fragmentos de dados sejam entregues ao cliente a tempo de manter a continuidade da apresentação da mídia. É preciso estabelecer em que momento a reprodução deve iniciar depois que o processo de streaming começou. Uma vez que é iniciada a exposição dos dados, o momento de reprodução de todos os outros fragmentos será xado. Quanto maior for o atraso para o início da reprodução, maior será o tempo para realizar a transferência dos dados. Entretanto, não se pode atrasar demais o início da reprodução, o que é uma métrica importante de desempenho. Além disso, a performance de um sistema de streaming possui diversas variações devidas à performance de cada componente individual do sistema. Os principais fatores que podem causar variações são, no servidor, o processo de compressão de dados, a passagem dos dados comprimidos ao buer de memória do servidor, a preparação dos pacotes e o envio destes. No cliente, a eciência do sistema pode variar principalmente por causa do processo de decodicação. Quaisquer dessas variações podem fazer com que os dados cheguem muito atrasados para a reprodução, ocasionando uma perda da continuidade, conforme é ilustrado na gura 2.3 [Lee, 2005]. Figura 2.3: Variações no sistema podem interromper a reprodução da mídia. Como a mídia contínua geralmente gera uma grande quantidade de dados para armazenamento e transferência, ao projetarmos um sistema de streaming é preciso CAPÍTULO 2. STREAMING 7 conseguir eciência nos seus vários subsistemas para determinar a eciência do serviço como um todo. Atualmente, apesar dos avanços tecnológicos, o custo de servir mídia de alta qualidade (como os emergentes vídeos de alta denição) é ainda bastante substancial. Também é desejável que o sistema seja escalável - que suporte um crescimento em larga escala no número de usuários sem queda exagerada em performance. E que sobreviva a falhas, o que pode ser conseguido introduzindo redundância de hardware e mecanismos de tolerância a falhas. 2.2 Qualidade de Serviço Segundo [Marchese, 2007], do ponto de vista da rede, qualidade de serviço é a habilidade que um elemento de rede (e.g., uma aplicação, um host ou um roteador) tem de ter alguma garantia de que o tráfego e o serviço solicitados satisfarão suas necessidades. Dentre as métricas de qualidade de serviço, podem-se citar 1. taxa de perda de pacotes: tendo em vista que a Internet é interconectada através do protocolo IP, que não provê garantia de entrega, dados transmitidos às vezes não chegam ao destinatário. Por exemplo, um roteador com a la de chegada congestionada pode simplesmente descartar os pacotes que chegam. Esse quesito está relacionado a isso. 2. throughput (largura de banda): reete a quantidade de dados que a rede é capaz de entregar durante um intervalo de tempo. Uma maior largura de banda normalmente causa melhoras em outros parâmetros de qualidade de serviço. 3. taxas de erros de pacotes: mede a taxa de pacotes que chegam no receptor com inconsistências, assim denotando problemas de transmissão. 4. jitter: é a variação do atraso entre os pacotes. É alto quando, em uma seqüência de pacotes enviados, o intervalo de chegada varia muito. 5. atraso: dimensiona o tempo que os pacotes levam desde a saída do transmissor até a chegada no receptor. CAPÍTULO 2. 6. skew: STREAMING 8 trata-se de um parâmetro exclusivo das transmissões de multimídia, que é a disparidade das taxas de uxos diferentes que compõe o mesmo objeto a ser reproduzido. Um exemplo é quando um vídeo com áudio está sendo transmitido e o áudio está chegando corretamente, porém o vídeo está atrasado. É evidente que cada tipo de aplicação possui suas restrições e é sensível a quesitos diferentes. Conforme discutido na seção anterior, as aplicações de streaming são sensíveis a todas as citadas. Entretanto, pouco atraso não é muito importante para transmissões sob demanda e é essencial para transmissões ao vivo. Atualmente, na Internet, no caso do protocolo IPv4, não se utilizam os mecanismos que proveriam garantia de qualidade de serviço, por uma série de razões. Desse modo, essas métricas podem ser medidas ou estimadas, geralmente sem haver qualquer garantia por parte dos ISPs. A largura de banda, para usuários comuns com conexão ADSL, por exemplo, não é garantida devido aos algoritmos empregados, havendo cobranças de grandes taxas para se obter tal garantia. Streaming 2.3 sobre TCP/UDP Nesta seção, trataremos sobre o uso dos protocolos de de Internet existentes para aplicações streaming. A camada de transporte utilizada na Internet suporta o TCP e o UDP, principalmente. 2.3.1 TCP Como o TCP já possui controle de erro, de uxo e de congestionamento embutidos, o desenvolvimento de uma aplicação de streaming para esse protocolo ca um tanto simples. O TCP protege a aplicação das complexidades de gerenciar o tráfego pela O Internet. streaming sobre HTTP/TCP tem muitas vantagens óbvias: o provedor de serviços não precisará investir em caros servidores de mídia especializados; a sua operação é simplicada, visto que o tráfego é tratado da mesma forma que o tráfego da WWW (assim, ele passa de forma transparente por rewalls e gateways); o amplo suporte para HTTP aumenta a compatibilidade com as aplicações do cliente. Contudo, a desvantagem CAPÍTULO 2. do STREAMING 9 streaming HTTP/TCP é a performance. Ao nível da aplicação, o servidor não está projetado para entregar dados de maneira sensível ao tempo. Portanto, se ele estiver sobrecarregado, pode não conseguir sustentar uma reprodução de mídia suave, estável. No nível do transporte, as características do TCP foram desenvolvidas para aplicações genéricas. Não há suporte para aplicações com sensibilidade de tempo e de largura de banda, como é o caso do streaming de mídia. Além do mais, o mecanismo de controle do TCP força a entrega dos dados sem erros (incorrendo em retransmissões de pacotes) e na seqüência exata em que foram enviados. Conseqüentemente, se o dado retransmitido chegar depois do momento correto da reprodução, tornar-se-á inútil e será descartado pelo receptor. Para piorar, o algoritmo de controle de congestionamento do TCP interpretará a perda de pacote como um indício de congestionamento na rede e então diminuirá sua taxa de transmissão como meio de reduzir a janela de congestionamento. Essa diminuição afetará o streaming de mídia, atrasando a transmissão dos dados, podendo fazer com que eles cheguem após o momento em que são necessários para a exibição. 2.3.2 UDP O UDP, por outro lado, não sofre dos problemas do TCP. É um protocolo mais simples, que transfere datagramas sem controle de uxo, de congestionamento ou de erro. Por isso, o UDP não introduz atraso adicional como o TCP. Dessa forma, o UDP se torna adequado para transmissão de dados de mídia sensível ao tempo. Entretanto, no streaming de mídia, às vezes é necessário fazer um controle de uxo para reagir ao congestionamento da rede e às perdas de pacotes. A questão é que, quando estão sendo utilizadas essas funções, os requerimentos de tempo e largura de banda da mídia devem ser levados em conta. Isso pode ser feito construindo-se uma outra camada com um protocolo de streaming acima do UDP, onde o protocolo de streaming cuida das questões especícas e o UDP só é usado para entregar mensagens de controle e os dados. CAPÍTULO 2. 2.4 STREAMING 10 Protocolos Especializados Ao longo dos anos, inúmeros protocolos de streaming foram desenvolvidos tanto para companhias comerciais quanto para a comunidade da Internet. Exemplos de alguns protocolos proprietários desenvolvidos são o Microsoft Media Streaming (MMS) e o RealNetworks Data Transport (RDT). O MMS usa o TCP/IP para troca de mensagens de controle e pode enviar dados de mídia sobre UDP ou TCP. A comunidade da Internet desenvolveu protocolos para streaming de forma aberta. Fazem parte desses protocolos o RTSP e o RTP, sobre os quais as subseções seguintes discorrem. 2.4.1 RTSP O RTSP é um protocolo da camada de aplicação desenvolvido para controlar a transmissão de dados de mídia (por exemplo, play, pause e seek) com informação de tempo embutida, bem como áudio e vídeo. Como é independente do protocolo da camada inferior, o RTSP pode ser transportado sobre TCP, UDP ou outros protocolos de transporte. A sintaxe do RTSP tem muita semelhança com HTTP/1.1, simplicando a implementação e organização; todavia, difere do HTTP em muitos aspectos importantes. Diferentemente do HTTP, o RTSP é um protocolo ciente do estado, requerendo ao host a manutenção da informação do estado da sessão de streaming através de múltiplas solicitações RTSP. Outra diferença é que ambos servidor RTSP e cliente podem emitir requisições RTSP. Por último, os dados de mídia são entregues fora da banda, isto é, usando um protocolo separado, como o RTP. Em uma aplicação típica de streaming, o cliente primeiro obterá um arquivo de apresentação de descrição (por exemplo, através da web usando HTTP) - ver a gura 2.4. Esse arquivo descreve uma ou mais apresentações, cada uma composta de um ou mais uxos de mídia sincronizados. O arquivo de apresentação de descrição também contém propriedades dos uxos de mídia, como formato de codicação, para possibilitar que o cliente selecione e prepare a reprodução da mídia. Cada uxo de mídia controlável é identicado por um URL RTSP separado, que é similar ao URL HTTP que identica o servidor que está hospedando o uxo de mídia e o caminho lógico identicando o uxo CAPÍTULO 2. STREAMING 11 de mídia. Figura 2.4: Diagrama de tempo em uma transmissão RTSP. 2.4.2 RTP O RTP foi projetado para transportar dados em aplicações de tempo real como áudio e videoconferências. O protocolo foi projetado para ser independente do protocolo da camada inferior, o qual basicamente transporta os pacotes RTP. Na Internet, os pacotes RTP são freqüentemente transportados sobre datagramas UDP, que provêem multiplexação de uxos RTP no mesmo host (usando diferentes números de portas UDP para diferentes uxos). O RTP também suporta transporte de dados sobre redes e unicast multicast. Um protocolo de controle - RTP Control Protocol (RTCP) - é denido como parte do padrão para prover funções de controle como sincronização, relatório de estatísticas de recepção, monitoramento de participantes, entre outros. Vale notar que RTP/RTCP sozinhos não provêem controle de qualidade de serviço/garantia ou realizam alocação de recursos de rede. Os protocolos foram projetados para dar o arcabouço necessário, como os campos de cabeçalho (números seqüenciais, CAPÍTULO 2. STREAMING identicação de payload, etc.) no RTCP, para os desenvolvedores implementarem seus 12 próprios mecanismos de qualidade de serviço, que provavelmente são especícos da rede e da aplicação em questão. Comumente os protocolos RTP/RTCP são extendidos e integrados às aplicações ao invés de existirem como protocolos de transporte de propósito geral como o UDP e o TCP. Capítulo 3 Multicast na Camada de Aplicação A maioria das redes de computadores, visando a diminuição da complexidade de projeto, é estruturada de modo a possuir várias camadas ou níveis [Tanenbaum, 2003] com funções bem denidas. O modelo de referência que indica a hierarquia de protocolos da Internet é o TCP/IP (vide gura 3.1). As funções da camada Internet ou inter-redes, implementadas através dos protocolos IP, Internet Group Management Protocol (IGMP) e Internet Control Message Protocol (ICMP), são endereçamento, roteamento, controle de envio e recepção. Contudo, as transmissões do tipo um-para-muitos ou camada inter-redes não é sucientemente habilitada na multicast através da Internet devido a vários motivos [Diot et al., 2000]. Assim, muitas pesquisas estão voltadas para a implementação dessa funcionalidade na camada de aplicação, chamando-se essa alternativa de multicast na camada de aplicação - ALM. Em [Lao et al., 2005] encontra-se uma discussão sobre em que camada a função de multicast deve ser implementada. Figura 3.1: Modelo de Referência TCP/IP. Há uma série de vantagens em realizar esse serviço nos 13 hosts nais ao invés de CAPÍTULO 3. nos roteadores. MULTICAST NA CAMADA DE APLICAÇÃO 14 Entre elas estão a utilização da capacidade de processamento e de armazenamento muito maiores. Outro fator signicativo é que, de acordo com os argumentos de sistemas m-a-m [Saltzer et al., 1984], funcionalidades mais complexas devem ser implementadas em camadas superiores. Isso se justica porque são mais difíceis de serem feitas em camadas mais baixas, e serviços complexos implementados em camadas inferiores e usados por poucas aplicações trazem queda de desempenho, até naquelas que não usam o serviço. Muitas são as propostas para esse tipo de protocolo [Francis, 2000], [Pendarakis et al., 2001], [Zhang et al., 2002], [Banerjee et al., 2002], [Castro et al., 2002b], [Zhuang et al., 2001], [Ratnasamy et al., 2001] e [Chu et al., 2000]. 3.1 Alguns Protocolos de ALM As propostas de ALM até hoje implementadas caracterizam-se por organizar os membros dos grupos em duas topologias: topologia de controle e topologia de dados. A topologia de controle trata de reparar as partições de grupo que acontecem de modo "ingrato"(quando um nó sai de um grupo sem informar através de mensagens de controle). Já a topologia de dados indica o caminho e todas as questões acerca de como um pacote sai do transmissor e chega a todos os componentes do grupo. Existem vários trabalhos no sentido de comparar os protocolos que implementam ALM [Li and Shin, 2002], [Banerjee and Bhattacharjee, 2002], [El-Sayed, 2004]. A classicação mais encontrada chama de árvore-primeiro as propostas que denem a topologia de dados antes da topologia de controle e malha-primeiro as que fazem o inverso. Ainda existem muitas abordagens alternativas às anteriores, chamadas implícitas. Além disso, na grande maioria dos protocolos ALM existe a gura chamada Rendezvous Point (RP) (que pode ser traduzido como "ponto de encontro"), cuja função normalmente é coordenar o mecanismo de entrada de novos nós no sistema. As árvores de distribuição utilizadas em algoritmos de multicast podem ser classicadas como • árvores compartilhadas: são aquelas em que qualquer nó pode enviar mensagens através com o objetivo de alcançar os outros nós. • árvores de fonte especíca: a árvore é formulada de modo que a raiz sempre CAPÍTULO 3. MULTICAST NA CAMADA DE APLICAÇÃO 15 seja a mesma, ou seja, os dados sempre partem de um dado nó e somente dele. Vamos considerar o seguinte exemplo, um grupo multicast com os nós X , Y e Z como receptores, sendo X e Z transmissores também. O painel 1 da gura 3.2 mostra como seria uma árvore compartilhada pelos membros do grupo. Já o painel 2, apresenta como seriam as duas árvores de fonte especíca para as transmissões tendo X e Z como transmissores. Figura 3.2: Tipos de árvores de distribuição. Nas próximas subseções são expostos alguns exemplos com uma breve descrição de seu funcionamento. E, no m desta seção, há uma breve comparação entre eles. 3.1.1 YOID O protocolo Yoid [Francis, 2000] cria, em primeiro lugar, a árvore de distribuição dos dados, exercendo controle direto sobre a escolha de membros vizinhos na árvore e grau de saída dos nós. Esse controle contrasta com a abordagem chamada de malha-primeiro, que possui um controle indireto sobre esses aspectos. Nos esquemas em que a topologia de dados é construída primeiro, é criada uma árvore compartilhada, e cada nó entrante deve procurar o seu pai dentre os nós já pertencentes à árvore. Cada nó da árvore tem um grau de saída limite que restringe o número de lhos que ele pode ter. No processo de entrada, o futuro membro do grupo consulta o RP e recebe em troca uma lista de participantes do grupo. Um componente do grupo é um possível pai caso ele 1. seja escolhido como pai por algum critério relevante, não cause a formação de um laço na árvore (isso se refere ao caso de um nó que está entrando novamente na árvore e já possui lhos); CAPÍTULO 3. MULTICAST NA CAMADA DE APLICAÇÃO 16 2. possa ter mais um lho sem exceder o seu limite de grau de saída. Se nenhum possível pai é obtido na lista, em [Francis, 2000] são mostradas algumas propostas para achar outro pai em potencial. No caso de serem encontrados mais de um pai em potencial, o melhor, segundo alguma métrica, será o escolhido. O Yoid é um conjunto de protocolos para distribuição de conteúdo muito geral. Por ser uma proposta tão abrangente e tentando resolver tantos aspectos, não há necessidade descrevê-lo por completo. Alguns autores [El-Sayed, 2004] chegam a armar que seu interesse é histórico. 3.1.2 HMTP Em [Zhang et al., 2002], é proposto o HMTP, um protocolo do tipo árvore-primeiro que se assemelha em alguns aspectos ao Yoid. A entrada de um nó na árvore compartilhada segue a seguinte sequência de passos: 1. Descobrir a raiz da árvore consultando o RP; 2. Começando pela raiz, percorrer cada nível da árvore procurando um possível pai que esteja próximo de si. Caso encontre um nó próximo mas que não seja um possível pai, passa ao próximo nível e continua a procurar. Esse processo faz com que a árvore de distribuição tenda a car balanceada por altura. Além disso, o atraso médio em relação à saída dos pacotes da raiz ca propenso a ser menor. A especicação indica que os participantes do grupo mantêm informações sobre os membros no caminho deles até a raiz. Dessa forma, periodicamente eles tentam achar um pai melhor na árvore, reiniciando o processo de entrada a partir de um nó aleatoriamente escolhido. O problema da formação de laços é tratado com um algoritmo distribuído de detecção de laços ao invés de evitá-los. Esse protocolo não cria explicitamente uma malha. Entretanto, de tempos em tempos, os componentes apanham informações sobre outros integrantes do grupo. Esse conhecimento diminui o problema do único ponto de falha causado pela necessidade do RP e ajuda a recuperação devido a partições. CAPÍTULO 3. 3.1.3 MULTICAST NA CAMADA DE APLICAÇÃO 17 ALMI Um protocolo totalmente centralizado proposto é o ALMI [Pendarakis et al., 2001]. Nesse protocolo, um programa executado em um lugar acessível por todos os membros grupo controla a sessão de multicast. Pode-se armar que o sistema é composto de um controlador de sessão e de múltiplos membros da sessão. Os participantes das seções são organizados em uma árvore compartilhada para a troca de dados, enquanto mensagens de controle são trocadas entre cada membro e o controlador da sessão. As árvores de distribuição são construídas pelo controlador, sendo elas formadas com base em medições feitas por alguns membros e enviadas ao controlador, como Round-Trip Time (RTT), por exemplo. 3.1.4 NICE O protocolo NICE [Banerjee et al., 2002] foi desenvolvido visando aplicações onde as transmissões de dados sejam com baixo consumo de largura de banda e para um grande conjunto de destinatários. A topologia de controle é constituída de maneria a tomar uma forma hierárquica, o que dene implicitamente o caminho de dados para um grupo de maneira escalável. A hierarquia é essencial para a escalabilidade, visto que os membros da camada mais baixa (a maioria dos membros) mantêm informações sobre o estado de um número constante de nós, e os das superiores, de O(logN ) membros. As informações sobre os nós vizinhos são detalhadas, enquanto as que dizem respeito aos outros nós do grupo são limitadas. A criação da hierarquia é feita atribuindo membros a diferentes camadas, conforme ilustrado na gura 3.3 [Banerjee et al., 2002]. Os nós de cada camada são divididos em clusters. Cada cluster tem um líder. Todos os nós pertencem à camada mais baixa, e os líderes pertencem também à camada imediatamente superior àquela onde ele é líder de um cluster. Essas denições fazem com que as topologias de dados em um cluster sejam sempre em estrela, criando um gargalo em uma aplicação que requer alta largura de banda. A localização dos nós dentro dos grupos da hierarquia é feita considerando como métrica de distância o atraso entre os hosts. Assim, os nós mais próximos se encontram MULTICAST NA CAMADA DE APLICAÇÃO CAPÍTULO 3. 18 Figura 3.3: Modelo de Camadas do NICE. na mesma parte da hierarquia, fazendo com que as árvores de distribuição tenham um menor atraso médio. 3.1.5 Bayeux O esquema de multicast na camada de aplicação chamado Bayeux [Zhuang et al., 2001] é estruturado em cima de um sistema de busca para redes P2P chamado Tapestry. O roteamento de mensagens é todo feito pelo sistema Tapestry. Portanto, são utilizados os seus algoritmos. Cada nó possui um identicador e consigo uma tabela para mapeamento de mensagens baseada nos identicadores dos nós. Mesmo sem entrar em detalhes sobre a transmissão de uma mensagem, ca claro que uma mensagem destinada a um nó pode passar por uma série de nós que não estão interessados em recebê-la. Assim, para atividades que utilizam alta largura de banda, como 3.1.6 streaming, esse sistema é inadequado. CAN-Multicast Conforme o mostrado em [Ratnasamy et al., 2000], uma rede endereçável por conteúdo (CAN) é uma rede overlay que implementa uma tabela de hash distribuída sobre uma rede geogracamente distribuída, como a Internet. O CAN baseia-se na construção de um espaço n-dimensional, onde cada host toma conta de uma porção de mesma dimensão. Para exemplicar, consideremos um exemplo bidimensional no painel 0 da gura 3.4, retirada de [Li and Shin, 2002]. Em [Ratnasamy et al., 2001] é formulada uma proposta de ALM usando a estrutura do CAN. A topologia de dados é formada intuitivamente de acordo com a localização CAPÍTULO 3. MULTICAST NA CAMADA DE APLICAÇÃO 19 Figura 3.4: Estrutura de um CAN. dos nós no sistema de coordenadas, conforme é exposto no painel 1 da gura 3.4, ou seja, cada nó é responsável por distribuir mensagens para os seus vizinhos. As duplicações de pacotes são evitadas com uma cache de pacotes já enviados. O procedimento de entrada é ilustrado nos painéis 2 e 3 da gura 3.4. O nó Z (nó que deseja entrar no CAN) consulta o RP para achar pelo menos um nó que já é membro (nó Y). O nó Z procura um ponto aleatório no espaço de coordenadas através do nó X. O dono desse espaço (nó Y) divide-o em dois. Uma das metades passa a pertencer ao nó Y, e a outra, ao nó Z. 3.1.7 Narada Sendo um dos pioneiros na tarefa de realizar multicast nos hosts nais, o protocolo Narada [Chu et al., 2000] é um protocolo do tipo malha-primeiro. Quando um nó quer se tornar um membro da malha, ele obtém uma lista dos nós que já fazem parte da rede com o RP - que mantém informações sobre o estado de todos os membros que entraram no grupo. Então, o nó seleciona aleatoriamente um subconjunto desses nós e tenta se tornar vizinho deles, sendo bem sucedido quando pelo menos um o aceita como vizinho. Depois de começar a fazer parte da malha, o membros passam a trocar mensagens de manutenção e atualização. Quando um membro entra ou sai do grupo, a informação é propagada ao longo da malha. Assim, cada membro possui informações sobre todos aqueles que compõem o grupo. O número de mensagens de controle é dado por uma função que pertence a O(N 2 ), onde N é o número de participantes do grupo. Isso faz com que o protocolo Narada seja pouco eciente para grupos grandes. Para a construção da árvore de abrangência ao longo do grafo, os hosts executam um CAPÍTULO 3. MULTICAST NA CAMADA DE APLICAÇÃO protocolo de roteamento achando os caminhos 20 unicast. Assim, o caminho de entrega de dados e sua qualidade dependem da qualidade das arestas (links) da malha. 3.2 Comparação entre os Protocolos Apresentados A respeito dos protocolos brevemente discutidos, foi formulada a tabela 3.2. A tabela mostra alguns quesitos relevantes no que se refere a protocolos de multicast na camada de aplicação, e principalmente ao tratado neste trabalho. Protocolo Tipo Árvore Comp. do Grau de Saída Caminho Máximo ALMI centralizado compartilhada ilimitado limitado NARADA malha-primeiro fonte especíca ilimitado ilimitado Bayeux malha-primeiro fonte especíca O(logN ) O(logN ) CAN-Multicast malha-primeiro fonte especíca O(dN1/d ) constante HMTP/Yoid árvore-primeiro compartilhada ilimitado O(maxgrau) NICE árvore-primeiro fonte especíca O(logN ) O(logN ) Tabela 3.1: Comparação entre protocolos de ALM. Alguns dos protocolos acima citados não satisfazem os requisitos para realizar tarefas de grande consumo de largura de banda. Porém, isso é evidente, tendo em vista que muitos deles não foram projetados visando tal atividade. De acordo com as características de cada um deles, pode-se decidir se ele é apropriado ou não para determinada tarefa. Entretando, apesar do protocolo HMTP ser de árvore compartilhada, o que não é um fator desejado em um sistema de streaming com uma fonte especíca, fazendo da raiz a única fonte de dados, ele se mostra mais eciente que os demais citados em uma série de características [Proença, 2006]. O controle do grau de saída dos nós e do mecanismo de entrada na árvore de distribuição é fator indispensável para o tipo de aplicação tratado nesse trabalho. Capítulo 4 O Protótipo Levando em consideração as pesquisas realizadas, propõe-se uma solução para o problema de realizar streaming sobre uma rede overlay usando um protocolo ALM. Além de criar uma solução que combina uma série de técnicas, foi projetado um protótipo que traz à tona questões de implementação de um sistema distribuído e demonstra satisfatoriamente a funcionalidade deste tipo de aplicação. O presente capítulo discorre a respeito da proposta e de sua materialização através da elaboração de um sistema distribuído. Também são discutidos alguns trabalhos de cunho semelhante ao abordado neste documento. 4.1 Descrição da Proposta As idéias principais da proposta são a solução de forma descentralizada de algumas questões e a utilização de tecnologias P2P presentes em redes de compartilhamento de arquivos. Os hosts do sistema utilizam uma rede P2P para buscar uxos que estejam disponíveis e participantes de alguma árvore de distribuição, de forma semelhante ao feito em [Jiang et al., 2003]. O sistema serve somente para a busca e registro dos uxos e participantes, respondendo assim pelas funções normalmente desempenhadas pelo RP, mas indo além ao publicar os uxos e servir como mecanismo de busca por estes. Em [Proença, 2006], é mostrado através de experimentos que o protocolo HMTP tem muitos aspectos positivos. Entretanto, o processo de entrada com busca de um pai próximo por nível é extremamente lento para grupos muito grandes. A construção da topologia 21 CAPÍTULO 4. 22 O PROTÓTIPO de dados proposta aqui é mais escalável, pois as medições de atraso são feitas para um número constante de hosts, só que não alcança necessariamente uma árvore tão boa como a referente a topologia de dados do HMTP. 4.1.1 Rede Sobreposta O sistema proposto é construído sobre uma rede sobreposta que possua pelo menos estas funcionalidades: inserção e remoção de registros (uxos publicados ou usuários que estão participando recebendo alguma transmissão) e busca de ambos tipos de registro. Toda a formulação é feita independente de como essa camada de software é implementada. Os registros são dos formatos expostos na gura 4.1. O painel 1 da gura mostra os registros referentes aos uxos, sendo ele composto por uma cadeia de caracteres identicando o uxo, um identicador global e um registro de usuário referente à raiz da árvore. Aquele tipo de registro referente a usuário que não é raiz, mostrado no painel 2, tem um campo com o identicador do uxo ao qual ele pertence, o nível da árvore ao qual ele pertence, o número de uxos que ele ainda está disposto a prover, e outro com seu endereço IP e uma porta para ser usada na topologia de controle. Figura 4.1: Tipos de registros empregados no sistema. 4.1.2 Topologia de Controle Esta parte do programa cuida das questões de manutenção e recuperação da estrutura que torna o processo de streaming possível. Dentre as funções desempenhadas aqui, podese mencionar a recuperação da árvore quando um nó sai do sistema, detecção de falhas CAPÍTULO 4. 23 O PROTÓTIPO de participantes do sistema e descobrimento de laços na árvore quando um host entra novamente no sistema. Descobrimento de Falhas Os nós considerados vizinhos são o pai e os lhos de cada nó, ou seja, cada nó tem informações somente sobre esses nós. Para detectar falhas, os vizinhos trocam mensagens conhecidas como "batidas de coração", que servem somente para vericar o estado dos vizinhos. Eventualmente, se algum nó não estiver respondendo, seu registro é removido do banco de registros, para manter a consistência. Esse mecanismo poderia não ser necessário, no caso das transmissões serem orientadas a conexões, pois assim as falhas provavelmente seriam detectadas no nível de transporte. Porém, podem existir casos em que falhas não sejam descobertas assim. Uma grande parte da árvore pode falhar ou sair de maneira ingrata (sem executar os procedimentos necessários) simultaneamente, por exemplo. Para esses casos, quando um nó tenta conectar-se a ele e não consegue, no processo de entrada, ele pode informar ao sistema que cuida dos registros a falha do membro que estava inacessível. Detecção de Laços Escolheu-se não realizar a prevenção de formação de laços. Assim, periodicamente e sempre que algum nó entra no sistema pela segunda vez possuindo algum lho, é efetuada a vericação dos caminhos da árvore. A vericação é feita enviando-se uma mensagem com um número aleatório ao longo da árvore. Quando essa mensagem passa pelos nós eles a armazenam em uma tabela por um certo tempo e sempre antes de armazenar eles vericam se já não a tinham recebido. No caso de possuírem esse número na tabela, eles param de propagar a mensagem e repetem o processo de entrada. Nas vericações periódicas, essa mensagem parte da raiz da árvore e, quando é feita a vericação por reinserção na árvore, parte do nó entrante. CAPÍTULO 4. 4.1.3 24 O PROTÓTIPO Topologia de Dados O processo de entrada na árvore de distribuição é feito após pesquisas na rede sobreposta. Para melhor compreensão, o algoritmo de entrada é exibido a seguir como uma seqüência de passos. 1. O nó entrante realiza uma consulta para descobrir o identicador global do uxo ao qual ele pretende participar; 2. A partir deste identicador, ele obtém uma lista dos k membros mais altos da árvore e os ordena de acordo com a sua altura na árvore; 3. Seguindo essa ordem, são feitas medições de atraso m a m; 4. Caso seja vericado um valor de atraso em relação a algum host abaixo de uma constante determinada previamente, esse é escolhido como pai; 5. Se dentre os k nós da lista obtida nenhum tiver um atraso menor do que o valor estabelecido, o mais próximo, segundo essa métrica, é selecionado como pai; 6. No caso da tentativa de entrada falhar (por uma inconsistência nos registros, por exemplo) , o processo se repete. Vamos considerar o exemplo a seguir (gura 4.2), onde o nó Z quer entrar na árvore (painel 1). Primeiro ele resgata uma lista com os quatro nós mais altos da árvore com uxos disponíveis (C , D, E e X ), mostrado no painel 2, e realiza medições de atraso com eles (painel 3). O nó X é o escolhido por ter um atraso em relação a Z menor do que os outros. Finalmente, o nó Z tenta se tornar lho do nó X e obtém sucesso (painel 4). Diferente do HMTP, o algoritmo de entrada não é executado periodicamente para melhorar as qualidades da árvore. Em uma transmissão de uxo, isso poderia acarretar em perda na qualidade da reprodução. Desse modo, esse novo chamamento da função de entrada só é feito no caso de falha ou saída do nó pai, ou de algum nó no caminho até a raiz da árvore de distribuição. CAPÍTULO 4. 25 O PROTÓTIPO Figura 4.2: Exemplo do processo de entrada. 4.2 Implementação do Sistema A implementação da proposta para o cliente pode ser apresentada por um diagrama em camadas, ilustrado na gura 4.3. Na gura, o nome "Mecanismo de Busca"se refere à escolha feita para juntar as informações a respeito dos nós e recuperá-las. Para a camada mais inferior, que dá suporte às buscas descentralizadas, existem muitos arcabouços disponibilizados para realizar essas funções sem se preocupar com os detalhes de sua programação. Dentre vários, podemos citar como relevantes [Francesquini and Reverbel, 2007]: • JXTA [Gong, 2002]: O projeto JXTA é uma estrutura criada para suportar aplicações P2P usando Java. Compõe-se de um conjunto de protocolos abertos que habilitam dispositivos conectados para se comunicar e colaborar. Promete realizar buscas de hosts e recursos em redes diferentes e prover comunicação segura entre eles. • FreePastry [Castro et al., 2002a]: trata-se de uma implementação livre do sistema Pastry [Rowstron and Druschel, 2001] com a intenção de disponibilizar CAPÍTULO 4. 26 O PROTÓTIPO Figura 4.3: Camadas do sistema implementado. aplicações na Internet. O Pastry foi desenvolvido para trazer um esquema de busca distribuída de objetos escalável para sistemas P2P. • Bamboo [Bamboo, 2008]: é uma estrutura para construção de aplicações P2P que utiliza tabelas de hash distribuídas para tratar inserção, remoção e recuperação de pares chave-valor. As tabelas de hash desse tipo mapeiam colaborativamente pares chave-valor. A tabela 4.2, retirada de [Francesquini and Reverbel, 2007], visa mostrar os recursos que essas estruturas de programação oferecem. JXTA FreePastry Bamboo Troca de Mensagens • • • Busca Exata • • • Busca Aproximada • Comunicação em Grupo • • • Armazenamento Distribuído • • • Autenticação de Usuários • • Tabela 4.1: Comparação entre arcabouços para programação P2P. Apesar da utilização desses sistemas ser viável, resolveu-se implementar o arcabouço por questões de aprendizado. Fez-se um mecanismo de indexação central no estilo daquele CAPÍTULO 4. O PROTÓTIPO 27 envolvido no pioneiro Napster [Yang and Garcia-Molina, 2001]. Os algoritmos que concebem a topologia de controle, assim como o mecanismo de busca, foram desenvolvidos utilizando programação de Sockets em Java. Para todo o desenvolvimento que lidou com mídia, foi utilizado um Application Program Interface (API) chamado Java Media Framework (JMF). Esse API foi desenvolvido pela Sun MicroSystems em conjunto com a IBM para conceder muitas funções relativas a áudio e vídeo [Microsystems, 2008]. Entre essas funções estão codicação, decodicação, transcodicação, multiplexação, demultiplexação, captação dos dados de dispositivos e serviços de streaming. A topologia de dados foi desenvolvida a partir das funções do JMF que implementam o protocolo RTP. As simulações foram feitas somente com arquivos de áudio sendo transmitidos. No entanto, o sistema foi desenvolvido de forma que, com poucas modicações, as transmissões possam envolver mais de um uxo, como uma transmissão de um vídeo que utiliza normalmente um canal de vídeo e um de áudio. Essa mudança, assim como a mudança do sistema de busca, é facilmente realizável devido à construção em camadas e utilizando uma abordagem orientada a objetos. Além disso, utilizar Java tornou o sistema multi-plataforma, bastando a instalação do Java Runtime Environment (JRE) e JMF para o sistema operacional desejado. 4.3 Funcionamento do Protótipo Visando demonstrar as funcionalidades implementadas, nesta seção é exibida a interface gráca (ilustrada na gura 4.4) e são explicadas as funções desempenhadas pelos componentes grácos. A seguir, são descritas as funções dos botões. • Buscar: Faz uma busca no sistema P2P e exibe o resultado na tabela para que o usuário possa selecioná-lo a m de participar da transmissão. • Participar: Esse botão faz com que o usuário execute o procedimento de entrada na árvore de distribuição do uxo selecionado. • Deixar Grupo: Realiza o procedimento de saída do grupo. Fazendo com que seus lhos tenham de chamar novamente o procedimento de entrada. CAPÍTULO 4. • O PROTÓTIPO Iniciar Transmissão: 28 Com este botão é possível cadastrar um uxo no sistema. Esse uxo pode ser tanto um arquivo de áudio com uma codicação suportada pelo JMF instalado na máquina, quanto a captação de um microfone. Figura 4.4: Tela principal do protótipo. 4.4 Experimentos Com a intenção de testar e analisar o funcionamento do protótipo, foram feitos alguns experimentos. Para executar os experimentos, utilizou-se dois ambientes: um envolvendo cinco computadores em uma Local Area Network (LAN) e outro com três computadores conectados através da Internet, cada um com capacidades de acesso diferentes em relação à largura de banda. Nos dois ambientes, o protótipo funcionou sem trazer perdas na qualidade do áudio recebido, usando-se diferentes congurações nas árvores de distribuição. Os algoritmos de controle foram testados separadamente. Assim, puderam ser feitos testes com várias instâncias de um programa no mesmo computador. Isso pode ser feito pois a topologia de controle não depende muito das questões relacionadas ao atraso e à largura de banda, que devem ser levados em consideração nos testes relacionados à topologia de dados. Os resultados foram satisfatórios quanto a recuperação de falhas e na detecção de laços. CAPÍTULO 4. 4.5 29 O PROTÓTIPO Trabalhos Completos Existe uma série de trabalhos relacionados a streaming sobre redes P2P. Dentre as várias características de cada um, pode-se fazer a seguinte classicação simples em três grupos [Pianese et al., 2006]. • Estruturados: Nesses sistemas, os nós são organizados seguindo a forma de uma árvore hierárquica para formar a rede sobreposta. Cada nó recebe todos os dados do uxo de seu pai e transmite para seus lhos. As diferenças desse tipo de sistema está no jeito em que se organizam e nos algoritmos usados para criar e reparar a estrutura de funcionamento. Pode-se citar como deste grupo Spreadit [Deshpande et al., 2002], Peercast [Deshpande et al., 2001], ESM [Chu et al., 2003] e ZigZag [Tran et al., 2003]. • Não estruturados: Aqui as associações entre os nós são direcionadas pelos dados que eles receberam previamente. O uxo é dividido em partes que são dispostas aos nós. Os nós requisitam independentemente as partes que eles precisam para completar o uxo. Um sistema que adota esse mecanismo de trocas de dados em uma malha dinâmica é o CoolStreaming [Zhang et al., 2005]. • Outros: Tais sistemas não podem ser classicados como nenhum dos grupos anteriores. Um exemplo é o SplitStream [Castro et al., 2003] que combina técnicas de codicação com múltiplas redes sobrepostas, dividindo o uxo e distribuindo-o através de duas árvores disjuntas. Capítulo 5 Conclusão A facilidade na publicação de uxos de mídia na Internet é um problema que ainda está para ser resolvido. Esta proposta visa utilizar o potencial dos hosts para tornar possível esse serviço. O problema abordado aqui é um tópico de extensiva pesquisa, principalmente por causa do sucesso dos sistemas de compartilhamento de arquivos, que hoje em dia compreendem uma boa parcela de todo o tráfego da Internet. Apesar de existirem alguns programas que se propõem a disponibilizar a distribuição de uxos através de sistemas P2P, ainda não existem propostas globalmente aceitas nem largamente utilizadas. Já as transmissões de canais de rádio e televisão através de servidores dedicados com múltiplos canais unicast são uma realidade. Grandes empresas pagam quantias consideráveis para garantir esses serviços, o que com bem menos investimento em um sistema distribuído traria uma grande economia [Hefeeda et al., 2002]. Alguns ISPs provêem multicast IP, porém ele ca limitado a algumas áreas onde o serviço é habilitado nos roteadores. Ao longo do texto foram mostradas as questões de projeto envolvidas a respeito do problema de fornecer a funcionalidade de multicast visando realizar streaming sobre redes overlay. Este trabalho, assim como alguns outros, demonstrou que essa tarefa, apesar de ser complicada, pode ser resolvida de várias maneiras, inclusive como aqui apresentado. A proposta atinge o objetivo de descentralização, por eliminar a gura do RP, e é de fácil disponibilização por poder funcionar no topo de muitos sistemas de compartilhamento de arquivos, estendendo suas funcionalidades. Desse modo, aplicações de distribuição de vídeo e áudio síncrona de maneira escalável e de livre utilização podem ser largamente 30 CAPÍTULO 5. CONCLUSÃO disponibilizadas na Internet. 31 Bibliograa [Abad et al., 2004] Abad, C., Yurcik, W., and Campbell, R. (2004). A survey and comparison of end-system overlay multicast solutions suitable for network centric warfare. [Bamboo, 2008] Bamboo (2008). The bamboo distributed hash table. [Banerjee and Bhattacharjee, 2002] Banerjee, S. and Bhattacharjee, B. (2002). A comparative study of application layer multicast protocols. [Banerjee et al., 2002] Banerjee, S., Bhattacharjee, B., and Kommareddy, C. (2002). Scalable application layer multicast. [Castro et al., 2002a] Castro, M., Druschel, P., Hu, Y. C., and Rowstron, A. (2002a). Exploiting network proximity in peer-to-peer overlay networks. Technical Report MSRRT-2002-82, Microsoft Research. [Castro et al., 2003] Castro, M., Druschel, P., Kermarrec, A., Nandi, A., Rowstron, A., and Singh, A. (2003). Splitstream: High-bandwidth multicast in cooperative environments. [Castro et al., 2002b] Castro, M., Druschel, P., Kermarrec, A., and Rowstron, A. (2002b). SCRIBE: A large-scale and decentralized application-level multicast infrastructure. IEEE Journal on Selected Areas in communications (JSAC), 20(8):14891499. [Chu et al., 2003] Chu, Y., Ganjam, A., Ng, T., Rao, S., Sripanidkulchai, K., Zhan, J., and Zhang, H. (2003). Early experience with an internet broadcast system based on overlay multicast. 32 33 BIBLIOGRAFIA [Chu et al., 2000] Chu, Y.-H., Rao, S. G., and Zhang, H. (2000). A case for end system multicast. In Measurement and Modeling of Computer Systems, pages 112. [Deshpande et al., 2002] Deshpande, H., Bawa, M., and Garcia-Molina, H. (2002). Streaming live media over a peer-to-peer network. [Deshpande et al., 2001] Deshpande, H., Bawa, M., and Molina, G. H. (2001). Streaming live media over peers. Technical Report 2001-31, Computer Science Department, Stanford University. [Diot et al., 2000] Diot, C., Levine, B. N., Lyles, B., Kassem, H., and Balensiefen, D. (2000). Deployment issues for the IP multicast service and architecture. IEEE Network, 14(1):7888. [El-Sayed, 2004] El-Sayed, A. (2004). Application-level multicast transmission techniques over the internet. [Francesquini and Reverbel, 2007] Francesquini, E. and Reverbel, F. (2007). Hermes: Um Arcabouço para Programação de Aplicações P2P. [Francis, 2000] Francis, P. (2000). Yoid: Extending the internet multicast architecture. [Gong, 2002] Gong, L. (2002). Project jxta: A technology overview. [Hefeeda et al., 2002] Hefeeda, M., Habib, A., and Bhargava, B. (2002). Cost-prot analysis of a peer-to-peer media streaming architecture. [J. Youn and Sun, 2000] J. Youn, J. X. and Sun, M.-T. (2000). Fast video transcoding architectures for networked multimedia applications. Proc. IEEE Int. Symp. Circuits and Systems (ISCAS'00). [Jiang et al., 2003] Jiang, X., Dong, Y., Xu, D., and Bhargava, B. (2003). Gnustream: A p2p media streaming system prototype. [Lao et al., 2005] Lao, L., Cui, J.-H., Gerla, M., and Maggiorini, D. (2005). A comparative study of multicast protocols: Top, bottom, or in the middle? 34 BIBLIOGRAFIA [Lee, 2005] Lee, J. Y. B. (2005). Scalable Continuous Media Streaming Systems. John Wiley & Sons Ltd. [Li and Shin, 2002] Li, Z. and Shin, Y. (2002). Survey of overlay multicast technology. [Marchese, 2007] Marchese, M. (2007). QoS Over Heterogeneous Networks. John Wiley & Sons Ltd. [Microsystems, 2008] Microsystems, S. (2008). http://java.sun.com/products/java- media/jmf/. [Pendarakis et al., 2001] Pendarakis, D., Shi, S., Verma, D., and Waldvogel, M. (2001). ALMI: An application level multicast infrastructure. In Proceedings of the 3rd USENIX Symposium on Internet Technologies and Systems (USITS), pages 4960. [Pianese et al., 2006] Pianese, F., Keller, J., and Biersack, E. W. (2006). Pulse, a exible p2p live streaming system. In INFOCOM. IEEE. [Proença, 2006] Proença, T. S. (2006). Proposta e avaliação de uma arquitetura escalável para distribuição de tv na internet. [Ratnasamy et al., 2000] Ratnasamy, S., Francis, P., Handley, M., Karp, R., and Shenker, S. (2000). A scalable content addressable network. Technical Report TR-00-010, Berkeley, CA. [Ratnasamy et al., 2001] Ratnasamy, S., Handley, M., Karp, R., and Shenker, S. (2001). Application-level multicast using content-addressable networks. Lecture Notes in Computer Science, 2233:14. [Rowstron and Druschel, 2001] Rowstron, A. and Druschel, P. (2001). Pastry: Scalable, decentralized object location, and routing for large-scale peer-to-peer systems. Lecture Notes in Computer Science, 2218:329. [Saltzer et al., 1984] Saltzer, J. H., Reed, D. P., and Clark, D. D. (1984). End-to-end arguments in system design. ACM Transactions on Computer Systems, 2(4):277288. [Tanenbaum, 2003] Tanenbaum, A. S. (2003). Computer Networks. Prentice Hall. 35 BIBLIOGRAFIA [Tran et al., 2003] Tran, D. A., Hua, K., and Do, T. (2003). A peer-to-peer architecture for media streaming. [Yang and Garcia-Molina, 2001] Yang, B. and Garcia-Molina, H. (2001). hybrid peer-to-peer systems. In Comparing The VLDB Journal, pages 561570. [Youtube, 2008] Youtube (2008). www.youtube.com. [Zhang et al., 2002] Zhang, B., Jamin, S., and Zhang, L. (2002). Host multicast: A framework for delivering multicast to end users. [Zhang et al., 2005] Zhang, Coolstreaming/donet: X., Liu, J., Li, B., and Yum, T.-S. P. (2005). A data-driven overlay network for peer-to-peer live media streaming. [Zhuang et al., 2001] Zhuang, S. Q., Zhao, B. Y., Joseph, A. D., Katz, R. H., and Kubiatowicz, J. D. (2001). Bayeux: An architecture for scalable and fault-tolerant wide-area data dissemination. In Proceedings of NOSSDAV.