Nesta sessão
examinaremos um exemplo concreto de comunicação
utilizando o protocolo SIP. No exemplo, Alice deseja chamar Bob.
Ambos estão utilizando computadores como aplicativos baseados
no protocolo SIP instalados para fazer e receber chamadas
telefônicas. Admitamos que Alice saiba o endereço IP de
Bob.
Figura 2: Fluxo Alice-Bob. A
imagem retrata a comunicação entre Alice e Bob desde seu
estabelecimento até usua
interrupção.
Na figura Figura 2, podemos
observar que a sessão SIP é iniciada quando Alice envia
uma mensagem INVITE para Bob, por UDP na porta 5060. A porta 5060
é a porta padrão do protocolo SIP e este também pode
receber mensagens por TCP. Nesta mensagem, estão contidos um
identificador para Bob, o endereço de Alice, o tipo de dado
que Alice deseja receber: áudio em codificação AVP 0
(PCM codificado com lei µ), o protocolo de transporte RTP e a
porta que ela receberá os pacotes: 25012. Ao receber esta
mensagem de Alice, a campainha de Bob toca. Ao atender, Bob envia
uma resposta com o código 200 OK para Alice na porta 5060.
Nesta mensagem de Bob, constam o seu endereço IP, a porta em
que deseja receber os pacotes de áudio utilizando o protocolo
de transporte RTP: 43569, e a codificação de áudio
que deseja receber os dados: AVP 3 (codificação GSM).
Após receber a resposta de Bob, Alice envia uma mensagem com a
primitiva ACK, confirmando que a comunicação foi
estabelecida com sucesso.
Observe que, neste exemplo,
ambos os usuários utilizaram codificadores de voz diferentes,
pois o SIP não determina o tipo da mídia que será
transmitida durante a sessão. Alice deverá codificar seu
áudio com GSM e Bob com a lei µ do PCM. Depois de
estabelecida a sessão, utilizando a porta 5060, ambos
irão transmitir os pacotes de dados para a porta especificada.
Bob deve enviar os pacotes de áudio para a porta 25012 do IP
146.164.69.183. Alice deve enviar os pacotes de áudio para a
porta 43569 do IP 146.164.69.190.
Após o fim da
transmissão, Bob aciona o seu aplicativo SIP para terminar a
sessão. Então o agente de usuário de Bob envia uma
mensagem com a primitiva BYE para Alice. Esta envia uma mensagem de
resposta 200 OK, confirmando o término da sessão. A
sessão é então encerrada em ambos os agentes de
usuário.
A partir deste pequeno
exemplo, podemos aprender diversas características do
protocolo SIP. A princípio, o protocolo SIP pode ser
considerado como um protocolo “fora de banda” (1), ou
seja, as mensagens SIP são enviadas e recebidas em portas
diferentes daqueles utilizadas para o tráfego dos dados da
mídia. Podemos ainda perceber que as mensagens SIP podem ser
lidas utilizando o código ASCII e são parecidas com as
mensagens do protocolo HTTP. Por último, podemos perceber que
todas as mensagens do SIP necessitam de reconhecimento, podendo
então, serem transmitidas por UDP e TCP.
Ainda por este simples
exemplo, podemos entender algumas características do protocolo
SIP. Considerando que Bob não tenha o codificador PCM lei
µ para codificar o áudio a ser enviado para Alice, ele
não poderia enviar a reposta 200 OK. Bob enviaria uma mensagem
de resposta com o código 600 NOT ACCEPTABLE, incluindo uma
lista com todos os codificadores que ele pode utilizar. Alice deve
escolher um dos codificadores da lista e re- enviar a mensagem com
a primitiva INVITE para Bob, anunciando o codificador
escolhido.
Bob também pode recusar
a chamada de Alice. Para isso, basta enviar um dos códigos de
rejeição existentes no protocolo SIP, tais como: ocupado
(busy), encerrado (gone), pagamento solicitado
(payment required) e proibido
(forbidden).