BroadNet
SIP / VoIPFluxo de chamada

Fluxo de chamada SIP: de INVITE a BYE

Atualizado em 4 min de leituraBaseado em padrões
Resposta direta

Uma chamada SIP básica é um handshake de três vias INVITE/200/ACK seguido de média e de um BYE. O chamador envia INVITE (com uma oferta SDP); o chamado responde 100 Trying, 180 Ringing e depois 200 OK (com a resposta SDP); o chamador envia ACK; a média RTP flui; e qualquer das partes termina a chamada com BYE, respondido por 200 OK.

§01

Estabelecer a chamada

A chamada começa com o UAC do chamador a enviar um INVITE em direção ao chamado, transportando uma oferta SDP que descreve a média que quer. À medida que o pedido atravessa proxies, cada um pode devolver 100 Trying para parar as retransmissões. Quando o telefone do chamado começa a tocar, um 180 Ringing regressa — é isto que produz o ringback. Se for necessária early media (anúncios de rede, ringback da rede remota), um 183 Session Progress com SDP pode abrir o caminho de média antes do atendimento.

§02

Atendimento e o handshake de três vias

Quando o chamado atende, o seu UAS devolve um 200 OK transportando a resposta SDP que finaliza a negociação de média. O chamador confirma com um ACK — a terceira etapa do handshake do INVITE — e o diálogo fica agora totalmente estabelecido, identificado pelo Call-ID mais ambos os tags. A troca de três vias INVITE/200/ACK, em vez de um simples pedido/resposta, é o que torna o estabelecimento de chamadas SIP fiável mesmo sobre UDP com perdas.

Uma chamada SIP completatext
Alice (UAC)                         Bob (UAS)
   │  INVITE (SDP offer)   ─────────▶ │
   │ ◀───────── 100 Trying           │
   │ ◀───────── 180 Ringing          │   (Bob's phone rings)
   │ ◀───────── 200 OK (SDP answer)  │   (Bob answers)
   │  ACK                  ─────────▶ │
   │ ◀═══════ RTP media (both ways) ═▶ │   (the conversation)
   │  BYE                  ─────────▶ │   (Alice hangs up)
   │ ◀───────── 200 OK               │
§03

Média e mudanças a meio da chamada

Assim que o ACK completa o estabelecimento, a média RTP flui diretamente entre os pontos terminais (ou via um relé de média) nas portas que o SDP negociou, independentemente do caminho de sinalização. As mudanças a meio da chamada fazem-se com um re-INVITE ou UPDATE transportando um novo SDP — é assim que se fazem a espera (a=sendonly), a retoma (a=sendrecv), a renegociação de codec e a adição de vídeo, tudo dentro do diálogo existente sem largar a chamada.

§04

Terminar a chamada — BYE

Qualquer das partes termina uma chamada estabelecida enviando BYE, que a outra confirma com 200 OK; o diálogo é então fechado e a média para. O BYE é um pedido dentro do diálogo, pelo que transporta o Call-ID estabelecido, o tag do From, o tag do To e o próximo CSeq. Por ser uma transação normal, um BYE perdido é retransmitido até ser confirmado, para que ambos os lados convirjam no fim da chamada.

§05

Abortar uma chamada em curso — CANCEL

Se o chamador desiste antes de o chamado atender — a chamada ainda está a tocar — o UAC envia CANCEL, não BYE, porque ainda não chegou uma resposta final. O chamado para de tocar e devolve 487 Request Terminated para o INVITE original, que o chamador confirma com ACK. O CANCEL só é válido nesta janela pré-atendimento; assim que um 200 OK foi recebido, a chamada está estabelecida e o BYE é a forma de a terminar.

Terminar vs abortar uma chamada
SituaçãoMétodoResultado
Chamada atendida, agora desligueBYE200 OK; diálogo fechado
O telefone continua a tocar, mas a pessoa que ligou desisteCANCEL487 Request Terminated no INVITE
O destinatário rejeita enquanto toca(resposta) 486/603Busy Here / Decline; o chamador envia ACK
Perguntas frequentes

Perguntas frequentes

Qual é o fluxo de chamada SIP básico?

INVITE (com oferta SDP) → 100 Trying → 180 Ringing → 200 OK (com resposta SDP) → ACK, depois a média RTP flui, e a chamada termina com BYE → 200 OK. O handshake de três vias INVITE/200/ACK estabelece o diálogo; o BYE desfá-lo.

Porque é que o SIP usa um handshake de três vias para o INVITE?

O ACK confirma que o chamador recebeu o 200 OK final, tornando o estabelecimento de chamadas fiável mesmo sobre UDP com perdas. Como um 200 OK a um INVITE é retransmitido até ser confirmado com ACK, a troca de três vias garante que ambos os lados concordam que a chamada está de pé antes de a média ser confiada.

Como coloco uma chamada SIP em espera?

Envie um re-INVITE (ou UPDATE) dentro do diálogo estabelecido transportando um novo SDP que define a direção de média para a=sendonly (e a=sendrecv para retomar). O diálogo e a chamada mantêm-se de pé; só a direção da média muda, o que é também como se entrega a música em espera.

Quando envio CANCEL em vez de BYE?

Envie CANCEL quando a chamada ainda está a tocar e ainda não chegou uma resposta final — aborta o INVITE pendente e produz um 487. Envie BYE só depois de a chamada estar estabelecida (foi recebido um 200 OK). Usar o errado deixa os dois lados fora de sincronia.

A média segue o mesmo caminho que as mensagens SIP?

Normalmente não. A sinalização SIP pode atravessar vários proxies, mas a média RTP flui em portas negociadas separadamente, tipicamente diretamente entre os pontos terminais ou através de um relé de média ou SBC dedicado — e é por isso que a sinalização pode ter sucesso enquanto a média (áudio) falha independentemente.

Referências

Especificações de origem

Os padrões publicados nos quais esta página se baseia. Abre num novo separador.

BNMantido pela equipa de engenharia BroadNet·Mensagens de nível de operadora desde 2003
Coloque-o no fio.

Construa com uma vinculação SMPP real e uma API REST.

Solicite acesso de teste com chaves de teste reais: envie primeiro para o seu próprio número verificado e, em seguida, passe para o ambiente de produção em mais de 200 países assim que a sua identidade de remetente e rotas forem aprovadas.