Ferramenta gratuita

Gerador de diagrama de chamada SIP.

Escreva o fluxo, uma mensagem por linha, e veja o diagrama em escada na hora. Comece por um dos modelos prontos e baixe em SVG ou PNG.

Modelos:

Uma instrução por linha:

  • A -> B: INVITE seta cheia
  • B --> A: 180 Ringing tracejada (provisória)
  • A <-> B: RTP mídia nos dois sentidos
  • nota A: texto ou nota A, B: texto
  • separador: Encerramento, titulo: …, ativar B / desativar B

Até 12 participantes e 200 linhas. Linhas com # são comentários.

Tema:

Diagrama em escada com 3 participantes (Alice, Proxy, Bob) e 14 mensagens.

Diagrama

Chamada básica com proxy (RFC 3261)Diagrama em escada com 3 participantes (Alice, Proxy, Bob) e 14 mensagens.Chamada básica com proxy (RFC 3261)Estabelecimento1. INVITE (SDP oferta)2. 100 Trying3. INVITE (SDP oferta)4. 180 Ringing5. 180 Ringing6. 200 OK (SDP resposta)7. 200 OK (SDP resposta)8. ACK9. ACKcom Record-Route, ACK e BYEpassam pelo proxyConversa10. RTP (mídia direta)Encerramento11. BYE12. BYE13. 200 OK (BYE)14. 200 OK (BYE)AliceProxyBob
  • Requisição
  • Resposta provisória (1xx)
  • Sucesso (2xx)
  • Redirecionamento (3xx)
  • Erro (4xx, 5xx, 6xx)
  • Mídia (RTP)
Fluxo em texto (18 itens)
  1. Fase: Estabelecimento
  2. Alice para Proxy: INVITE (SDP oferta)
  3. Proxy para Alice: 100 Trying
  4. Proxy para Bob: INVITE (SDP oferta)
  5. Bob para Proxy: 180 Ringing
  6. Proxy para Alice: 180 Ringing
  7. Bob para Proxy: 200 OK (SDP resposta)
  8. Proxy para Alice: 200 OK (SDP resposta)
  9. Alice para Proxy: ACK
  10. Proxy para Bob: ACK
  11. Nota sobre Proxy: com Record-Route, ACK e BYE passam pelo proxy
  12. Fase: Conversa
  13. Alice e Bob, nos dois sentidos: RTP (mídia direta)
  14. Fase: Encerramento
  15. Bob para Proxy: BYE
  16. Proxy para Alice: BYE
  17. Alice para Proxy: 200 OK (BYE)
  18. Proxy para Bob: 200 OK (BYE)

Como escrever

A sintaxe, linha por linha.

Uma instrução por linha. Erros mostram o número da linha, e as linhas válidas continuam desenhadas.

participantes: Alice, Proxy, Bob
Ordem das colunas, da esquerda para a direita. Opcional: quem aparece numa mensagem sem ter sido declarado vira participante automaticamente.
Alice -> Proxy: INVITE
Seta cheia: requisições e respostas finais. O texto depois dos dois-pontos é o rótulo.
Proxy --> Alice: 100 Trying
Seta tracejada: respostas provisórias (1xx).
Alice <-> Bob: RTP
Seta nos dois sentidos, para mídia. <--> é a versão tracejada.
Bob -> Bob: timer
Mensagem para si mesmo (um laço na linha de vida).
nota Proxy: texto
Anotação sobre um participante; nota Alice, Bob: texto ocupa o espaço entre os dois.
separador: Encerramento
Linha horizontal que divide o fluxo em fases.
titulo: Chamada básica
Título no topo do diagrama (sai também no SVG e no PNG).
ativar Bob / desativar Bob
Barra de ativação na linha de vida, entre as duas linhas.
# comentário
Linhas que começam com # ou // são ignoradas.

Como ler

Como ler um diagrama SIP.

O diagrama em escada (ladder diagram) é a forma padrão de mostrar uma chamada SIP, nos RFCs e nos traces.

Cada participante (telefone, proxy, registrar, gateway) é uma coluna, com uma linha de vidavertical. O tempo corre de cima para baixo: cada seta é uma mensagem, desenhada da coluna de quem envia para a de quem recebe. A distância vertical não indica tempo real, só a ordem.

Uma seta com nome de método (INVITE, ACK, BYE, CANCEL, REGISTER) é uma requisição; uma seta com código de 3 dígitos é uma resposta, e volta pelo mesmo caminho da requisição (o Via). Uma requisição e as respostas a ela formam uma transação; o conjunto de transações entre dois agentes, do INVITE aceito até o BYE, é o diálogo, identificado pelo Call-ID e pelos tags do From e do To.

A mídia (RTP) não é SIP: ela segue direto entre os endereços negociados no SDP e por isso costuma pular o proxy no desenho. Quando a voz não chega mas o SIP está certo, o problema está nesses endereços, não nas setas de sinalização.

Passo a passo

O fluxo básico, mensagem por mensagem.

O modelo “Chamada básica” da ferramenta: Alice liga para Bob através de um proxy que faz Record-Route.

  1. 1INVITE (SDP oferta)Alice → Proxy

    Alice oferece a sessão: o INVITE leva no corpo um SDP com o IP, a porta e os codecs em que ela quer receber áudio.

  2. 2100 TryingProxy → Alice

    O proxy avisa que recebeu e está trabalhando. O 100 Trying vale só para este salto: ele não é repassado adiante e faz Alice parar de retransmitir o INVITE.

  3. 3INVITE (SDP oferta)Proxy → Bob

    O proxy descobre onde Bob está registrado e repassa o INVITE, acrescentando o seu Via (e o Record-Route, para continuar no caminho).

  4. 4180 RingingBob → Proxy

    O telefone de Bob está tocando. O 180 é repassado até Alice, que gera o tom de chamada localmente.

  5. 5180 RingingProxy → Alice

  6. 6200 OK (SDP resposta)Bob → Proxy

    Bob atende. O 200 OK traz o SDP de resposta, com os codecs escolhidos: a partir daqui a sessão está negociada.

  7. 7200 OK (SDP resposta)Proxy → Alice

  8. 8ACKAlice → Proxy

    Alice confirma o 200 com ACK. O ACK de uma resposta 2xx é uma transação nova, fim a fim; sem ele, Bob retransmite o 200 por até 32 segundos e encerra a chamada.

  9. 9ACKProxy → Bob

  10. 10RTP (mídia direta)Alice ⇄ Bob

    A voz vai em RTP direto entre os telefones, nos endereços dos SDPs. O proxy não vê a mídia.

  11. 11BYEBob → Proxy

    Bob desliga. O BYE segue a rota do diálogo (o Record-Route), por isso passa pelo proxy.

  12. 12BYEProxy → Alice

  13. 13200 OK (BYE)Alice → Proxy

    Alice confirma o BYE com 200 OK e o diálogo termina.

  14. 14200 OK (BYE)Proxy → Bob

Respostas

Provisórias e finais: a diferença que importa.

Respostas provisórias (1xx) dizem que a requisição está em andamento: 100 Trying,180 Ringing, 183 Session Progress. Elas não encerram a transação, podem vir várias e, por padrão, não são confirmadas nem retransmitidas: se uma se perder, ninguém fica sabendo. O 100 Trying vale só para um salto; as outras 1xx atravessam os proxies até quem chamou.

Quando a 1xx precisa chegar com certeza, por exemplo um 183 com SDP de early media, usa-se a extensão100rel (RFC 3262): a resposta leva Require: 100rel e RSeq, e quem chamou confirma comPRACK, que tem o seu próprio 200 OK. Veja o modelo “Early media”.

Respostas finais (2xx a 6xx) encerram a transação, e cada uma tem exatamente uma. Num INVITE, toda resposta final é confirmada com ACK: depois de um 2xx o ACK é fim a fim e abre uma transação nova; depois de 3xx, 4xx, 5xx ou 6xx o ACK é salto a salto e faz parte da transação do INVITE. Um CANCEL só tem efeito enquanto não houve resposta final; ele recebe o próprio 200 OK, e o INVITE cancelado termina com 487 Request Terminated.

Para o significado de cada código, consulte a tabela de códigos de resposta SIP. Para ver o fluxo de uma chamada real, cole as mensagens no analisador de mensagens SIP.

Dúvidas

Perguntas frequentes.

O texto que eu escrevo é enviado para algum lugar?

Não. O diagrama é montado em JavaScript no seu navegador, e os arquivos SVG e PNG também são gerados aí. O texto não vai para servidor, não entra na URL e não é guardado no navegador. A página só registra, de forma anônima, quantos participantes e mensagens o diagrama tem e qual formato foi baixado, nunca o conteúdo.

Posso usar o diagrama em documentação, apostila ou chamado de suporte?

Pode. O SVG é vetorial: abre no navegador, amplia sem perder nitidez e pode ser editado em programas de desenho vetorial como o Inkscape. O PNG sai com o dobro da resolução da tela (ou menos, em diagramas muito grandes) e cola direto em e-mail, wiki ou ticket. Guarde também o texto do fluxo, pelo botão Copiar texto, para alterar o diagrama depois.

Por que algumas setas são tracejadas?

É uma convenção desta ferramenta e de muitos livros: respostas provisórias (1xx) não encerram a transação e não são confirmadas, então aparecem tracejadas para destacar as respostas finais. Os diagramas dos RFCs usam setas iguais para tudo; você escolhe a seta em cada linha.

Por que o modelo de chamada rejeitada tem dois ACK?

Porque o ACK de uma resposta final de erro (3xx a 6xx) é salto a salto: o proxy confirma o 486 para o Bob e repassa o 486 para a Alice, que confirma para o proxy. Já o ACK de um 200 OK é fim a fim, uma transação nova que segue a rota do diálogo, como no modelo de chamada básica (RFC 3261, seções 13.2.2.4 e 17.1.1.3).

Dá para gerar o diagrama a partir de um log ou de uma captura?

Esta ferramenta desenha o fluxo que você descreve, o que é útil para documentar, ensinar ou planejar. Para ver o fluxo real de uma chamada, cole as mensagens no analisador de mensagens SIP da EDCA, que monta o diagrama em escada a partir do Call-ID, ou use o sngrep ou a opção VoIP Calls › Flow Sequence do Wireshark.

Qual o tamanho máximo do diagrama?

Até 12 participantes e 200 linhas de texto. Com muitos participantes, o diagrama rola para os lados dentro da própria caixa, inclusive no celular, e os arquivos exportados saem com o tamanho completo.

Continue

Para ir além.

Fontes: RFC 3261 (SIP), RFC 3262(PRACK), RFC 3264 (oferta e resposta), RFC 3515(REFER) e os exemplos de fluxo do RFC 3665.

Quer dominar o SIP?

Introdução ao SIP e Wireshark básico para VoIP

Do INVITE ao BYE, com NAT, SDP e autenticação na prática. Veja também os outros cursos da EDCA.

Conhecer o curso

Newsletter da EDCA

Ferramenta nova? A gente avisa.

Um resumo por semana, só quando sai coisa nova: ferramentas, artigos e cursos de VoIP, redes e programação.

Ao se inscrever, você concorda em receber a newsletter da EDCA por e-mail e com a política de privacidade. Você pode cancelar quando quiser.