«

»

Imprimir esta Entrada

Protocolo IAX


Protocolo IAX2IAX (Inter-Asterisk eXchange protocol) es uno de los protocolos utilizado por Asterisk. Es utilizado para manejar conexiones VoIP entre servidores Asterisk, y entre servidores y clientes que también utilizan protocolo IAX. El protocolo IAX ahora se refiere generalmente al IAX2, la segunda versión del protocolo IAX. El protocolo original ha quedado obsoleto en favor de IAX2.

IAX2 es robusto, lleno de novedades y muy simple en comparación con otros protocolos. Permite manejar una gran cantidad de códecs y un gran número de streams, lo que significa que puede ser utilizado para transportar virtualmente cualquier tipo de dato. Esta capacidad lo hace muy útil para realizar videoconferencias o realizar presentaciones remotas. ESTA DISEÑADO PARA DARLE PRIORIDAD A LOS PAQUETES DE VOZ SOBRE UNA RED IP.

IAX2 utiliza un único puerto UDP, generalmente el 4569, para comunicaciones entre puntos finales (terminales VoIP) para señalización y datos. El tráfico de voz es transmitido in-band, lo que hace a IAX2 un protocolo casi transparente a los cortafuegos (Firewall) y realmente eficaz para trabajar dentro de redes internas. En esto se diferencia de SIP, que utiliza una cadena RTP out-of-band para entregar la información.

IAX2 soporta Trunking (red), donde un simple enlace permite enviar datos y señalización por múltiples canales. Cuando se realiza Trunking, los datos de múltiples llamadas son manejados en un único conjunto de paquetes, lo que significa que un datagrama IP puede entregar información para más llamadas sin crear latencia adicional. Esto es una gran ventaja para los usuarios de VoIP, donde las cabeceras IP son un gran porcentaje del ancho de banda utilizado.

El protocolo IAX2 fue creado por Mark Spencer para la señalización de VoIP en Asterisk. El protocolo crea sesiones internas y dichas sesiones pueden utilizar cualquier códec que pueda transmitir voz o vídeo. El IAX esencialmente provee control y transmisión de flujos de datos multimedia sobre redes IP. IAX es extremadamente flexible y puede ser utilizado con cualquier tipo de dato incluido vídeo.

El diseño de IAX se basó en muchos estándares de transmisión de datos, incluidos SIP (el cual es el más común actualmente), MGCP y Real-time Transport Protocol.

El principal objetivo de IAX ha sido minimizar el ancho de banda utilizado en la transmisión de voz y vídeo a través de la red IP, con particular atención al control y a las llamadas de voz y proveyendo un soporte nativo para ser transparente a NAT. La estructura básica de IAX se fundamenta en la multiplexación de la señalización y del flujo de datos sobre un simple puerto UDP entre dos sistemas. IAX es un protocolo binario y está diseñado y organizado de manera que reduce la carga en flujos de datos de voz. El ancho de banda para algunas aplicaciones se sacrifica en favor del ancho de banda para VoIP.

Arquitectura IAX

Como indica su nombre fue diseñado como un protocolo de conexiones VoIP entre servidores Asterisk aunque hoy en día también sirve para conexiones entre clientes y servidores que soporten el protocolo.

Los objetivos de IAX son:

  • -Minimizar el ancho de banda usado en las transmisiones de control y multimedia de VoIP
  • -Evitar problemas de NAT (Network Address Translation)
  • -Soporte para transmitir planes de marcación

Entre las medidas para reducir el ancho de banda cabe destacar que IAX o IAX2 es un protocolo binario en lugar de ser un protocolo de texto como SIP y que hace que los mensajes usen menos ancho de banda.

Para evitar los problemas de NAT el protocolo IAX o IAX2 usa como protocolo de transporte UDP, normalmente sobre el puerto 4569,(el IAX1 usaba el puerto 5036), y tanto la información de señalización como los datos viajan conjuntamente (a diferencia de SIP) y por tanto lo hace menos proclive a problemas de NAT y le permite pasar los routers y firewalls de manera más sencilla.

Funcionamiento de IAX

Para poder entender el protocolo IAX vamos a ver un ejemplo del flujo de datos de una comunicación IAX2:

Una llamada IAX o IAX2 tiene tres fases:

Protocolo IAX
A) Establecimiento de la llamada
El terminal A inicia una conexión y manda un mensaje “new”. El terminal llamado responde con un “accept” y el llamante le responde con un “Ack”. A continuación el terminal llamado da las señales de “ringing” y el llamante contesta con un “ack” para confirmar la recepción del mensaje. Por último, el llamado acepta la llamada con un “answer” y el llamante confirma ese mensaje.

B) Flujo de datos o flujo de audio
Se mandan los frames M y F en ambos sentidos con la información vocal. Los frames M son mini-frames que contienen solo una cabecera de 4 bytes para reducir el uso en el ancho de banda. Los frames F son frames completos que incluyen información de sincronización. Es importante volver a resaltar que en IAX este flujo utiliza el mismo protocolo UDP que usan los mensajes de señalización evitando problemas de NAT.

C) Liberación de la llamada o desconexión
La liberación de la conexión es tan sencillo como enviar un mensaje de “hangup” y confirmar dicho mensaje.

Tipos de tramas o Frames

Los mensajes o tramas que se envian en IAX2 son binarios y por tanto cada bit o conjunto de bits tiene un significado. Como hemos indicado anteriormente existen dos tipos de mensajes principalmente:

A) Tramas F o Full Frames

La particularidad de las tramas o mensajes F es que deben ser respondidas explícitamente. Es decir cuando un usuario manda a otro una trama F (full frame) el receptor debe contestar confirmando que ha recibido ese mensaje. Estas tramas son las únicas que deben ser respondidas explícitamente.

A continuación ponemos el formato binario de una trama F o full frame de IAX2.

Tipo de trama de IAX

El significado de cada uno de los campos es el siguiente:
F : Un bit que indica si la trama es F (full frame) o no. Para que sea F o full frame debe estar puesta a 1.
Source Call Number – Número de llamada de origen : 15 bits que indentifican la conversación de origen ya que puede haber varias comunicaciones multiplexadas por la misma línea.
R : Bit de retransmisión. Se pone a uno cuando la trama es retransmitida.
Destination Call Number – Número de llamada destino : lo mismo que el de origen pero para identificar el destino.
Timestamp o sello de tiempo – Para marcar el tiempo en cada paquete
OSeqno – sec. de salida : Número de secuencia de salida con 8 bits. Comienza en 0 y se va incrementandose cada mensaje.
ISeqno – sec. de entrada : Lo mismo para la entrada.
Frame Type – tipo de trama :Indica la clase de trama de que se trata
C: Puesto a 0 indica que el campo subclase debe tomarse como 7 bits (un solo mensaje): Puesto a 1 indica que el campo subclase se obtiene con 14 bits (dos mensajes consecutivos).
Subclass – subclase – Subclase del mensaje.
Data – Datos : datos que se envían en formato binario.

B) Tramas M o Mini Frames

Las tramas M o mini frames para mandar la información con la menor información posible en la cabecera. Estas tramas no tienen porque ser respondidas y si alguna de ellas se pierde se descarta sin más.

El formato binario de las tramas M o mini frames es el siguiente:

IAX Frame

El significado de los campos es similar al de las tramas F o full frame. En este caso el bit F está puesto a 0 y el sello de tiempo o Timestamp está truncado y solo tiene 16 bits para aligerar la cabecera. Son los clientes los que deben encargarse de llevar un timestamp de 32 bits si lo desean y para sincronizarlo mandar una trama F.

Valores de las Tramas

Frames F o Full Frame

El campo Type Frame o tipo de trama de las tramas F junto con el campo subclase determinan la función del paquete que se está enviado o recibiendo y sirven por tanto como señalización de control.

El campo Type Frame esta formado por 8 bits (1 byte) y los principales valores que puede tomar se muestran en la siguiente tabla:

Tabla 1. Posibles valores del campo “Type Frame” de las tramas F o Full Frame:

Valor “type frame” Descripción Detalles
00000001 DTMF Sirve para enviar dígitos DTMF
00000002 Datos de voz El campo subclase indica el tipo de codec de audio que se utiliza según la tabla 2
00000003 Datos de video El campo subclase indica el tipo de codec de video que se utiliza
00000004 Control Mensajes de control de sesión. Sirve para controlar el estado de los dispostivos finales. El campo subclase indica el tipo concreto de mensaje de control según tabla 3.
00000005 No usado
00000006 Control IAX Mensajes de control del protocolo IAX. Gestiona las interacciones necesarias entre los dispositivos finales. El campo subclase indica el tipo concreto de mensaje de control según tabla 4.
00000007 Texto
00000008 Imagen
00000009 HTML

 

Tabla 2. Significado de los valores del campo subclase para Frame Type = “0x02” (datos de voz)

Valor subclase (Type Frame =0x02) Descripción (codec que se utiliza en la conversación)
0x0001 G.723.1
0x0002 GSM
0x0004 G.711 u (u-law)
0x0008 G.711 a (a-law)
0x0080 LPC10
0x0100 G.729
0x0200 Speex
0x0400 iLBC

 

Tabla 3. Significado de los valores del campo subclase para Frame Type = “0x04” (control)

Valor subclase (Type Frame =0x04) Descripción Detalles
0x01 Hangup La llamada se ha colgado
0x02 Ring El telefono esta sonando
0x03 Ringing (ringback)
0x04 Answer Respuesta
0x05 Busy Condition El usuario está ocupado
0x08 Congestion Condition Existe congestión
0x0e Call Progress Progreso de la llamada

 

Tabla 4. Significado de los valores del campo subclase para Frame Type = “0x06” (control IAX)

Valor subclase (Type Frame =0x05) Descripción Detalles
0x01 NEW Iniciar una nueva llamada 0x10 REGREJ Denegación de registro
0x02 PING Enviar un ping 0x11 REGREL Liberación de registro
0x03 PONG Responder un ping 0x12 VNAK Petición de retransmisión
0x04 ACK Respuesta afirmativa 0x13 DPREQ Petición de dialplan
0x05 HANGUP Inicio de desconexión 0x14 DPREP Respuesta de dialplan
0x06 REJECT Rechazo 0x15 DIAL Marcado
0x07 ACCEPT Aceptación 0x16 TXREQ Petición de transferencia
0x08 AUTHREQ Petición de autenticación 0x17 TXCNT Conexión de transferencia
0x09 AUTHREP Respuesta de autenticación 0x18 TXACC Aceptación de transferencia
0x0a INVAL LLamada no válida 0x19 TXREADY Transferencia preparad
0x0b LAGRQ Petición de Lag 0x1a TXREL Liberación de transferencia
0x0c LAGRP Respuesta de Lag 0x1b TXREJ Rechazo de transferencia
0x0d REGREQ Petición de registro 0x1c QUELCH Parar transmisión de audio
0x0e REGAUTH Autenticación de registro 0x1d UNQUELCH Continuar transmisión de audio
0x0f REGACK ACK de registro 0x20 MWI Indicador de mensaje en espera
0x21 UNSUPPORT Mensaje no soportado

IAX vs SIP – comparación entre IAX y SIP

IAX fue creado por Mark Spencer (también creador de AsterisK) para paliar una serie de problemas o incovenientes que se encontró al utilizar SIP en VoIP y que pensó que debía ser mejorado.

Las principales diferencias ente IAX y SIP son las siguientes:

– Ancho de banda.
IAX utiliza un menor ancho de banda que SIP ya que los mensajes son codificados de forma binaria mientras que en SIP son mensajes de texto. Asimismo, IAX intenta reducir al máximo la información de las cabeceras de los mensajes reduciendo también el ancho de banda

– NAT
En IAX la señalización y los datos viajan conjuntamente con lo cual se evitan los problemas de NAT que frecuentemente aparecen en SIP. En SIP la señalización y los datos viajan de manera separada y por eso aparecen problemas de NAT en el flujo de audio cuando este flujo debe superar los routers y firewalls. SIP suele necesitar un servidor STUN para estos problemas

– Estandarización y uso
SIP es un protocolo estandarizado por la IETF hace bastante tiempo y que es ampliamente implementado por todos los fabricantes de equipos y software. IAX está aun siendo estandarizado y es por ello que no se encuentra en muchos dispositivos existentes en el mercado.

– Utilización de puertos
IAX utiliza un solo puerto (4569) para mandar la información de señalización y los datos de todas sus llamadas. Para ello utiliza un mecanismo de multiplexión o “trunking”. SIP, sin embargo utiliza un puerto (5060) para señalización y 2 puertos RTP por cada conexión de audio (como mínimo 3 puertos). Por ejemplo para 100 llamadas simultaneas con SIP se usarían 200 puertos (RTP) más el puerto 5060 de señalización. IAX utilizaría sólo un puerto para todo (4569)

– Flujo de audio al utilizar un servidor
En SIP si utilizamos un servidor la señalización de control pasa siempre por el servidor pero la información de audio (flujo RTP) puede viajar extremo a extremo sin tener que pasar necesariamente por el servidor SIP. En IAX al viajar la señalización y los datos de forma conjunta todo el tráfico de audio debe pasar obligatoriamente por el servidor IAX. Esto produce una aumento en el uso del ancho de banda que deben soportar los servidores IAX sobretodo cuando hay muchas llamadas simulataneas.

– Otras funcionalidades
IAX es un protocolo pensado para VoIP y transmisión de video y presenta funcionalidades interesantes como la posibilidad de enviar o recibir planes de marcado (dialplans) que resultan muy interesante al usarlo conjuntamente con servidores Asterisk. SIP es un protocolo de proposito general y podría transmitir sin dificultad cualquier información y no sólo audio o video.

19,665 total views, 5 views today



!!! AYUDANOS A MANTENER ESTE SITIO ACTIVO…!!!

Si piensas que te hemos ayudado y merecemos tu apoyo. !!! GRACIAS !!!

Cuando lo hagas tendras acceso inmediato a la documentacion en formato PDF para que la descargues. Encontraras tambien otros tutoriales mas avanzados no publicados en el sitio. Si no puedes o no quieres, no hay problema igual tendras acceso a toda la informacion publicada en este sitio.

!!CLICK AQUI.!! para ver Tutoriales a descargar

!!! GRACIAS POR TU DONACION !!!






Enlace permanente a este artículo: http://elastixtech.com/protocolo-iax/

Deja un comentario