As ligações VOIP, assim como qualquer informação que trafega na Internet, também se baseiam em tráfego de pacotes que utilizam um protocolo (regras que regulamentam a comunicação entre duas máquinas).
O protocolo utilizado nas ligações VOIP pode ser SIP, IAX, h.323, MGCP, XMPP, ou outros, porém, atualmente o protocolo SIP tem sido melhor aceito pelas empresas de telecom tendo uma boa difusão no mercado de telefonia.
Hoje falaremos um pouco sobre o funcionamento deste protocolo e abordaremos diálogo SIP com um servidor proxy interligando dois ramais.
No diagrama SIP abaixo podemos observar o funcionamento de uma ligação VOIP entre dois ramais cadastrados no mesmo servidor SIP:
Neste exemplo de chamada usando o protocolo SIP é possível observar facilmente as mensagens trocadas para estabelecer a chamada. Abaixo o passo a passo do diagrama:
1 – O usuário Lucien discou para o usuário Carlos, neste momento o ramal do Lucien encaminhou o INVITE para o servidor.sip (servidor em que está registrado);
2 – O servidor encaminhou o INVITE para o ramal do usuário Carlos que está registrado no mesmo servidor (ligação interna), e respondeu ao Lucien “100 Trying” informando que está tentando efetuar a ligação;
3 – O ramal do Carlos quando recebe a solicitação da chamada envia o “180 Ringing” para o servidor, informando que recebeu o INVITE e está chamando;
4 – O servidor repassa para o ramal do Lucien a mensagem informando que o telefone está chamando;
5 – O Carlos atende o telefone, neste momento o ramal dele envia “200 OK” informando que o telefone foi atendido e já é possível estabelecer o fluxo de mídia;
6 – O servidor repassa o “200 OK” para o ramal originador da chamada (Lucien) que responde com “ACK” (Acknowledge) confirmando que recebeu o “200 OK”;
7 – O servidor repassa o “ACK” para o ramal do Carlos que ao receber a confirmação abre a sessão de mídia diretamente entre os dois ramais, dando inicio a conversação entre os dois usuários.
8 – O usuário Carlos encerra a chamada, nesse momento o ramal envia a mensagem de BYE, informando o sinal de desligamento.
9 – O servidor repassa o BYE para o ramal do Lucien, que responde com 200 Ok, confirmando o encerramento da chamada.
Através desta mesma imagem podemos fazer algumas observações:
Sempre que o ramal destino estiver disponível e receber a requisição de chamada (INVITE) ele retorna o Ring (180 Ringing) informando que está chamando. Caso este ramal esteja ocupado, não esteja registrado ou por algum outro motivo não possa atender ele irá retornar um código de erro.
O fato de a mídia estar passando diretamente de um ramal para o outro (ponto-a-ponto), é um forte indicativo do Servidor.sip estar atuando como um SIP Proxy.
Em uma chamada com o áudio passando ponto-a-ponto o servidor não tem como fazer controle de mídia ou gravar as chamadas, porém o consumo de banda é muito menor, afinal só trafegam os pacotes Sip (puramente texto) para o controle da chamada no Servidor.sip .
Neste caso a ligação VOIP está sendo feita entre dois ramais cadastrados no mesmo servidor SIP, mas a realidade da telefonia nem sempre é esta. Como funciona uma chamada entre dois servidores SIP ou ainda para a rede pública é algo que abordaremos em outro post.
No caso de haver algum problema no envio do encerramento da chamada (BYE) geralmente ocorrem as “chamadas presas”, que continuam ativas por não terem recebido o sinal de desligamento. Entenda mais sobre Chamadas Presas.
Pacote SIP (INVITE):
abaixo podemos ver no pacote SIP do tipo INVITE as informações básicas contidas nele e o campo que indica a mensagem:
U 2013/01/30 11:01:57.455004 192.168.0.50:1024 -> 192.168.0.150:5060
INVITE sip:4031@servidor.sip SIP/2.0.
Via: SIP/2.0/UDP 192.168.0.50:1047;branch=z9hG4bK188800439.
From: “Lucien <4030>” <sip:4030@servidor.sip>;tag=738994358.
To: <sip:4031@servidor.sip>.
Call-ID: 1287077758@192.168.0.43.
CSeq: 1 INVITE.
Contact: <sip:4030@192.168.0.50:1047>.
Content-Type: application/sdp.
Max-Forwards: 70.
Content-Length: 293.
INVITE: Nesta linha são enviados os comandos que estabelecem o diálogo SIP. A mensagem INVITE é a solicitação de uma nova chamada. Note que neste campo também é possível observar o número destino (número de B).
From: Este campo identifica o originador da chamada (número de A).
Em breve estaremos disponibilizando posts sobre Códigos de Erros SIP , SIP Proxy, SIP Redirect e muitos outros, acompanhe!
Dúvidas? Sugestões? Deixe seu comentário!