Membros do grupo
- Fernando Dettoni
- João Paulo Flor
- Rita Soldi
O Problema
O problema consiste em desenvolver uma versão do Real-time Transport Protocol (RTP), que utilize como protocolos subjacentes o UDP e o TCP de janela 0. O RTP é o padrão mais comum para a transferência de dados multimídia em redes IP, e possui suporte à correção de jitter e à distribuição multicast. Ele é utilizado, por exemplo, em aplicações de streaming de áudio/vídeo, voz sobre ip, entre outras.
O RTP é usado em conjunto com um segundo protocolo, o RTCP (Real-Time Control Protocol). Enquanto o RTP em si é responsável pelo transporte dos dados com características de tempo real, o RTCP monitora a qualidade de serviço e
fornece informações de temporização para os participantes.

Metas
Implementar o protocolo RTP como componente do sistema operacional EPOS--, utilizando como protocolos subjacentes o UDP e o TCP com janela 0. A implementação desenvolvida deve ser capaz de suportar a execução de algum tipo de aplicação normalmente associado ao RTP, como streaming de áudio/vídeo e telefonia.
RTP - Real-Time Transport Protocol
- Sessão RTP: consiste de um grupo de participantes que se comunicam utilizando RTP. Para cada participante, a sessão é identificada por um endereço de rede e um par de portas para que os dados devem ser enviados e um par de porta na qual os dados são recebido. (As portas de envio e recepção podem ser a mesma).
Cada par de portas é composto por duas potas adjacentes: um número par para a porta dos pacotes de dados RTP, e ímpar (imediatamente superior) para pacotes de controle RTCP.
A sessão pode ser:
- unicast : entre dois participantes ou entre um participante e um servidor central que redistribui os dados
- multicast : entre um grupo de participantes.
* A implementação realizada foi simplificada para ser unicast.
- Pacote RTP :

V = Version Number, P = Padding, X = Extensions, CC = Count of Contributing Sources, M = Maker, PT = Payload Type
* Houve também a simplificação do header do pacote RTP quanto ao Header Extensions, que é raramente utilizado e só é necessário quando se deseja incluir informações extras no header. Outra modificação foi a exclusão da lista de contributing sources (CSRC), pois a sessão unicast recebe dados somente de uma fonte, não necessitando deste campo.
- Validação do Pacote RTP : Como as sessões RTP normalmente usam um par de portas negociadas dinamicamente, é importante validar os pacotes recebidos para saber se são realmente RTP, extravio ou outros dados quaisquer. Existem dois tipos de testes que podem ser realizados:
- Por verificação de pacotes : verificação com base em valores fixos conhecidos dos campos do cabeçalho. Ex: version number diferente de 2 caracteriza um pacote inválido.
- Por verificação de fluxo : verificação com base em padrões nos campos de cabeçalho. Por exemplo, se o SSRC é constante, e o sequence number incrementa a cada pacote recebido, e o timestamp é apropriado para o payload type, este é certamente um fluxo RTP e não um fluxo de extravio.
RTCP - Real-Time Transport Control Protocol
- Sessão : Todos os participantes da sessão devem enviar pacotes composição-RTCP e, por sua vez, receberão os pacotes composição-RTCP enviados por cada um dos outros participantes. Ex.: qualidade de recepção.
- Pacote RTCP :

V = Version Number, P = Padding, IC = Item Count, PT = Payload Type
Pacotes RTCP nunca são transportados individualmente, em vez disso eles são sempre agrupadas para transmissão, formando composições RTP. Segue abaixo sua estrutura:

O formato do pacote de dados vai depender do tipo de dado que será enviado. São cinco tipos padrão de pacotes RTCP:
- RTCP RR: Receiver Reports (contém a fonte de sincronização do participante que está a enviar o relatório)
- RTCP SR: Sender Reports (informações sobre a mídia a ser enviada, para sincronização)
- RTCP SDES: Source Description(retira informações da fonte, como nome, email, etc.)
- RTCP BYE: Membership Control (fontes deixaraa a sessão - ignorar todos os pacotes RTP e RTCP que vierem depois disso)
- RTCP APP: Application-Defined RTCP Packets (criar extensões ao padrão RTCP)
- Validação do Pacote RTCP : Algumas regras que devem ser garantidas para a validação do pacote RTCP são:
- Todos os pacotes devem ser do tipo composição-RTCP;
- Campo version deve ser igual a dois;
- O campo tipo do primeiro pacote RTCP deve ser do tipo RR ou SR
- Se for necessário padding, ele deve ser colocado apenas no ultimo pacote. Para todos os outros deve ser zero.
- O campo comprimento dos pacotes individuais devem, no total, o tamanho da composição-RTCP.
Conclusão
O protocolo RTP é importante para a transmissão de mídia e largamente aplicado, devido à sua flexibilidade. Tais características tornam a sua adaptação aos sistemas embarcados uma tarefa complexa.
Fixamos diversos parâmetros e simplificamos a implementação em vários aspectos para atender às limitações do hardware, mas com isso perdemos a abrangência do protocolo.
A nossa ideia principal era realizar a transferência de dados de um servidor para um receptor, o que só foi alcançado perto do prazo de entrega do projeto. Então apesar do RTCP ser essencial para melhorar a performance da transferência, se não houver dados trafegando na rede não há porquê utilizar um protocolo de controle. Este é o motivo pelo qual priorizamos a implementação do RTP sobre o RTCP.
A implementação do projeto nos possibilitou aperfeiçoar os conhecimentos sobre rede de computadores e nos incentivou a entrar em contato com normas, como a RFC3550. Pudemos também praticar a programação na linguagem C++ (que não é muito abordada no curso) e revisar os conceitos de sistemas operacionais.
Aplicações de teste
Código completo
Bibliografia
- RFC3550: "A Transport Protocol for Real-time Applications" - http://tools.ietf.org/html/rfc3550
- "Redes de Computadores - Uma abordagem de sistemas", PETERSON, Larry L., DAVIE, Bruce S.
- "Redes de Computadores" - 2ª ed., TANENBAUM, Andrew S.
- "RTP: Audio and Video for the Internet", Colin Perkins