As mensagens do protocolo
SIP se assemelham com as mensagens do protocolo HTTP. Possuem o
formato header:field, onde header representa o campo
do cabeçalho da mensagem e field representa a
informação contida neste campo do cabeçalho. O SIP
utiliza a regra de ignorar os campos de cabeçalhos que
não puderam ser entendidos pelo servidor. Abaixo podemos ver
uma estrutura básica do cabeçalho SIP. As
informações foram retiradas da RFC 3261, que especifica o
protocolo SIP.
Uma requisição SIP
válida deve conter ao menos os campos To, From,
CSeq, Call-ID e Max-Forwards, os quais são todos
obrigatórios em todas as mensagens SIP. Outros campos
podem se juntar a esses.
O Campo To armazena o
endereço SIP do usuário alvo da requisição.
Este campo deve utilizar os endereços SIP ou SIPS, mas
também podem conter endereços em outros formatos
especificados na RFC 2806. O agente de usuário cliente (UAC)
deve ser capaz de traduzir os valores inseridos pelo usuário
em endereços SIP válidos. Exemplo: To: Carol
<sip:carol@gta.ufrj.br>
O Campo From(f)
armazena o endereço SIP do transmissor de determinada
requisição. Esta campo permite que os UACs implementem
mecanismos de identificação de chamadas através do
nome do emissor a título de informação ou de recusa
automática de chamadas. O campo From deve conter um
novo parâmetro denominado “tag” escolhido
pelo agente de usuário cliente, o qual é responsável
por marcar a chamada correspondente a aquela marcação.
Exemplos: From: "Bob" sips:bob@gta.ufrj.br ;tag=a48s / From:
sip:+12125551212@gta.ufrj.br ;tag=887s / From:
Anonymous
<sip:c8oqz84zk7z@privacy.gta.ufrj.br>;tag=hyh8
O campo CSeq funciona como
um contador para as requisições realizadas, excetos
mensagens de Ack e Cancel. Os UACs utilizam este campo para
descobrir de qual requisição é a resposta recebida e
os agentes de usuário servidores (UAS) o utilizam para
diferenciar uma nova requisição de uma
retransmissão. A informação contida neste campo
consiste em um número inteiro positivo de 32 bits e da
primitiva da mensagem. Exemplo: 4711 INVITE
O campo
Call-Id(i) identifica a chamada em curso. Ele
é um identificador e possui dois elementos separados pelo
caractere ‘@’. O primeiro elemento é gerado
localmente e de forma aleatória e o segundo é o IP do
remetente. Este campo diferencia maiúsculas de minúsculas
e é facilmente comparado byte a byte. Exemplo: Call-ID:
f81d4fae-7dec-11d0- a765-
00a0c91e6bf6@146.164.69.183
O campo
Max-Fowards determina o número de saltos
que uma requisição deve percorrer até o seu destino.
É um valor inteiro que é reduzido de uma unidade a cada
salto. Se o valor deste campo chegar a zero antes que a
requisição alcance seu destino, será produzida uma
mensagem de erro de código 483, que representa excesso de
saltos no percurso. A especificação sugere o número
70 como padrão para este campo, por considerar um número
não muito pequeno para alcançar o destino na rede SIP,
sem laços (loops), e ao mesmo tempo não muito
grande para consumir recursos dos servidores quando houver
laços. Exemplo: Max-Forwards: 70
Outros campos para o
cabeçalho do protocolo SIP podem ser encontrados em
(2).