Introdução ao protocolo SIP para central telefônica VoIP

Introdução

 

Nesta série falaremos um pouco de Tecnologia VoIP, Protocolo SIP e Asterisk, e iremos ver passo a passo como criar uma distribuição Linux com o Asterisk embutido utilizando o Yocto Project e a placa Toradex Colibri i.MX6. No final teremos uma simples central telefônica para realizar ligações entre ramais VoIP.

 

 

O que é VoIP

 

Voz sobre IP, também chamada de VoIP (Voice over Internet Protocol), é a forma de fazer e receber ligações utilizando a internet. Esta é a definição mais geral desta tecnologia. Aprofundando no assunto, existem protocolos, codecs, hardware e a junção de tudo isso ou em partes.

 

Existem diferentes formas de usar VoIP:

  • ATA (Adaptador Telefônico Analógico): Equipamento que transforma um telefone convencional em um VoIP. Para isso deve-se conectar um telefone em uma interface e em outra um link de internet;
  • Softphone: Um aplicativo instalado no Computador ou Celular para realizar/receber ligações. Por exemplo: 3CX e Zoiper;
  • Telefone IP: Este já é um equipamento que faz a função do ATA e Telefone no mesmo equipamento, necessário apenas conectar na rede com internet e configurar o Ramal SIP.

 

 

SIP

 

Falando em VoIP, não se deve esquecer do SIP (Session Initiation Protocol), um dos protocolos utilizados em VoIP, baseado em HTTP, responsável por iniciar, estabelecer, alterar e finalizar sessões no modelo cliente/servidor, sendo independente da aplicação e dados de áudio/video que estará utilizando.

 

O SIP funciona em uma arquitetura cliente/servidor, é o protocolo de sinalização e dita as regras e como irá ocorrer a comunicação fim-a-fim. Utiliza outros protocolos e recursos como RTCP (Real-Time Control Protocol), que irá controlador o RTP (Real-Time Transport Protocol), responsável pelo “transporte da voz” utilizando UDP (User Datagram Protocol); o TCP (Transmission Control Protocol), que é utilizado no início para configurar a chamada e o HTTP (HyperText Transfer Protocol), utilizado para Códigos de Respostas ao aceite da ligação.

 

O SIP possui uma arquitetura definida, e os 4 componentes são: SIP User Agent; SIP Proxy Server; SIP Redirect Server; e SIP Registrar Server. Mas aqui iremos abordar o SIP User Agent e SIP Proxy Server.

 

  • SIP User Agent: Este é o componente/equipamento que o usuário irá utilizar ou interagir, SoftPhone, ATA, TelefoneIP. Ele pode enviar/receber requisições podendo ser UAC (User Agent Client) ou UAS (User Agent Server).
  • SIP Proxy Server: Utilizado em infraestruturas de VoIP maiores, como provedores e gateways. Este atua como cliente e servidor, recebe e repassa para outros SIP Servers até o UAC.

 

Temos 2 SIP Servers:

  • TCP (Stateful): É possível dividir as chamadas para vários servidores para encontrar o ramal SIP, criando uma árvore de busca, é mais confiável, mantém registro de cada solicitação e resposta que recebe, pode utilizar as informações armazenadas no futuro e retransmitir pedido se necessário;
  • UDP (Stateless): Apenas encaminha a mensagem que recebe, não armazena nenhuma informação da transação, é mais veloz, muito utilizado nos cores das redes.

 

A parte legal do SIP são os Métodos, Códigos de Respostas, Cabeçalho e Autenticação. Vamos abordar resumidamente cada um.

 

Métodos

 

Baseado em HTTP, que utiliza métodos como POST, GET, PUT, DELETE, etc, SIP também possui e são seis:

  • INVITE: Método para tentar estabelecer uma conexão;
  • ACK: É a resposta após receber um INVITE, aceitando estabelecer uma conexão;
  • CANCEL: Cancela qualquer método pendente;
  • OPTIONS: Método para obter informações como métodos suportados, codecs, extensões em outras informações;
  • REGISTER: Irá registrar um alias no servidor SIP;
  • BYE: Encerra uma conexão estabelecida.

 

Códigos de Resposta

 

Assim como Métodos baseados no HTTP, segue as mesmas premissas utilizando 5 das utilizadas no HTTP e uma particularmente do SIP:

  • 1xx: Provisório - pedido recebido, continuando a processar o pedido;
  • 2xx: Sucesso - a ação foi recebida, entendida e aceita com sucesso;
  • 3xx: Redirecionamento - outras ações precisam ser tomadas para completar o pedido;
  • 4xx: Erro do Cliente - o pedido contém sintaxe incorreta ou não pode ser realizada no servidor que recebeu;
  • 5xx: Erro do Servidor - o servidor não conseguiu realizar uma solicitação aparentemente válida;
  • 6xx: Falha Global - o pedido não pode ser realizado em qualquer servidor.

 

Uma lista completa e ampla dos códigos podemos ver no 3CX – Can You List All Known SIP Responses.

 

Cabeçalho

 

Seguindo a mesma sintaxe do cabeçalho HTTP, usando nome:valor, existem campos obrigatórios como Call-ID contendo um ID (randômico)@IP do transmissor, From identificação do transmissor, entre outros como To, Max-Forwards, Date e CSeq que definem o cabeçalho. Mais detalhes RFC3261 - Headers.

 

Autenticação

 

Basicamente pode-se utilizar autenticação HTTP Digest onde um Proxy-Authorization deve ser preenchido no Cabeçalho, mas não é um modo seguro. Assim, é recomendado o segundo modo utilizando TLS 1.0.

 

Todos as informações apresentadas aqui podem ser encontradas, e com mais detalhes, na definição da RFC3216 – SIP: Session Inititation Protocol.

 

 

Exemplo de Ligação SIP

 

A Figura1 ilustra um exemplo de ligação SIP, usando ramais SIP que iremos utilizar até o final desta série. Temos dois Ramais, 1001, que representa uma linha de uma equipe de desenvolvimento de software e 1002, representando uma equipe de hardware. Vamos desprezar a parte de infra entre os locais e imaginar que esteja tudo configurado corretamente e focar apenas nas etapas da ligação entre os ramais.

 

Eexemplo de ligação SIP para central telefônica VoIP

 

  1. O ramal 1001 discou para o ramal 1002, enviando um INVITE;
  2. O Servidor SIP encaminhou o INVITE e respondeu que está tentando a ligação;
  3. Quando o ramal 1002 recebe o INVITE, responde com 180 que estará “tocando”;
  4. O ramal 1001 recebe a resposta 180 que esta “tocando” e acompanha o estado;
  5. Assim que alguém atender o ramal 1002, é respondido com 200, que pode-se estabelecer o streaming da conversa;
  6. O ramal 1001 recebe o 200 OK e responde com um ACK dizendo que está pronto para estabelecer o streaming;
  7. O ramal 1002 recebe ACK do Servidor SIP e dá início ao canal para a conversa;
  8. Após um período, qualquer um dos ramais pode encerrar a ligação, no caso, o ramal 1001 encerra a ligação e um BYE é enviado para o servidor SIP;
  9. O servidor SIP encaminha para o ramal 1002, que recebe e responde um 200 OK confirmando o encerramento da ligação;
  10. O servidor encaminha a resposta para o ramal 1001 possuindo agora a confirmação do encerramento da ligação. Caso esta confirmação não chegasse ou não fosse entregue ao ramal 1002 teríamos um problema famoso de Hold Call (Ligação Presa).

 

Neste primeiro artigo abstraímos sobre um importante componente da telefonia VoIP, o SIP. Nos próximos iremos explorar o Asterisk, criar uma Distribuição Linux com Asterisk e configurar e instalar aplicativos para realizarmos uma chamada entre ramais.

 

Até a próxima!

 

 

Referências

 

https://pt.wikipedia.org/wiki/Voz_sobre_IP

https://tools.ietf.org/html/rfc3261

https://www.gta.ufrj.br/grad/06_1/sip/index.html

https://www.3cx.com/pbx/sip-responses/

Outros artigos da série

Introdução ao Asterisk para central telefônica VoIP >>
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Cleiton Bueno
Proprietário da B2Open onde oferecemos consultoria, treinamentos e desenvolvimento em Sistemas Embarcados. Entusiasta a filosofia open-source, mais de 10 anos de experiências em Linux e FOSS. Em sistemas embarcado do firmware baremetal ao Linux Embedded, e há aproximadamente 8 anos desenvolvendo em (C, Python, Qt e muito Shell Script), além de profiling, hardening e tuning para targets com Linux Embarcado. Graduado em Engenharia da Computação pela UNICEP com ênfase em robótica e sistemas embarcados.

2
Deixe um comentário

avatar
 
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Cleiton BuenoCiro Peixoto Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Ciro Peixoto
Visitante
Ciro Peixoto

Beleza !! Um assunto extremamente útil e pouco explorado!! Parabéns Cleiton!!

Cleiton Bueno
Visitante

Obrigado Ciro, a série será muito bacana. Um abraço.