SIP (Session Initiation Protocol)
Basic Information
SIP (Session Initiation Protocol) é um protocolo de sinalização e controle de chamadas amplamente utilizado para estabelecer, modificar e encerrar sessões multimídia, incluindo voz, vídeo e mensagens instantâneas, sobre redes IP. Desenvolvido pelo Internet Engineering Task Force (IETF), o SIP é definido na RFC 3261 e se tornou o padrão de fato para VoIP e comunicações unificadas.
Alguns recursos principais do SIP incluem:
Protocolo Baseado em Texto: O SIP é um protocolo baseado em texto, o que o torna legível por humanos e mais fácil de depurar. Ele é baseado em um modelo de solicitação-resposta, semelhante ao HTTP, e usa métodos como INVITE, ACK, BYE e CANCEL para controlar sessões de chamadas.
Escalabilidade e Flexibilidade: O SIP é altamente escalável e pode ser usado em implantações de pequeno porte, bem como em ambientes empresariais e de operadoras de grande porte. Ele pode ser facilmente estendido com novos recursos, tornando-o adaptável a vários casos de uso e requisitos.
Interoperabilidade: A ampla adoção e padronização do SIP garantem melhor interoperabilidade entre diferentes dispositivos, aplicativos e provedores de serviços, promovendo comunicação sem interrupções em várias plataformas.
Design Modular: O SIP funciona com outros protocolos como RTP (Real-time Transport Protocol) para transmissão de mídia e SDP (Session Description Protocol) para descrever sessões multimídia. Esse design modular permite maior flexibilidade e compatibilidade com diferentes tipos de mídia e codecs.
Servidores Proxy e de Redirecionamento: O SIP pode usar servidores proxy e de redirecionamento para facilitar o roteamento de chamadas e fornecer recursos avançados como encaminhamento de chamadas, transferência de chamadas e serviços de correio de voz.
Presença e Mensagens Instantâneas: O SIP não se limita à comunicação de voz e vídeo. Ele também suporta presença e mensagens instantâneas, permitindo uma ampla gama de aplicativos de comunicação unificada.
Apesar de suas muitas vantagens, o SIP pode ser complexo de configurar e gerenciar, especialmente ao lidar com problemas de travessia de NAT e firewall. No entanto, sua versatilidade, escalabilidade e amplo suporte na indústria o tornam uma escolha popular para comunicação VoIP e multimídia.
SIP Methods
Os métodos principais do SIP definidos na RFC 3261 incluem:
INVITE: Usado para iniciar uma nova sessão (chamada) ou modificar uma existente. O método INVITE carrega a descrição da sessão (tipicamente usando SDP) para informar o destinatário sobre os detalhes da sessão proposta, como tipos de mídia, codecs e protocolos de transporte.
ACK: Enviado para confirmar o recebimento de uma resposta final a uma solicitação INVITE. O método ACK garante a confiabilidade das transações INVITE, fornecendo reconhecimento de ponta a ponta.
BYE: Usado para encerrar uma sessão estabelecida (chamada). O método BYE é enviado por qualquer uma das partes na sessão para indicar que deseja encerrar a comunicação.
CANCEL: Enviado para cancelar uma solicitação INVITE pendente antes que a sessão seja estabelecida. O método CANCEL permite que o remetente cancele uma transação INVITE se mudar de ideia ou se não houver resposta do destinatário.
OPTIONS: Usado para consultar as capacidades de um servidor SIP ou agente de usuário. O método OPTIONS pode ser enviado para solicitar informações sobre métodos suportados, tipos de mídia ou outras extensões sem realmente estabelecer uma sessão.
REGISTER: Usado por um agente de usuário para registrar sua localização atual com um servidor registrador SIP. O método REGISTER ajuda a manter um mapeamento atualizado entre o URI SIP de um usuário e seu endereço IP atual, permitindo o roteamento e a entrega de chamadas.
Note que para chamar alguém não é necessário usar o REGISTER para nada.
No entanto, é possível que para realizar um INVITE o chamador precise se autenticar primeiro ou receberá uma resposta 401 Unauthorized
.
Além desses métodos principais, existem vários métodos de extensão SIP definidos em outras RFCs, como:
SUBSCRIBE: Definido na RFC 6665, o método SUBSCRIBE é usado para solicitar notificações sobre o estado de um recurso específico, como a presença ou status de chamada de um usuário.
NOTIFY: Também definido na RFC 6665, o método NOTIFY é enviado por um servidor para informar um agente de usuário inscrito sobre mudanças no estado de um recurso monitorado.
REFER: Definido na RFC 3515, o método REFER é usado para solicitar que o destinatário realize uma transferência ou se refira a um terceiro. Isso é tipicamente usado para cenários de transferência de chamadas.
MESSAGE: Definido na RFC 3428, o método MESSAGE é usado para enviar mensagens instantâneas entre agentes de usuário SIP, permitindo comunicação baseada em texto dentro da estrutura SIP.
UPDATE: Definido na RFC 3311, o método UPDATE permite modificar uma sessão sem afetar o estado do diálogo existente. Isso é útil para atualizar parâmetros de sessão, como codecs ou tipos de mídia, durante uma chamada em andamento.
PUBLISH: Definido na RFC 3903, o método PUBLISH é usado por um agente de usuário para publicar informações de estado de eventos em um servidor, tornando-as disponíveis para outras partes interessadas.
SIP Response Codes
1xx (Respostas Provisórias): Essas respostas indicam que a solicitação foi recebida e o servidor está continuando a processá-la.
100 Trying: A solicitação foi recebida e o servidor está trabalhando nela.
180 Ringing: O chamado está sendo alertado e atenderá a chamada.
183 Session Progress: Fornece informações sobre o progresso da chamada.
2xx (Respostas de Sucesso): Essas respostas indicam que a solicitação foi recebida, compreendida e aceita com sucesso.
200 OK: A solicitação foi bem-sucedida e o servidor a atendeu.
202 Accepted: A solicitação foi aceita para processamento, mas ainda não foi concluída.
3xx (Respostas de Redirecionamento): Essas respostas indicam que mais ações são necessárias para atender à solicitação, normalmente contatando um recurso alternativo.
300 Multiple Choices: Existem várias opções disponíveis, e o usuário ou cliente deve escolher uma.
301 Moved Permanently: O recurso solicitado foi atribuído a um novo URI permanente.
302 Moved Temporarily: O recurso solicitado está temporariamente disponível em um URI diferente.
305 Use Proxy: A solicitação deve ser enviada a um proxy especificado.
4xx (Respostas de Erro do Cliente): Essas respostas indicam que a solicitação contém uma sintaxe incorreta ou não pode ser atendida pelo servidor.
400 Bad Request: A solicitação estava malformada ou inválida.
401 Unauthorized: A solicitação requer autenticação do usuário.
403 Forbidden: O servidor entendeu a solicitação, mas se recusa a atendê-la.
404 Not Found: O recurso solicitado não foi encontrado no servidor.
408 Request Timeout: O servidor não recebeu uma solicitação completa dentro do tempo que estava preparado para esperar.
486 Busy Here: O chamado está atualmente ocupado e não pode atender a chamada.
5xx (Respostas de Erro do Servidor): Essas respostas indicam que o servidor falhou em atender a uma solicitação válida.
500 Internal Server Error: O servidor encontrou um erro ao processar a solicitação.
501 Not Implemented: O servidor não suporta a funcionalidade necessária para atender à solicitação.
503 Service Unavailable: O servidor está atualmente incapaz de lidar com a solicitação devido a manutenção ou sobrecarga.
6xx (Respostas de Falha Global): Essas respostas indicam que a solicitação não pode ser atendida por nenhum servidor.
600 Busy Everywhere: Todos os destinos possíveis para a chamada estão ocupados.
603 Decline: O chamado não deseja participar da chamada.
604 Does Not Exist Anywhere: O recurso solicitado não está disponível em nenhum lugar da rede.
Examples
SIP INVITE Example
Exemplo de SIP REGISTER
O método REGISTER é usado no Protocolo de Iniciação de Sessão (SIP) para permitir que um agente de usuário (UA), como um telefone VoIP ou um softphone, registre sua localização em um servidor registrador SIP. Este processo informa ao servidor onde encaminhar as solicitações SIP recebidas destinadas ao usuário registrado. O servidor registrador geralmente faz parte de um servidor proxy SIP ou de um servidor de registro dedicado.
Aqui está um exemplo detalhado das mensagens SIP envolvidas em um processo de autenticação REGISTER:
Solicitação inicial REGISTER do UA para o servidor registrador:
Esta mensagem inicial de REGISTER é enviada pelo UA (Alice) para o servidor registrador. Ela inclui informações importantes, como a duração de registro desejada (Expires), o URI SIP do usuário (sip:alice@example.com) e o endereço de contato do usuário (sip:alice@192.168.1.100:5060).
401 Unauthorized resposta do servidor registrador:
O servidor registrador responde com uma mensagem "401 Unauthorized", que inclui um cabeçalho "WWW-Authenticate". Este cabeçalho contém informações necessárias para que o UA se autentique, como o domínio de autenticação, nonce e algoritmo.
Solicitação REGISTER com credenciais de autenticação:
O UA envia outra solicitação REGISTER, desta vez incluindo o cabeçalho "Authorization" com as credenciais necessárias, como o nome de usuário, realm, nonce e um valor de resposta calculado usando as informações fornecidas e a senha do usuário.
É assim que a resposta de Authorization é calculada:
Resposta de registro bem-sucedido do servidor registrador:
Após o servidor registrador verificar as credenciais fornecidas, ele envia uma resposta "200 OK" para indicar que o registro foi bem-sucedido. A resposta inclui as informações de contato registradas e o tempo de expiração para o registro. Neste ponto, o agente do usuário (Alice) está registrado com sucesso no servidor registrador SIP, e as solicitações SIP recebidas para Alice podem ser roteadas para o endereço de contato apropriado.
Exemplo de Chamada
Não é mencionado, mas o Usuário B precisa ter enviado uma mensagem REGISTER para o Proxy 2 antes de poder receber chamadas.
Last updated