SIP(Session Initiation Protocol), trabalha com gerenciamento de sessões, com várias formas de sessões multimídia de tempo real.
É um protocolo da aplicação que lida com chamadas de telefone pela Internet.
o SIP suporta 5 "facetas":
Localização do usuário
Disponibilidade do usuário
Aptidões do usuário
Iniciação de sessão (setup)
Gerenciamento de sessão
Pode trabalhar com outros procolos (RTP,RSTP,SDP,MEGACO), mas não precisa deles necessariamente.
O SIP não provê serviços, mas primitivas para que estes possam ser implementados.
Não é oferecido nenhum controle sobre os serviços de conferência, para isto devem ser usados outros protocolos.
São oferecidos serviços de segurança, que envolvem criptografia, autenticação, privacidade...
Funciona com IPv4 e IPv6.
Overview das Operações
As funções básicas do SIP envolvem: localização do ponto final, negociação de parâmetros da sessão, etc.
O SIP usa identificadores (URI) chamados de SIP URI. Cada lado da chamada possui o seu identificador.
Um "INVITE" é uma requisição de chamada, parecido com o acontece no HTTP. Esta mensagem pode conter informações adicionais em seus campos.
Segue abaixo uma figura de uma troca de mensagens SIP, e o modelo de um INVITE:
Setup de uma sessão SIPMensagem INVITE
Os campos do INVITE:
Via: contém o endereço pelo qual Alice espera respostas para esta requisição, que também contém um parâmetro que identifica a transação.
To: contém o destino (nome) e seu SIP URI.
From: tem o nome do solicitante, seu SIP URI adicionado de uma string randômica usada para identificação.
Call-ID: identificador único para esta chamada. A combinação de To, From e Call-ID define o relacionamento SIP peer-to-peer.
CSeq: é um número incrementado para cada requisição (como um numero de sequência).
Contact: traz um SIP ou SIP URI para contato direto com o solicitante. Neste campo pode ter o IP.
Max-Forwards: funciona como o TTL, limitando o número de saltos.
Content-Type: descrição do corpo da mensagem.
Content-Lenght: um contador de bytes do corpo da mensagem.
Uma mensagem SDP pode ser carregada pelo SIP com informações sobre a sessão.
Se Alice não conhece a localização de Bob, seu servidor SIP (atlanta.com) passa a fazer a busca, e manda um Trying falando que recebeu o INVITE. A busca pode ser feita usando DNS e vai passando pelos servidores até chegar no Bob. Estes servidores podem ser chamados de proxy.
Bob manda para Alice um reconhecimento de que recebeu o INVITE e depois um OK, aceitando-o.
A mensagem OK copia os campos do INVITE e adiciona uma tag no "To" que vai ser usada pelo resto da comunicação. Segue abaixo a mensagem OK:
Mensagem OK
Um servidor proxy pode mandar vários invites ao mesmo tempo, isso é chamado de forking.
Alice responde o OK com um ACK, fechando o tree way handshaking do SIP. O ACK é direto pois o endereço de Bob já foi "aprendido".
Um re-INVITE pode ser mandado paraa mudar as características da sessão, o qual deve ser respondido com um OK e depois ACK. Se não for aceito vem uma mensagem de "não aceitável" de número 488.
Para encerrar é gerada uma mensagem BYE que deve ser respondida com uma 200(OK). Neste caso não há ACK.
Um servidor proxy pode solicitar que todas as mensagens passem por ele.
Uma operação comum é regitrar, para que o servidor proxy saiba a localização corrente do SIP phone. Aí fica claro que a distinção entre os servidores SIP é lógica e não física.
Um usuário pode ter vários phones e um phone pode ser usado por vários usuários, assim o proxy pode fazer múltiplas buscas. O "registrar" pode ajudar nisto, mas não é o único meio, algumas funções de mapping podem ser configuradas pelo administrador.
Existem outras mensagens SIP que serão apresentadas depois.
Estrutura
O SIP pode ser estruturado em camadas.
A primeira seria da sintaxe e codificação. A segunda seria a de transporte, que define como o cliente envia e recebe respostas. A terceira seria de transação, que envolve retransmissões, respostas,timeouts. A próxima camada seria o usuário de transação.
Siglas:
UA: User Agent
UAC: User Agent Client
UAS: User Agent Server
Obs: estes componentes serão explicados posteriormente.
Um diálogo é um relacionamento SIP peer-to-peer.
O método mais importante do SIP é o INVITE.
Definições
AOR (Address-of-Record): é como se fosse o endereço público de um usuário, sendo o SIP ou SIPS URI que aponta para um domínio com um serviço de localização.
Back-to-Back User Agent (B2BUA): entidade local que recebe requisições e as processa como um UAS, e para determinar como seriam respondidas funciona como um UAC
Call: refere a alguma comunicação entre peers.
Call Stateful: mantém o estado de um diálogo desde o INVITE até o BYE.
Conferência: Uma sessão com vários participantes.
Core: funções específicas de uma entidade SIP.
Downstream: do UAC até o UAS.
Home Domain: Que oferece servíço de domínio ao usuário.
Location Service: Usado por um redirecionamento SIP ou proxy para obter informações sobre a localização do callee (que recebe a requisição)
Roteamento solto (Loose): segue procedimentos definidos para processar o campo de cabeçalho de roteamento, separando o destino do conjunto de proxies que devem ser visitados.
Proxy de Saída (Outbound): Não pode ser resolvido pelo Request-URI.
Busca paralela: Um proxy procura um usuário em várias possibilidades ao mesmo tempo.
Resposta provisória: indica um avanço na busca, transação SIP, mas não o fim.
"Registrar": Um servidor que aceita requisições do tipo REQUEST.
Transação Regular: Uma transação que não envolva INVITE, CANCEL ou ACK.
Ringback: Um tom produzido na chamada, indicando que a chamada foi alertada.
Route Set: conjunto de SIPs ou SIPS URI que representa uma lista de proxies.
Spiral: a mesma requisição chegando de diferentes formas em um proxy, o que resulta em diferentes respostas.
Stateful/Stateless proxy: mantém ou não máquinas de estado do cliente ou servidor. É uma entidade lógica.
Strict Routing: Outro tipo de roteamento seguindo a RFC 2543. O Proxy destrói os conteúdos do Request URI quando um Route header é presente.
Usuário de Transição (TU): Camada que contém os cores (UAC, UAS, proxy).
Upstream: Do UAS para o UAC.
UAC: Cria uma requisição e a envia.
UAS: Recebe um request e gera uma resposta. Tanto UAC quanto UAS recebem este nome enquanto durar a transação.
UA: Pode ser UAC ou UAS.
Mensagens SIP
O SIP é baseado em texto e usa o UTF-8.
A mensagem pode ser uma requisição ou uma resposta, bem parecidas com o HTTP, mas o SIP NÃO É uma extensão do HTTP.
Requisições
Toda requisição tem uma "Request-Line" como início que termina com CRLF (carriage-return line-feed).