Protocolos de VoIP
# Protocolos de VoIP

El objetivo del protocolo de VoIP es dividir en paquetes los flujos de audio para transportarlos sobre redes basadas en IP.

Los protocolos de las redes IP originalmente no fueron diseñados para el fluido en tiempo real de audio o cualquier otro tipo de medio de comunicación.

La PSTN está diseñada para la transmisión de voz, sin embargo tiene sus limitaciones tecnológicas.

Es por lo anterior que se crean los protocolos para VoIP, cuyo mecanismo de conexión abarca una serie de transacciones de señalización entre terminales que cargan dos flujos de audio para cada dirección de la conversación.

A algunos de los protocolos VoIP más importantes y compatibles con Asterisk PBX.

## SIP

SIP (Session Initiation Protocol) es un protocolo de señalización para conferencia, telefonía, presencia, notificación de eventos y mensajería instantánea a través de Internet. Fue desarrollado inicialmente en el grupo de trabajo IETF MMUSIC (Multiparty Multimedia Session Control) y, a partir de septiembre de 1999, pasó al grupo de trabajo IETF SIP.

* Acrónimo de “Session Initiation Protocol”.
* Este protocolo considera a cada conexión como un par y se encarga de negociar las capacidades entre ellos.
* Tiene una sintaxis simple, similar a HTTP o SMTP.
* Posee un sistema de autenticación de pregunta/respuesta.
* Tiene métodos para minimizar los efectos de DoS (Denial of Service o Denegación de Servicio), que consiste en saturar la red con solicitudes de invitación.
* Utiliza un mecanismo seguro de transporte mediante TLS.
* No tiene un adecuado direccionamiento de información para el funcionamiento con NAT.

## IAX

* Acrónimo de “Inter Asterisk eXchange”.
* IAX es un protocolo abierto, es decir que se puede descargar y desarrollar libremente.
* Aún no es un estándar.
* Es un protocolo de transporte, que utiliza el puerto UDP 4569 tanto para señalización de canal como para RTP (Protocolo de transporte en tiempo real).
* Puede truncar o empaquetar múltiples sesiones dentro de un flujo de datos, así requiere de menos ancho de banda y permite mayor número de canales entre terminales.
* En seguridad, permite la autenticación, pero no hay cifrado entre terminales.
* Según la documentación (Asterisk 1.4) el IAX puede usar cifrado (aes128), siempre sobre canales con autentificación MD5.

## IAX2

* Señalización y media a través de un mismo puerto (4569 UDP)
* Se salta los problemas que provoca la mala implementación del NAT de algunos routers.
* Soporte de cifrado nativo RSA con SHA-1. (comunicación de señalización y media totalmente cifrada)
* Soporte TRUNK (incluye varias conversaciones en el mismo paquete, permitiendo ahorrar ancho de banda cuando hay varias conversaciones simultáneas)
* Unificación del modo DTMF (al permitir únicamente DTMF)
* Soporte de JitterBuffer (mejora la calidad de audio en redes con latencia)

## H.323

* Originalmente, fue diseñado para el transporte de videoconferencia.
* Su especificación es compleja.
* H.323 es un protocolo relativamente seguro, ya que utiliza RTP.
* Tiene dificultades con NAT, por ejemplo, para recibir llamadas se necesita direccionar el puerto TCP 1720 al cliente, además de direccionar los puertos UDP para la media de RTP y los flujos de control de RTCP.
* Para más clientes detrás de un dispositivo NAT se necesita gatekeeper en modo proxy.

## MGCP

* Acrónimo de “Media Gateway Control Protocol”.
* Inicialmente diseñado para simplificar en lo posible la comunicación con terminales como los teléfonos.
* MGCP utiliza un modelo centralizado (arquitectura cliente-servidor), de tal forma que un teléfono necesita conectarse a un controlador antes de conectarse con otro teléfono, así la comunicación no es directa.
* Tiene tres componentes, un MGC (Media Gateway Controller), uno o varios MG (Media Gateway) y uno o varios SG (Signaling Gateway), el primero también denominado dispositivo maestro controla, al segundo también denominado esclavo.
* No es un protocolo estándar.

## SCCP

* Acrónimo de “Skinny Call Control Protocol” (en algunas fuentes se enuncia como "Skinny Client Control Protocol).
* Es un protocolo propietario de Cisco.
* Es el protocolo por defecto para terminales con el servidor Cisco Call Manager PBX que es el similar a Asterisk PBX.
* El cliente Skinny usa TCP/IP para transmitir y recibir llamadas.
* Para el audio utiliza RTP, UDP e IP.
* Los mensajes Skinny son transmitidos sobre TCP y usa el puerto 2000.

## Cuadro de comparación

El siguiente cuadro trata de realizar una comparación entre las características más importantes de lo protocolos para voip antes descritos:

| | Tecnología | Disponibilidad | Seguridad | NAT | Total |
| - | - | - | - | - | - |
| SIP | 2 | 2 | 2 | 1 | 7 |
| IAX2 | 2 | 3 | 2 | 3 | 10 |
| H.323 | 3 | 1 | 2 | 1 | 7 |
| MGCP | 2 | 1 | 3 | 2 | 8 |
| SCCP | 3 | 1 | 2 | 4 | 10 |

En la primera columna tenemos a los protocolos y en la primera fila se tiene a las características que se explican a continuación:

* Tecnología: se refiere a los protocolos de red tradicionales utilizados por el protocolo voip como RTP, TCP, UDP; a la arquitectura y a mecanismos de transmisión.
* Disponibilidad: El puntaje varía de acuerdo si es propietario, si tiene una especificación simple o compleja y si es “open”.
* Seguridad: Se refiere a los mecanismos de seguridad que implementa como la autenticación, el cifrado del flujo, etc.
* NAT: El puntaje varía de acuerdo a en que medida esto es soportado por el protocolo voip.

## Conclusiones

Se puede concluir que el protocolo que obtiene mayor puntaje es IAX, sin embargo sus características no son uniformes como en el caso de SIP que presenta paridad en todos los aspectos. Hay que notar también que los demás protocolos destacan en la tecnología que poseen, es decir son más complejos.

