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.
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.
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 Lida bestellen.
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).