Instituto Superior Técnico. Projecto VoIP. Sistema IVVR - PDF
Download "Instituto Superior Técnico. Projecto VoIP. Sistema IVVR"
Raul Salazar Fraga
1 Instituto Superior Técnico Projecto VoIP Sistema IVVR Rui Barradas Helton Miranda Ludijor Barros Bruna Gondin
2 Introdução O objectivo deste projecto é desenvolver um sistema de Interactive Video Voice Response (IVVR) baseado em voz sobre IP (Voice over IP VoIP) e compreender os protocolos utilizados. Os protocolos utilizados no desenvolvimento do projecto foram: SIP (usado para a sinalização), SDP (faz a descrição dos media trocados entre as duas partes), RTP (usado para a transferência de dados de tempo real), RTCP (baseado no envio periódico de pacotes de controlo a todos os participantes na sessão, que nesse caso é a chamada), e UDP (tem a função de transportar os pacotes, mas, como sabemos, o UDP não garante qualidade de serviço). Houve implementação prática do projecto e, para descrição, no relatório utilizou-se diagramas temporais e pilhas de protocolos a fim de melhor demonstrar o funcionamento do projecto implementado. Instalação do projecto Inicialmente foi preciso instalar o asterisk (PBX), e para tal utilizamos o seguinte comando na linha de comandos do Linux: sudo apt-get install asterisk. No entanto, esse comando instalou a versão 1.6 do asterisk, que teve alguns problemas com o vídeo. Por isso, para efeitos de testes mais precisos utilizamos o computador do laboratório (que já tinha o PBX instalado, na versão 1.4 do asterisk). De seguida, substituímos os ficheiros extensions.conf e sip.conf pelos que tínhamos criado, utilizando os seguintes comandos: mv extensions.conf /etc/asterisk/extensions.conf. mv sip.conf /etc/asterisk/sip.conf. Como podemos ver, os ficheiros extensions.conf e sip.conf foram os únicos ficheiros do asterisk que alteramos. Depois gravamos alguns ficheiros de som e de vídeo (utilizando o voic ) e adicionamos os mesmos à pasta sounds do asterisk fazendo: cd /var/spool/asterisk/voic /default/1234/inbox mv * /usr/share/asterisk/sounds/ Também instalamos as duas versões do X-Lite (3 e 4) e verificamos que para esta última o vídeo não funcionou.
3 Pilha de Protocolos Sinalização Para a sinalização, como já foi dito, é utilizado o protocolo SIP (Session Initiation Protocol) que permite gerir sessões entre um conjunto de participantes. Como sabemos, o protocolo SIP tem quatro tipos de servidores. Neste projecto utilizamos um servidor proxy que actua de forma semelhante a um servidor proxy na Web, ou seja, gere pedidos ou envia pedidos a outros servidores. Pode ser usado para reenvio de chamadas. A vantagem de utilizar o SIP na sinalização é que oferece grande flexibilidade em relação aos outros protocolos, uma vez que não se preocupa, por exemplo, nem com o tipo de media trocado durante a sessão (a chamada), nem com a forma como os mesmos são transportados. SIP (aplication layer) UDP (transport layer) IP (network layer) Ethernet (logical link layer) Transferências de fluxos de som e vídeo Para a transferência de fluxos de som e vídeo é utilizada o protocolo RTP e RTCP. O RTP providencia serviços de transporte na rede que são essenciais em aplicações de tempo real como tráfego de voz ou vídeo. O RTP contém campos como o sequence number, útil para as aplicações que utilizam RTP conseguirem detectar perdas de pacotes e também conseguirem verificar se os pacotes chegaram na ordem correcta, uma vez que o RTP normalmente corre sobre o UDP, e este último protocolo não tem garantia de qualidade de serviço. O RTCP providencia um conjunto de mensagens que são trocadas entre os utilizadores numa sessão que permitem obter um feedback em relação à qualidade da sessão. Sempre que é iniciada uma sessão RTP é também
4 iniciada uma sessão RTCP, mas como já dissemos as sessões RTCP apenas fornecem dados estatísticos. RTP (application layer) 1 RTCP (application layer) 1 UDP (transport layer) UDP (transport layer) IP (network layer) IP (network layer) Ethernet (logical link layer) Ethernet (logical link layer) Diagrama Temporais Neste ponto vamos explicar o funcionamento dos protocolos utilizados com base nos diagramas temporais mostrando nas mensagens os parâmetros mais relevantes. SIP, RTP e RTCP Registo Parâmetros da primeira mensagem: REGISTER sip: SIP/2.0 Via: SIP/2.0/UDP :33254 From: To: O primeiro request enviado pelo cleinte deve ser registado (REGISTER), porque este request é que permite ao servidor saber o endereço do utilizador (usado pela sessão SIP). Como podemos ver na figura acima, o utilizador envia um Request ao PBX ( ) e, como foi o primeiro, esse utilizador deve ser registado, por isso utiliza o método REGISTER. Para confirmar que o pedido do utilizador foi aceite,
5 o PBX envia uma mensagem de resposta ao utilizador, código de resposta (200) e uma explicação textual (OK) indicando o sucesso do registo do mesmo. Estabelecimento da chamada O estabelecimento da chamada começa com uma mensagem SIP INVITE, a convidar o destinatário à participar numa sessão, que, nesse caso, é uma chamada. Depois de receber essa mensagem o PBX envia uma mensagem de resposta ao utilizador com o código 100 e um campo textual (Trying) dizendo ao mesmo que está tentando estabelecer a ligação. Assim que a ligação é estabelecida com sucesso o PBX envia uma mensagem 200 OK ao utilizador. De seguida, o utilizador responde com um ACK e, a partir desse instante (só a partir desse instante) a ligação é dada como estabelecida. Parâmetros da primeira mensagem: INVITE SIP/2.0 Via: SIP/2.0/UDP :43346 From: Contact: SDP na mensagem OK v=0 o=root IN IP s=asterisk PBX ~dfsg-2ubuntu1 c=in IP b=ct:384 t=0 0 m=audio RTP/AVP a=rtpmap:3 GSM/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:101 telephone-event/8000 a=fmtp: a=ptime:20 a=sendrecv m=video RTP/AVP 34 a=rtpmap:34 H263/90000 a=sendrecv SDP na mensagem INVITE: v=0 o=- 2 2 IN IP s = CounterPath eyebeam 1.5 c=in IP t=0 0 m=audio RTP/AVP a=alt:1 1 : JO1A34fm WmeSyMjz a=fmtp: a=rtpmap:101 telephone-event/8000 a=sendrecv a=x-rtp-session id:581e95516adf4d20a7bc1fce7fe64766 m=video RTP/AVP a=alt:1 1 : msd0jtgb /7OR7I4S a=fmtp:115 QCIF=1 MAXBR=1960 a=fmtp:34 QCIF=1 MAXBR=1960 a=rtpmap:115 H /90000 a=rtpmap:34 H263/90000 a=sendrecv a=x-rtp-session-id:279aa745b4e64e2eabd31d62e42484d2 Os campos v,o,s,c,b,t,m,a são os campos das mensagens SDP. O campo m, por exemplo, contém informações sobre o media utilizado (o tipo, o formato, e o porto, que são os mais importantes).
6 Término da Sessão Estas são as mensagens trocadas quando sempre que um utilizador pretende terminar uma sessão. Como podemos ver, para terminar a sessão o utilizador envia uma mensagem BYE, indicando ao PBX que pretende terminar a sessão. Depois o PBX responde com um 200 OK, indicando que a sessão foi terminada com sucesso. Ligação entre dois utilizadores (o utilizador quer falar com o operador que está na extensão 4000) No PBX IP : O IP dos utilizadores são diferentes pois a captura destes pacotes não ocorreu na mesma altura, nem nos mesmos PC s. Captura no PBX
7 No Utilizador 5001 IP (Utilizador 1) No Operador 4000 IP (Utilizador 2) Estas foram as mensagens trocadas quando fizemos uma chamada entre dois utilizadores. Como podemos ver (na captura do PBX), quando o Utilizador 1 carrega na tecla 9 (zona a vermelho), o PBX inicia o processo de estabelecimento da chamada entre o Utilizador 1 e o 2. Neste instante são tocadas um conjunto de mensagens entre os mesmos, que passam sempre pelo PBX, uma vez que este funciona como um servidor proxy. Inicialmente (após o utilizador 1 carregar a tecla 9), o PBX envia um INVITE ao utilizador 2, indicando a intenção do utilizador de estabelecer a chamada com o mesmo. Depois o utilizador 2 envia uma mensagem
8 com o código de reposta 180 e um campo textual (Ringing). O utilizador 2 envia um 200 OK indicando o sucesso da ligação, que depois é confirmado pelo PBX (através do envio de um ACK). De seguida, o PBX faz um INVITE para o utilizador 1, de modo a enviar os dados referentes ao utilizador 2 para o utilizador 1. Como podemos ver os pacotes SIP e os pacotes RTP passam por canais diferentes. O RTP entra em acção nesta fase, para a transmissão de fluxos de dados em tempo real entre os dois utilizadores. É possível verificar que as mensagens RTP têm o Sequence Number (que idenfica a ordem dos pacotes) e o Time (que ajuda na sincronização). As mensagens RTCP contêm um conjunto de campos que permitem fazer o controlo de fluxo de dados, como já dissemos, e como também se pode ver nas figuras acima. Conclusão Como podemos ver, para o desenvolvimento do projecto utilizamos vários protocolos, de várias camadas. Para a sinalização utilizamos o SIP, para o transporte de fluxo de dados em tempo real foi utilizado o RTP e para o controlo do fluxo de dados foi utilizado o RTCP. O RTP normalmente corre sobre o UDP, por isso é necessário que as aplicações contenham mecanismos de controlo e correcção da ordem de pacotes, por isso temos o RTCP que fornece as informações necessárias a estas aplicações. Ainda temos o SDP dentro do corpo do SIP, que contém informações sobre o utilizador, e os tipos de ficheiros que o mesmo utiliza. A sintaxe do SIP é semelhante a do HTTP, o que é uma grande vantagem para este protocolo, visto que os programas desenvolvidos para usar o HTTP podem, facilmente, serem adaptados para usar o SIP, mas isso também fara com que as mesmas consumam mais largura de banda. As mensagens com código 1xx são de informação e as mensagens com código 2xx são de sucesso, tal com já tínhamos visto.