# Comunicaciones Unificadas Con Elastix/Introducción a la VOZIP

   Yo no hice nada por accidente, ni tampoco fueron así mis invenciones; ellas vinieron por el trabajo -- Thomas Edison
La voz sobre IP o VoIP consiste en transmitir voz sobre protocolo IP.
Dicho así puede sonar simple pero las redes IP fueron diseñadas principalmente para datos y muchas de las ventajas de las redes IP para los datos resultan ser una desventaja para la voz pues ésta es muy sensible a retardos y problemas de transmisión por muy pequeños que estos sean.
Por tanto transmitir voz sobre protocolo IP es toda una empresa con muchos problemas técnicos que resolver. Por suerte la tecnología ha evolucionado y la pericia de algunos ingenieros talentosos ha resultado en que podamos abstraernos en gran medida de aquellos problemas inherentes a las redes IP que perjudican la calidad de voz. Solo hace pocos años me recuerdo haciendo uso de llamadas por Internet y puedo decir que la mejora de unos 10 años para acá ha sido notable. Ahora podemos decir que la transmisión de voz por Internet ya es una alternativa rentable al alance de la mayoría de nosotros.

## VoIP: una sopa de protocolos

Hay muchos protocolos involucrados en la transmisión de voz sobre IP. Ya de por sí hay protocolos de red involucrados como el propio protocolo IP y otros protocolos de transporte como TCP o UDP. Encima de ellos se colocan los protocolos de señalización de voz y como si esto fuera poco existen además muchas opciones de protocolos de señalización disponibles lo que puede hacer que todo suene un poco confuso al principio.

### Clasificando los protocolos VoIP

Para simplificar las cosas podríamos clasificar a los protocolos utilizados en la VoIP en tres grupos.

#### Protocolos de señalización

Los protocolos de señalización en VoIP cumplen funciones similares a sus homólogos en la telefonía tradicional, es decir tareas de establecimiento de sesión, control del progreso de la llamada, entre otras. Se encuentran en la capa 5 del modelo OSI, es decir en al capa de Sesión
Existen algunos protocolos de señalización, que han sido desarrollados por diferentes fabricantes u organismos como la ITU o el IETF, y que se encuentran soportados por Asterisk. Algunos son:
* SIP
* IAX
* H.323
* MGCP
* SCCP
Entre estos los más populares en el ámbito de Asterisk son SIP e IAX.
Entraremos en más detalles acerca del protocolo SIP más adelante en otro capítulo.

#### Protocolos de transporte de voz

No se debe confundir aquí con protocolos de transporte de bajo nivel como TCP y UDP. Nos referimos aquí al protocolo que transporta la voz propiamente dicha o lo que comúnmente se denomina carga útil. Este protocolo se llama RTP (Real-time Transport Protocol) y función es simple: transportar la voz con el menor retrazo posible.
Este protocolo entra a funcionar una vez que el protocolo de señalización ha establecido la llamada entre los participantes.

#### Protocolos de plataforma IP

En esta categoría agruparemos a los protocolos básicos en redes IP y que forman la base sobre la cual se añaden los protocolos de voz anteriores. En estos protocolos podríamos mencionar a Ethernet, IP, TCP y UDP.

## Protocolo IP

El protocolo IP sin duda es uno de los más populares jamás implementados, principalmente por el auge del Internet: La gran red de redes, que utiliza este protocolo para su enrutamiento. Por esta razón, antes de entrar en detalles acerca del protocolo IP emplearemos un par de párrafos a resumir los orígenes del Internet.

### El Internet

El Internet tuvo su origen en la década del 60 como un proyecto del Departamento de Defensa de los Estados Unidos con el objetivo de crear una red robusta que conectara algunos organismos públicos con universidades. La idea de la red, que originalmente se llamó ARPANet, era que si alguno de los nodos quedaba fuera de funcionamiento esto no perjudicara significativamente a la red. Para esto se ideó una red descentralizada que pudiera manejar más de un camino entre dos de sus puntos. En resumen, se trataba de construir una red a prueba de fallos (recordemos también que eran épocas de la Guerra Fría) y de bajo coste.

### ¿Qué es el protocolo IP?

El protocolo IP (Internet Protocol) es un protocolo que trabaja a nivel de red donde la información se envía en paquetes llamados paquetes IP. Este protocolo ofrece un servicio “sin garantías” también llamado del “mejor esfuerzo”. Es decir que nada garantiza que los paquetes lleguen a destino, sin embargo se hará lo posible por hacerlos llegar.

### Dirección IP

Una dirección IP es un número único que provee además información de cómo ubicar al equipo que la posee. Para que este número sea único existe una autoridad que controla la asignación de direcciones IP llamada IANA (Internet Assigned Numbers Authority).
Una dirección IP es un número binario que consta de 32 bits. Sin embargo, para fines prácticos y hacer que este número sea más entendible para los humanos casi siempre se representa en un formato de 4 números decimales separados por puntos. Cada uno de estos cuatro números puede tomar un valor de 0 a 255. Un ejemplo de dirección IP es 172.16.254.1

### Paquete IP

Como habíamos dicho antes el protocolo IP es un protocolo que divide la información en paquetes que envía a su destino y la ventaja de tener la información paquetizada es que estos paquetes pueden tomar diferentes caminos para llegar a destino. Es decir que hay redundancia de caminos y es menos probable que todos los paquetes se pierdan.
Bueno, bueno, pero... cómo lucen los famosos paquetes?
El formato de un paquete IP está diseñado para llevar información que permita diseccionarlo a su destino y obviamente que permita re-ensamblar los paquetes en destino para recuperar la información útil. A continuación una figura con una cabecera de paquete IP.

### Direccionamiento IP

El direccionamiento o (enrutamiento) permite determinar la ruta óptima para que un paquete IP llegue su destino. Para saber dónde quiere llegar un paquete dado hay que examinar la dirección IP de destino en el campo Destination Address de la cabecera de un paquete IP.
Los equipos que se encargan de enrutar los paquetes a su destino se llaman ruteadores y básicamente contienen tablas de rutas con información de cómo alcanzar otras redes. Por tanto, una vez que llega un paquete a un ruteador éste examina la dirección IP destino y trata de determinar a qué red pertenece esa dirección IP.
Determinar la red donde quiere llegar un paquete dado no es muy difícil puesto que esa información es parte de la dirección IP. Esto es porque cada dirección IP se podría dividir en dos partes: una parte que identifica a la red y otra que identifica al equipo (también llamado host).
Identificar cada una de estas partes no es tan trivial pues existen redes de diferentes tamaños y por tanto el número de bits que corresponden a la parte de la red y el número de bits que corresponden a la parte del host varían dependiendo del tamaño de la red y se regulan mediante un parámetro adicional llamado máscara de red.

#### Máscara de red y cálculo de dirección de red

Veamos entonces cómo se obtiene la información de a qué red pertenece una dirección IP para que un ruteador pueda encaminar correctamente un paquete a destino.
La máscara de red es un número de 32 bits al igual que una dirección IP. Se llama máscara porque si se superpone a la dirección IP nos permite identificar cuál parte es la que corresponde a la dirección de red y cuál a la dirección del host.
Imaginemos que tenemos la dirección IP 130.5.5.25 con máscara 255.255.255.0. Para ilustrar cómo aplicar la máscara sobre la dirección IP convirtamos estos datos a binario.

## Protocolo TCP

Como ya habíamos dicho el protocolo IP no garantiza que los datos lleguen a destino. Solo hace su mejor esfuerzo para que lleguen.
Por lo tanto era necesario un protocolo que se encargue de controlar la transmisión de datos y por esta razón se diseñó lo que se llama Transmission Control Protocol o simplemente protocolo TCP. TCP es un protocolo de transporte que se transmite sobre IP.
TCP ayuda controlando que los datos transmitidos se encuentren libre de errores y sean recibidos por las aplicaciones en el mismo orden en que fueron enviados. Si se pierden datos en el camino introduce mecanismos para que estos datos sean reenviados.
Obviamente esto implica una carga extra de información en el flujo de datos ya que hay que enviar información de control adicional. Es por esto que TCP es un buen protocolo para control de sesiones pero no tan bueno para transmisión de datos en tiempo real. Por esta razón la voz en sí no se envía usando este protocolo. Sin embargo TCP juega un rol muy importante en muchos protocolos relacionados con un servidor Elastix.
TCP es quien introduce el concepto de “puerto” que no es otra cosa que una abstracción para poder relacionar los flujos de datos con servicios de red específicos (o protocolos de más alto nivel). Por ejemplo, el puerto 80 se asocia con el servicio de Web o el protocolo HTTP; el puerto 25 se asocia con el servicio de correo electrónico o protocolo SMTP.

## Protocolo UDP

UDP (User Datagram Protocol) es otro protocolo de transporte. Se diferencia con TCP en que a este protocolo no le importa si los datos llegan con errores o no y tampoco le importa si llegan en secuencia. La pregunta entonces es para qué sirve este protocolo?
Bueno, un protocolo de transporte no necesariamente tiene que garantizar que la información llegue a destino o llegue en secuencia. Esta es solo una característica extra. Es más o menos análogo a un servicio de transporte de mercancía. Imaginémonos una flota de motocicletas que ofrece el servicio de transporte en una ciudad e imaginémonos que le encomendamos a dicha flota la tarea de transportar un gran cargamento de archivos de una oficina u otra. La compañía se encargará de dividir nuestro cargamento de archivos y distribuirlo en cantidades o paquetes que puedan ser transportados en sus vehículos. Hará lo necesario para que nuestro cargamento llegue a destino. Esto es en esencia el servicio de transporte. Sin embargo podemos escoger dos clases de servicio: una que garantiza que la mercancía llegue segura y otra que no. Estos dos tipos de servicio son análogos a los dos tipos de protocolos de transporte que estamos describiendo en este apartado UDP y TCP.
En fin, la cosa es que UDP divide la información en paquetes, también llamados datagramas, para ser transportados dentro de los paquetes IP a su destino.
Al no ser necesario incluir mucha información de control, el protocolo UDP reduce la cantidad de información extra en los paquetes por lo que es un protocolo más rápido que TCP y adecuado para transmisión de información que debe ser transmitida en tiempo real como la voz.
Es por esta razón que la voz en aplicaciones de VoIP es transmitida sobre este protocolo.

## Codificación de la voz

Ya tenemos claro que para transportar la voz se utilizan algunos protocolos como SIP, IAX y otros como RTP o RTCP. Pero la voz es una onda analógica que necesita transformarse a digital en algún formato antes de ser transmitida.
Lógicamente podríamos tratar de transmitirla tal cual resulta de la conversión analógica-digital (ADC) pero resulta que nos encontramos en una red de paquetes así que debemos paquetizar esta información. Además si la transmitimos tal cual resulta de la conversión ADC desperdiciaríamos recursos de la red por lo que hace falta encontrar un formato óptimo.
Esa búsqueda de un formato óptimo generó algunas alternativas de formatos de transmisión llamadas codecs.

### Codecs

La palabra codec proviene de abreviar las palabras COdificación y DECodficación. Su función principal es la de adaptar la información digital de la voz para obtener algún beneficio. Este beneficio en muchos casos es la compresión de la voz de tal manera que podamos utilizar menos ancho de banda del necesario.
Algunos codecs, soportados por Asterisk y comúnmente usados en comunicaciones de VoIP, son G.711, G.729, GSM, iLBC, entre otros.
Explicaremos brevemente tres de ellos.

#### G.711

G.711 es uno de los codecs más usados de todos los tiempos y proviene de un estándar ITU-T que fue liberado en 1972. Viene en dos sabores llamados u-law y a-law. La primera versión se utiliza en los Estados Unidos y la segunda se utiliza en Europa.
Una de sus características es la calidad de voz debido a que casi no la comprime. Utiliza 64kbit/s, es decir un muestreo de 8 bits a 8kHz. Es el codec recomendado para redes LAN pero hay que pensarlo dos veces antes de utilizarlo en enlaces remotos debido al alto consumo de ancho de banda.
El soporte para este codec ya viene habilitado en Elastix.

#### G.729

También se trata de una recomendación ITU cuyas implementaciones ha sido históricamente licenciadas, o sea que hay que pagar por ellas.
La ventaja en la utilización de G.729 radica principalmente en su alta compresión y por ende bajo consumo de ancho de banda lo que lo hace atractivo para comunicaciones por Internet. Pese a su alta compresión no deteriora la calidad de voz significativamente y por esta razón ha sido ampliamente usado a través de los años por muchos fabricantes de productos de VoIP.
G.729 utiliza 8kbit/s por cada canal. Si comparamos este valor con el de G.711 notaremos que consume 8 veces menos ancho de banda, lo cual a simple vista es un ahorro de recursos significativo.
Para habilitar canales G.729 en Elastix hay que comprar una licencia por cada canal. Esto se puede adquirir en el sitio Web de Digium.

#### GSM

Muchas personas suelen preguntar si el codec GSM tiene algo que ver con el estándar de comunicaciones celulares y la respuesta es que sí.
El estándar que define la tecnología celular GSM (Global System for Mobile communications) incluye este codec.
Esa búsqueda de un formato óptimo generó algunas alternativas de formatos de transmisión llamadas codecs.
GSM comprime aproximadamente a 13kbit/s y ya viene habilitado en Elastix.