Multicast



Após o fim do trabalho com o Napster, eu e o Fabrício passamos a estudar o Multicast e suas aplicações. No protocolo IP há três maneiras de se enviar um pacote:

Estudamos como os pacotes multicast são roteados, e os principais protocolos de roteamento, PIM e DVMRP. Não entrarei em detalhes sobre o funcionamento deles, o que pode ser visto aqui. Ambos os protocolos utilizam túneis IP para o transporte entre roteadores não multicast, isto é, quando o pacote chega em um roteador multicast ele descobre qual o próximo roteador multicast onde o pacote deve chegar, coloca um cabeçalho IP "ao redor" do pacote, com endereço destino sendo o IP do próximo roteador multicast, e o envia como se fosse um pacote IP normal. Quando o pacote chega no roteador multicast seguinte o processo se repete, até chegar ao destino.

Conhecido o funcionamento dos protocolos, começamos a pesquisar aplicações que utilizam o multicast. Sua principal aplicação é videoconferência, e era exatamente o uso que queríamos fazer do multicast. Os principais aplicativos são:

Existem outros aplicativos que podem ser utilizados em conjunto com o sdr, como o wb - Whiteboard Tool, um quadro branco onde pode-se fazer desenhos, mas que não foi testado por nós.

O passo seguinte foi a criação de uma página web com instruções de como instalar e configurar esses aplicativos nas diversas plataformas onde realizamos testes: Windows, Linux, FreeBSD e Solaris. Em todas elas o processo é bastante simples.

Também fizemos uma página informando como instalar e configurar o mrouted, o roteador multicast. Ele é um programa que roda em Unix, e utiliza o protocolo DVMRP. Uma vez que ele esteja rodando em uma máquina, todas as outras da mesma rede têm acesso ao multicast.
O mrouted é configurado criando-se os túneis com outros roteadores, permitindo a conexão de várias redes distintas.
Nos testes feitos, tentamos configurá-lo em Linux e em FreeBSD. No FreeBSD não houve nenhum problema, visto que o mrouted foi feito primeiramente para essa plataforma. Com o Linux, tivemos diversos problemas de compilação, porque o roteamento precisa ser ativado no kernel, não sendo padrão. Conseguimos compilar, mas mesmo assim ele não rodava.
Alguns meses depois, tentamos novamente, utilizando agora o kernel 2.4 do linux. Continuamos tendo alguns problemas para compilar, mas acabou funcionando, e agora temos uma máquina com linux rodando o mrouted (mas o nosso roteador principal roda FreeBSD).