2.3 Lógica de Uma Sessão no SIP
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.
graphic
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).