domingo, 11 de fevereiro de 2018

O protocolo IAX

By: Angelo de Barros Delphini On: fevereiro 11, 2018
  • Share The Gag


  • IAX (protocolo Inter-Asterisk eXchange) é um dos protocolos utilizados pelo Asterisk. Ele é usado para gerenciar conexões VoIP entre os servidores Asterisk e entre servidores e clientes que também usam o protocolo IAX. O protocolo IAX agora geralmente se refere ao IAX2, a segunda versão do protocolo IAX. O protocolo original tornou-se obsoleto em favor da IAX2.

    IAX2 é robusto, cheio de novidades e muito simples em comparação com outros protocolos. Ele permite lidar com um grande número de CODECs e um grande número de fluxos, o que significa que ele pode ser usado para transportar praticamente qualquer tipo de dados. Esta capacidade torna muito útil para videoconferências ou apresentações remotas. Está designado para dar prioridade para pacotes de voz em uma rede IP.

    IAX2 usa uma única porta UDP, geralmente 4569, para comunicações entre nós finais (terminais VoIP) para sinalização e dados. O tráfego de voz é transmitido na banda, o que torna o IAX2 um protocolo quase transparente para firewalls (Firewall) e realmente eficaz para trabalhar nas redes internas. Nisto difere do SIP, que usa uma seqüência RTP fora de banda para entregar a informação.

    IAX2 suporta Trunking (rede), onde um link simples permite enviar dados e sinalização através de múltiplos canais. Quando o Trunking é executado, os dados de várias chamadas são tratados em um único conjunto de pacotes, o que significa que um Datagrama IP pode fornecer informações para mais chamadas sem criar latência adicional. Esta é uma grande vantagem para usuários de VoIP, onde os cabeçalhos de IP são uma grande porcentagem da largura de banda usada.

    O protocolo IAX2 foi criado por Mark Spencer para sinalização VoIP em Asterisk. O protocolo cria sessões internas e essas sessões podem usar qualquer CODEC que possa transmitir voz ou vídeo. O IAX, essencialmente, fornece controle e transmissão de fluxos de dados multimídia em redes IP. IAX é extremamente flexível e pode ser usado com qualquer tipo de dados, incluindo o vídeo.

    O design IAX foi baseado em muitos padrões de transmissão de dados, incluindo SIP (que é o mais comum atualmente), MGCP e Protocolo de Transporte em Tempo Real.

    O objetivo principal da IAX foi minimizar a largura de banda usada na transmissão de voz e vídeo através da rede IP, com particular atenção ao controle e às chamadas de voz e ao suporte nativo para ser transparente ao NAT. A estrutura básica do IAX é baseada na multiplexação da sinalização e no fluxo de dados em uma única porta UDP entre dois sistemas. IAX é um protocolo binário e é projetado e organizado de forma a reduzir a carga em fluxos de dados de voz. A largura de banda para algumas aplicações é sacrificada em favor da largura de banda para VoIP.

    Arquitetura IAX

    Como o nome indica, ele foi projetado como um protocolo para conexões VoIP entre os servidores Asterisk, embora hoje em dia também sirva para conexões entre clientes e servidores que suportam o protocolo.

    Os objetivos da IAX são:
    • Minimizar a largura de banda usada no controle VoIP e transmissões multimídia;
    • Evite problemas de NAT (Network Address Translation);
    • Suporte para transmitir planos de discagem.
    Entre as medidas para reduzir a largura de banda, deve notar-se que IAX ou IAX2 é um protocolo binário em vez de ser um protocolo de texto como SIP e que faz com que as mensagens usem menos largura de banda.

    Para evitar problemas de NAT, o protocolo IAX ou IAX2 usa o protocolo de transporte UDP, geralmente na porta 4569 (porta IAX1 usada 5036), e as informações de sinalização e os dados viajam juntos (ao contrário do SIP) e, portanto, torna menos propenso a problemas de NAT e permite que você passe roteadores e firewalls com mais facilidade.

    Funcionamento do IAX

    Para entender o protocolo IAX, veremos um exemplo do fluxo de dados de uma comunicação IAX2.
    Uma chamada IAX ou IAX2 tem três fases:
    A) Estabelecimento da chamada

    A Extensão A inicia uma conexão e envia uma mensagem "new". A Extensão B, que é o destinatário desta chamada, responde com um "accept" e o originador da chamada (Extensão A) responde com um "Ack". Então a Extensão B dá os sinais de toque e o interlocutor responde com um "Ack" para confirmar a recepção da mensagem. Finalmente, a Extensão B aceita a chamada com uma "Answer" e o originador, a Extensão A, confirma essa mensagem com um "Ack".

    B) Fluxo de dados ou Fluxo de áudio

    Os quadros M e F são enviados em ambas as direções com a informação vocal. M quadros são mini-quadros que contêm apenas um cabeçalho de 4 bytes para reduzir o uso da largura de banda. F quadros são quadros completos que incluem informações de sincronização. É importante ressaltar que, no IAX, esse fluxo usa o mesmo protocolo UDP que as mensagens de sinalização usam, evitando problemas de NAT.

    C) Liberação da chamada ou desconexão

    O encerramento da conexão é tão simples como enviar uma mensagem "hangup" e confirmar essa mensagem com um "Ack".

    Tipos de mensagens ou quadros

    As mensagens ou quadros que são enviados no IAX2 são binários e, portanto, cada bit ou conjunto de bits tem um significado. Como já indicamos anteriormente, existem dois tipos de mensagens, principalmente:

    A) Quadros F ou quadros completos

    A particularidade dos quadros ou das mensagens F é que eles devem ser respondidos explicitamente. Ou seja, quando um usuário envia outro quadro F (quadro completo), o receptor deve responder confirmando que recebeu essa mensagem. Esses quadros são os únicos que devem ser respondidos explicitamente.

    Em seguida, colocamos o formato binário de um quadro F ou quadro completo de IAX2.


    O significado de cada um dos campos é o seguinte:
    - F: Um bit que indica se o quadro é F (full frame) ou não. Para ser F ou quadro completo, ele deve ser definido como 1.
    - Source Call Number (Número de chamada de origem): 15 bits que identificam a conversação de origem, uma vez que pode haver várias comunicações multiplexadas pela mesma linha.
    - R: bit de retransmissão. É definido quando o enredo é retransmitido.
    - Destination Call Number (Número de chamada de destino): o mesmo que o número de origem, mas para identificar o destino.
    - Timestamp ou carimbo de tempo - Para marcar o tempo em cada pacote
    - OSeqno - Seq. Saída: número de sequência de saída com 8 bits. Começa em 0 e cada mensagem aumenta.
    - ISeqno - Seq. Entrada: o mesmo para a entrada.
    - Frame Type - Tipo de Quadro: indica a classe de quadro em questão
    - C: Set to 0, indica que o campo de subclasse deve ser tomado como 7 bits (uma única mensagem): Set to 1, indica que o campo de subclasse é obtido com 14 bits (duas mensagens consecutivas).
    - Subclass - subclasse - Subclasse da mensagem.
    - Data - Dados: dados que são enviados em formato binário.

    B) Molduras M ou Mini quadros

    M quadros ou mini quadros para enviar informações com a menor informação possível no cabeçalho. Esses quadros não precisam ser respondidos e, se algum deles for perdido, ele é descartado sem mais detalhes.

    O formato binário de M frames ou mini frames é o seguinte:



    O significado dos campos é semelhante ao dos quadros F ou full frame. Nesse caso, o bit F é definido como 0 e o carimbo de data/hora ou Timestamp é truncado e somente 16 bits para iluminar o cabeçalho. São os clientes que devem cuidar de carregar um timestamp de 32 bits se desejarem e sincronizá-lo para enviar um quadro F.

    Valores dos Quadros

    Quadros F ou quadro completo

    O campo Type Frame ou o tipo de quadro dos quadros F junto com o campo subclasse determinam a função do pacote que está sendo enviado ou recebido e, portanto, servem como sinalização de controle.

    O campo Type Frame consiste em 8 bits (1 byte) e os principais valores que podem ser tomados são mostrados na tabela a seguir:

    Tabela 1. Valores possíveis do campo "Tipo Quadro" dos quadros F ou Full Frame:

    Valor “type frame”DescriçãoDetalhes
    00000001DTMFEle é usado para enviar dígitos DTMF
    00000002Dados de vozO campo da subclasse indica o tipo de CODEC de áudio que é usado de acordo com a tabela 2
    00000003Dados de vídeoO campo da subclasse indica o tipo de CODEC de vídeo que é usado
    00000004ControleMensagens de controle de sessão. Ele serve para controlar o estado dos dispositivos finais. O campo da subclasse indica o tipo específico de mensagem de controle de acordo com a tabela 3.
    00000005Não utilizado
    00000006Controle IAXMensagens de controle do protocolo IAX. Gerencia as interações necessárias entre os dispositivos finais. O campo da subclasse indica o tipo específico de mensagem de controle de acordo com a tabela 4.
    00000007Texto
    00000008Imagem
    00000009HTML
    Tabela 2.Significado dos valores do campo de subclasse para Tipo de estrutura = "0x02" (dados de voz)
    Valor subclase (Type Frame =0x02)Descrição (CODEC usado na conversa)
    0x0001G.723.1
    0x0002GSM
    0x0004G.711 u (u-law)
    0x0008G.711 a (a-law)
    0x0080LPC10
    0x0100G.729
    0x0200Speex
    0x0400iLBC
    Tabela 3. Significado dos valores do campo de subclasse para Tipo de estrutura = "0x04" (controle)
    Valor subclase (Type Frame =0x04)DescriçãoDetalhes
    0x01HangupA chamada foi suspensa
    0x02RingO telefone está tocando
    0x03Ringing (ringback)
    0x04AnswerResposta
    0x05Busy ConditionO usuário está ocupado
    0x08Congestion ConditionHá congestionamento
    0x0eCall ProgressProgresso da chamada
    Tabela 4. Significado dos valores do campo de subclasse para Tipo de estrutura = "0x06" (controle IAX)
    Valor subclase (Type Frame =0x05)DescriçãoDetalhes
    0x01NEWInicie uma nova chamada0x10REGREJNegação de registro
    0x02PINGEnviar um ping0x11REGRELLiberação de registro
    0x03PONGResponder a um ping0x12VNAKPedido de retransmissão
    0x04ACKResposta afirmativa0x13DPREQSolicitação de Dialplan
    0x05HANGUPInício da desconexão0x14DPREPResponda pelo dialplan
    0x06REJECTRejeição0x15DIALMarcado
    0x07ACCEPTAceitação0x16TXREQPedido de transferência
    0x08AUTHREQPedido de autenticação0x17TXCNTTransferir conexão
    0x09AUTHREPResposta de autenticação0x18TXACCAceitação de transferência
    0x0aINVALChamada inválida0x19TXREADYTransferência pré-paga
    0x0bLAGRQPedido de Lag0x1aTXRELTransferência
    0x0cLAGRPResposta de Lag0x1bTXREJRejeição de transferência
    0x0dREGREQPedido de registro0x1cQUELCHPare a transmissão de áudio
    0x0eREGAUTHAutenticação de registro0x1dUNQUELCHContinuar a transmissão de áudio
    0x0fREGACKACK de registro0x20MWIIndicador de espera de mensagens
    0x21UNSUPPORTMensagem não suportada

    IAX vs SIP - comparação entre IAX e SIP

    IAX foi criado por Mark Spencer (também criador do AsterisK) para aliviar uma série de problemas ou inconvenientes que foram encontrados ao usar o SIP no VoIP e que ele achava que deveria ser melhorado.

    As principais diferenças entre IAX e SIP são as seguintes:

    - Largura de banda.
    O IAX usa uma largura de banda menor do que o SIP, uma vez que as mensagens são codificadas em forma binária enquanto no SIP são mensagens de texto. Da mesma forma, IAX tenta reduzir ao máximo a informação dos cabeçalhos das mensagens, reduzindo também a largura de banda.

    - NAT
    No IAX, a sinalização e os dados viajam juntos, o que evita os problemas de NAT que freqüentemente aparecem no SIP. No SIP, a sinalização e a viagem de dados são separadas e é por isso que os problemas NAT aparecem no fluxo de áudio quando esse fluxo deve superar os roteadores e firewalls. SIP geralmente precisa de um servidor STUN para esses problemas.

    - Padronização e uso
    O SIP é um protocolo padronizado pelo IETF há algum tempo e que é amplamente implementado por todos os fabricantes de equipamentos e software. O IAX ainda está sendo padronizado e é por isso que ele não é encontrado em muitos dispositivos existentes no mercado.

    - Uso de portas
    O IAX usa uma única porta (4569) para enviar as informações de sinalização e os dados de todas as suas chamadas. Para fazer isso, ele usa um mecanismo de multiplexagem ou trunking

    O SIP, no entanto, usa uma porta (5060, 5061 e 5062) para sinalização e 2 portas RTP para cada conexão de áudio (pelo menos 3 portas). Por exemplo, para 100 chamadas simultâneas com SIP, 200 portas (RTP) além da sinalização da porta 5060, 5051 e 5062 seriam usadas. 

    O IAX usaria apenas uma porta para tudo (4569).

    - Fluxo de áudio ao usar um servidor
    No SIP, se usarmos um servidor, a sinalização de controle sempre passa pelo servidor, mas as informações de áudio (fluxo RTP) podem viajar de ponta a ponta sem necessariamente passar pelo servidor SIP. No IAX, quando a sinalização e os dados viajam juntos, todo o tráfego de áudio deve necessariamente passar pelo servidor IAX. Isso produz um aumento no uso da largura de banda que os servidores IAX devem suportar, especialmente quando há muitas chamadas simuladas.

    - Outras funcionalidades
    IAX é um protocolo projetado para transmissão de VoIP e vídeo e apresenta recursos interessantes, como a possibilidade de enviar ou receber planos de discagem (dialplans) que são muito interessantes quando usados em conjunto com os servidores Asterisk. O SIP é um protocolo de propósito geral e pode transmitir sem dificuldade qualquer informação e não apenas áudio ou vídeo.

    Fontes;