SIP:Session Initiation Protocol. El futuro de las telecomunicaciones.

Con base en nuestra serie de artículos pasados dedicados a tecnología de VoIP y redes convergentes, podemos dar paso a uno que es de mayor interés y propiedad para la comunidad de desarrolladores, pues es aquí donde se unen las soluciones de hardware con las de software.

La era de las redes de voz y datos independientes está gradualmente llegando a su fin. Como hemos revisado antes, en el futuro sólo existirán redes convergentes que serán la base para todas las formas de comunicación, y además de los beneficios en reducción de costos de operación, la convergencia habilitará una nueva gama de servicios para los usuarios finales. Todas estas nuevas aplicaciones tendrán al Session Initiation Protocol (SIP) como el mecanismo de control central para su comunicación.

Nunca antes había sido tan sencillo el desarrollo de aplicaciones para una red de comunicaciones. En el pasado era inevitable el uso de interfases y protocolos propietarios, afortunadamente ahora podemos utilizar un estándar abierto a la comunidad de Internet, el Session Initiaton Protocol. Cuando combinamos este estándar junto con el poder y simplicidad de la tecnología de Java, obtenemos un SIP Servlet API. Con estos Servlets un desarrollador puede crear y distribuir nuevos servicios en fracciones de tiempo del que antes se requería cuando se utilizaba tecnología propietaria.

La adopción de SIP está creciendo; son cada vez más los proveedores de equipo de redes y telecomunicaciones que utilizan SIP como el protocolo estándar de sus aplicaciones. Adicionalmente la 3GPP (3rd Generation Partnership Project) ha adoptado a SIP como el mecanismo de control de llamadas para la nueva generación de redes. Esto, sumado con el crecimiento acelerado en la adopción de VoIP por las empresas, nos indica que tenemos que esperar grandes cosas por parte de la gente dedicada al desarrollo de aplicaciones en las telecomunicaciones.

Durante las entregas de este artículo, estaremos revisando los conceptos alrededor del protocolo SIP. Revisaremos el rol que juegan los User Agents (UA) y los SIP Proxy Servers, además de entender cómo establecer la comunicación entre dos dispositivos. Esto nos proveerá las bases para continuar con el SIP Servlet API, donde revisaremos sus conceptos, su comportamiento como Proxy actuando como origen y terminación UA, y cuando actúa como Back-to-Back User Agent (B2BUA); y por último, muestras de código con SIP Servlets que ilustren lo sencillo que es la programación con el API.

¿Que es SIP?
SIP es un Protocolo de señalización que se utiliza para iniciar y administrar sesiones interactivas de media entre dispositivos de redes IP. En 1999 la Internet Engineering Task Force (IETF) aprobó a SIP como el RFC 2543, desde entonces SIP ha ido evolucionando a través de varias revisiones que nos llevan al actual RFC 3261.

Un punto importante a resaltar es que al protocolo SIP no le concierne la naturaleza o el contenido de la llamada que inicia y coordina. Como consecuencia les permite a los usuarios decidir el tipo de uso que harán de las sesiones e intercambios de media. Las sesiones no están limitadas sólo a voz; una vez establecida la sesión, los usuarios pueden intercambiar cualquier tipo de contenido.

Conceptos de SIP
El RFC de SIP define varios conceptos y elementos claves que se requieren para una red SIP.

• Un User Agent (UA), o punto de fin, le permite a los usuarios crear y administrar la comunicación de una sesión. Un UA, ya sea un teléfono SIP o una aplicación de software, maneja las características de la sesión y la administración de tareas como transferencia, terminación, y la invocación de servicios, por nombrar algunos. Adicionalmente los UAs pueden identificar disponibilidad del usuario y negociar las capacidades de un sesión.
• Una sesión se establece cuando un UA (llamante) invita a otro UA (llamado) a integrarse a una sesión de comunicación.
• Un mensaje SIP es una entidad de texto. Existen dos tipos de mensajes, peticiones y respuestas. Las peticiones son enviadas de un UA a otro, quién en su caso envía respuestas. Cualquier mensaje que pasa de un llamante a un llamado se mueve en dirección downstream, y a la inversa, los mensajes que se viajan de forma opuesta se mueven en dirección upstream.
• Un SIP Proxy Server típicamente realiza el manejo de registros, implementa las políticas del ruteo de llamadas y se encarga de las autenticaciones y autorizaciones. Su tarea primaria se asegurar que cualquier petición sea enviada a la identidad más cercana al usuario destino. El proxy interpreta y, en caso de ser necesario, reescribe partes específicas de un mensaje antes de reenviarlo. Un mensaje SIP puede pasar a través de varios SIP Proxy Server antes de llegar a su UA destino. Un UA puede estar configurado para enviar todas sus peticiones específicamente a un SIP Proxy Server. Este último se conocería como Outbound Proxy.
• Una dirección SIP, también conocida como SIP URL, es única e identifica a un usuario durante la creación de una sesión de comunicaciones. Esta dirección se asemeja a una dirección de correo con la particularidad de tener el formato: sip:prefijo. Por ejemplo, un teléfono en nuestro escritorio puede tener configurada la siguiente dirección SIP: sip:user@194.195.100.20

Típicamente se configuran las direcciones SIP con el dominio de la compañía en cuestión, por ejemplo: sip:ariel@softwareguru.com.mx. De esta forma, SIP nos permite registrar un proceso que asocie nuestra dirección SIP con uno o varios UAs. Cuando una llamada es realizada a una dirección SIP, ésta es enviada a un SIP Proxy Server. Este último ejecuta una búsqueda en sus registros para determinar a cuál UA se ruteará la llamada. La información contenida en estos registros puede ser modificada o eliminada en cualquier momento.

El registro de varios UAs con una sola dirección SIP causará que todos los teléfonos suenen al llamar a esta dirección, a este proceso se le conoce como bifurcación (forking). Existen dos tipos de bifurcación: secuencial y paralela. Cuando tenemos una bifurcación secuencial, cada UA será notificado en secuencia después de estar llamando por cierto periodo de tiempo. En contraste, en una bifurcación paralela todos los UAs se notifican al de forma simultánea, y la sesión se establece con el primer UA en tomar la llamada o, dependiendo del tiempo, con más de un UA.

En el próximo artículo revisaremos los conceptos básicos de los SIP Servlets, los comportamientos del SIP Proxy Server y muestras de código de ambos.