SIP (Session Initiation Protocol)
Información Básica
SIP (Protocolo de Iniciación de Sesión) es un protocolo de señalización y control de llamadas ampliamente utilizado para establecer, modificar y terminar sesiones multimedia, incluyendo voz, video y mensajería instantánea, sobre redes IP. Desarrollado por el Grupo de Trabajo de Ingeniería de Internet (IETF), SIP está definido en RFC 3261 y se ha convertido en el estándar de facto para VoIP y comunicaciones unificadas.
Algunas características clave de SIP incluyen:
Protocolo Basado en Texto: SIP es un protocolo basado en texto, lo que lo hace legible para humanos y más fácil de depurar. Está basado en un modelo de solicitud-respuesta, similar a HTTP, y utiliza métodos como INVITE, ACK, BYE y CANCEL para controlar sesiones de llamadas.
Escalabilidad y Flexibilidad: SIP es altamente escalable y puede ser utilizado en implementaciones a pequeña escala, así como en entornos empresariales grandes y de grado de operador. Puede ser fácilmente extendido con nuevas características, lo que lo hace adaptable a varios casos de uso y requisitos.
Interoperabilidad: La amplia adopción y estandarización de SIP aseguran una mejor interoperabilidad entre diferentes dispositivos, aplicaciones y proveedores de servicios, promoviendo una comunicación fluida en diversas plataformas.
Diseño Modular: SIP trabaja con otros protocolos como RTP (Protocolo de Transporte en Tiempo Real) para la transmisión de medios y SDP (Protocolo de Descripción de Sesión) para describir sesiones multimedia. Este diseño modular permite una mayor flexibilidad y compatibilidad con diferentes tipos de medios y códecs.
Servidores Proxy y de Redirección: SIP puede utilizar servidores proxy y de redirección para facilitar el enrutamiento de llamadas y proporcionar funciones avanzadas como reenvío de llamadas, transferencia de llamadas y servicios de correo de voz.
Presencia y Mensajería Instantánea: SIP no se limita a la comunicación de voz y video. También soporta presencia y mensajería instantánea, permitiendo una amplia gama de aplicaciones de comunicación unificada.
A pesar de sus muchas ventajas, SIP puede ser complejo de configurar y gestionar, especialmente al tratar con problemas de travesía NAT y cortafuegos. Sin embargo, su versatilidad, escalabilidad y amplio soporte en la industria lo convierten en una opción popular para VoIP y comunicación multimedia.
Métodos SIP
Los métodos SIP principales definidos en RFC 3261 incluyen:
INVITE: Utilizado para iniciar una nueva sesión (llamada) o modificar una existente. El método INVITE lleva la descripción de la sesión (típicamente utilizando SDP) para informar al destinatario sobre los detalles de la sesión propuesta, como tipos de medios, códecs y protocolos de transporte.
ACK: Enviado para confirmar la recepción de una respuesta final a una solicitud INVITE. El método ACK asegura la fiabilidad de las transacciones INVITE proporcionando un acuse de recibo de extremo a extremo.
BYE: Utilizado para terminar una sesión establecida (llamada). El método BYE es enviado por cualquiera de las partes en la sesión para indicar que desean finalizar la comunicación.
CANCEL: Enviado para cancelar una solicitud INVITE pendiente antes de que se establezca la sesión. El método CANCEL permite al remitente abortar una transacción INVITE si cambian de opinión o si no hay respuesta del destinatario.
OPTIONS: Utilizado para consultar las capacidades de un servidor o agente de usuario SIP. El método OPTIONS puede ser enviado para solicitar información sobre métodos soportados, tipos de medios u otras extensiones sin establecer realmente una sesión.
REGISTER: Utilizado por un agente de usuario para registrar su ubicación actual con un servidor registrador SIP. El método REGISTER ayuda a mantener un mapeo actualizado entre el URI SIP de un usuario y su dirección IP actual, permitiendo el enrutamiento y entrega de llamadas.
Ten en cuenta que para llamar a alguien no es necesario usar el REGISTER para nada.
Sin embargo, es posible que para realizar un INVITE el llamante necesite autenticarse primero o recibirá una respuesta 401 Unauthorized
.
Además de estos métodos principales, existen varios métodos de extensión SIP definidos en otros RFC, como:
SUBSCRIBE: Definido en RFC 6665, el método SUBSCRIBE se utiliza para solicitar notificaciones sobre el estado de un recurso específico, como la presencia de un usuario o el estado de una llamada.
NOTIFY: También definido en RFC 6665, el método NOTIFY es enviado por un servidor para informar a un agente de usuario suscrito sobre cambios en el estado de un recurso monitoreado.
REFER: Definido en RFC 3515, el método REFER se utiliza para solicitar que el destinatario realice una transferencia o se refiera a un tercero. Esto se utiliza típicamente en escenarios de transferencia de llamadas.
MESSAGE: Definido en RFC 3428, el método MESSAGE se utiliza para enviar mensajes instantáneos entre agentes de usuario SIP, permitiendo la comunicación basada en texto dentro del marco de SIP.
UPDATE: Definido en RFC 3311, el método UPDATE permite modificar una sesión sin afectar el estado del diálogo existente. Esto es útil para actualizar parámetros de sesión, como códecs o tipos de medios, durante una llamada en curso.
PUBLISH: Definido en RFC 3903, el método PUBLISH es utilizado por un agente de usuario para publicar información de estado de eventos en un servidor, haciéndola disponible para otras partes interesadas.
Códigos de Respuesta SIP
1xx (Respuestas Provisionales): Estas respuestas indican que la solicitud fue recibida y el servidor continúa procesándola.
100 Trying: La solicitud fue recibida y el servidor está trabajando en ella.
180 Ringing: El destinatario está siendo alertado y tomará la llamada.
183 Session Progress: Proporciona información sobre el progreso de la llamada.
2xx (Respuestas Exitosas): Estas respuestas indican que la solicitud fue recibida, entendida y aceptada con éxito.
200 OK: La solicitud fue exitosa y el servidor la ha cumplido.
202 Accepted: La solicitud fue aceptada para su procesamiento, pero aún no se ha completado.
3xx (Respuestas de Redirección): Estas respuestas indican que se requiere una acción adicional para cumplir con la solicitud, típicamente contactando un recurso alternativo.
300 Multiple Choices: Hay múltiples opciones disponibles y el usuario o cliente debe elegir una.
301 Moved Permanently: El recurso solicitado ha sido asignado a un nuevo URI permanente.
302 Moved Temporarily: El recurso solicitado está temporalmente disponible en un URI diferente.
305 Use Proxy: La solicitud debe ser enviada a un proxy especificado.
4xx (Respuestas de Error del Cliente): Estas respuestas indican que la solicitud contiene una sintaxis incorrecta o no puede ser cumplida por el servidor.
400 Bad Request: La solicitud estaba mal formada o inválida.
401 Unauthorized: La solicitud requiere autenticación de usuario.
403 Forbidden: El servidor entendió la solicitud pero se niega a cumplirla.
404 Not Found: El recurso solicitado no se encontraba en el servidor.
408 Request Timeout: El servidor no recibió una solicitud completa dentro del tiempo que estaba preparado para esperar.
486 Busy Here: El destinatario está ocupado actualmente y no puede tomar la llamada.
5xx (Respuestas de Error del Servidor): Estas respuestas indican que el servidor no pudo cumplir con una solicitud válida.
500 Internal Server Error: El servidor encontró un error al procesar la solicitud.
501 Not Implemented: El servidor no soporta la funcionalidad requerida para cumplir con la solicitud.
503 Service Unavailable: El servidor actualmente no puede manejar la solicitud debido a mantenimiento o sobrecarga.
6xx (Respuestas de Fallo Global): Estas respuestas indican que la solicitud no puede ser cumplida por ningún servidor.
600 Busy Everywhere: Todos los destinos posibles para la llamada están ocupados.
603 Decline: El destinatario no desea participar en la llamada.
604 Does Not Exist Anywhere: El recurso solicitado no está disponible en ninguna parte de la red.
Ejemplos
Ejemplo de SIP INVITE
Ejemplo de Registro SIP
El método REGISTER se utiliza en el Protocolo de Inicio de Sesión (SIP) para permitir que un agente de usuario (UA), como un teléfono VoIP o un softphone, registre su ubicación con un servidor registrador SIP. Este proceso permite que el servidor sepa dónde dirigir las solicitudes SIP entrantes destinadas al usuario registrado. El servidor registrador suele ser parte de un servidor proxy SIP o un servidor de registro dedicado.
Aquí tienes un ejemplo detallado de los mensajes SIP involucrados en un proceso de autenticación de REGISTRO:
Solicitud de REGISTER inicial del UA al servidor registrador:
Este mensaje REGISTER inicial es enviado por el UA (Alice) al servidor registrador. Incluye información importante como la duración de registro deseada (Expires), el URI SIP del usuario (sip:alice@example.com), y la dirección de contacto del usuario (sip:alice@192.168.1.100:5060).
Respuesta 401 No autorizado del servidor registrador:
El servidor del registrador responde con un mensaje de "401 No autorizado", que incluye un encabezado "WWW-Authenticate". Este encabezado contiene la información necesaria para que el UA se autentique, como el reino de autenticación, nonce y algoritmo.
Solicitud de REGISTRO con credenciales de autenticación:
El UA envía otra solicitud REGISTER, esta vez incluyendo el encabezado "Authorization" con las credenciales necesarias, como el nombre de usuario, reino, nonce y un valor de respuesta calculado utilizando la información proporcionada y la contraseña del usuario.
Así es como se calcula la respuesta de autorización:
Respuesta de registro exitosa del servidor registrador:
Después de que el servidor de registro verifica las credenciales proporcionadas, envía una respuesta "200 OK" para indicar que el registro fue exitoso. La respuesta incluye la información de contacto registrada y el tiempo de expiración del registro. En este punto, el agente de usuario (Alice) está registrado con éxito en el servidor de registro SIP, y las solicitudes SIP entrantes para Alice pueden ser dirigidas a la dirección de contacto apropiada.
Ejemplo de Llamada
No se menciona, pero el Usuario B necesita haber enviado un mensaje REGISTER a Proxy 2 antes de poder recibir llamadas.
Última actualización