Las solicitudes SIP se nombran por un método. RFC 3261 define seis: INVITE (iniciar una sesión), ACK (confirmar una respuesta final a un INVITE), BYE (terminar una sesión), CANCEL (abortar un INVITE pendiente), REGISTER (registrar una ubicación) y OPTIONS (consultar capacidades). Los RFC de extensión añaden INFO, PRACK, UPDATE, SUBSCRIBE/NOTIFY, REFER, MESSAGE y PUBLISH.
Los seis métodos básicos
RFC 3261 define el conjunto básico de solicitudes que toda implementación SIP admite. INVITE establece una sesión y transporta la oferta SDP inicial. ACK confirma una respuesta final a un INVITE; es inusual por ser una solicitud que completa la negociación en tres fases del INVITE en lugar de esperar su propia respuesta. BYE termina una sesión establecida. CANCEL aborta un INVITE que aún no ha recibido una respuesta final (una llamada que sigue sonando). REGISTER indica a un registrar dónde es alcanzable un usuario. OPTIONS consulta las capacidades de un par y se reutiliza ampliamente como keepalive ligero.
| Método | Propósito | Nota |
|---|---|---|
| INVITE | Iniciar una sesión | Transporta la oferta SDP; crea un diálogo |
| ACK | Confirmar una respuesta final a INVITE | Completa el handshake INVITE de tres vías |
| BYE | Finalizar una sesión establecida | Enviado por cualquiera de las partes en el diálogo |
| CANCEL | Cancelar una solicitud INVITE pendiente | Solo antes de una respuesta final (sigue sonando) |
| REGISTER | Registrar la ubicación Contact de un usuario | Actualizado periódicamente (Expires) |
| OPTIONS | Consultar capacidades | Se reutiliza comúnmente como keepalive / comprobación de estado |
Por qué ACK y CANCEL son especiales
Dos métodos básicos se comportan de forma distinta al resto. ACK no es un par normal de solicitud/respuesta: confirma la respuesta final a un INVITE y no transporta respuesta propia. Para un 2xx se envía de extremo a extremo como una transacción aparte; para un fallo no-2xx se genera salto a salto dentro de la transacción del INVITE. CANCEL solo tiene sentido mientras un INVITE sigue pendiente; una vez que llega una respuesta final, usa BYE en su lugar. Acertar con estos dos es el meollo de una máquina de estados SIP correcta.
Métodos de extensión comunes
Más allá de los seis básicos, un conjunto de métodos de extensión gestiona mensajería, eventos y actualizaciones en mitad de la llamada. SUBSCRIBE/NOTIFY implementan el marco de eventos (presencia, indicación de mensaje en espera, estado de diálogo). REFER desencadena la transferencia de llamada. MESSAGE transporta mensajes instantáneos / SMS-sobre-SIP. UPDATE modifica una sesión antes de que esté completamente establecida (early media). PRACK confirma de forma fiable las respuestas provisionales. INFO transporta información en mitad de la sesión, como DTMF. PUBLISH envía el estado de un evento a un servidor.
| Método | RFC | Propósito |
|---|---|---|
| INFO | RFC 6086 | Información de mitad de sesión (por ejemplo, dígitos DTMF) |
| PRACK | RFC 3262 | Acuse de recibo fiable de las respuestas provisionales (1xx) |
| UPDATE | RFC 3311 | Modificar una sesión antes de la respuesta final (medios tempranos) |
| SUBSCRIBE / NOTIFY | RFC 6665 | Suscripción y notificación de eventos (presencia, MWI) |
| REFER | RFC 3515 | Solicitar transferencia a otra parte |
| MESSAGE | RFC 3428 | Mensajería instantánea / mensajería en modo página |
| PUBLISH | RFC 3903 | Enviar el estado del evento (por ejemplo, presencia) a un servidor |
Una línea de solicitud en el cable
Una solicitud SIP comienza con una línea de solicitud: el método, la Request-URI (el destino actual) y la versión de SIP. A continuación siguen las cabeceras y un cuerpo opcional. El ejemplo es el inicio de un INVITE hacia un destinatario; la Request-URI la reescriben los proxies a medida que se enruta la solicitud, mientras que la cabecera To permanece fija como objetivo lógico.
INVITE sip:bob@example.com SIP/2.0
Via: SIP/2.0/UDP host.example.net;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Bob <sip:bob@example.com>
From: Alice <sip:alice@example.net>;tag=1928301774
Call-ID: a84b4c76e66710@host.example.net
CSeq: 314159 INVITE
Contact: <sip:alice@host.example.net>
Content-Type: application/sdp
Content-Length: 142Preguntas frecuentes
¿Cuáles son los seis métodos básicos de SIP?
INVITE (iniciar una sesión), ACK (confirmar una respuesta final a un INVITE), BYE (terminar una sesión), CANCEL (abortar un INVITE pendiente), REGISTER (registrar la ubicación de un usuario) y OPTIONS (consultar capacidades). Se definen en RFC 3261; todo lo demás es una extensión.
¿Cuál es la diferencia entre CANCEL y BYE?
CANCEL aborta un INVITE que aún no ha recibido una respuesta final, una llamada que sigue sonando. BYE termina una sesión ya establecida. Usa CANCEL antes de que se conteste la llamada y BYE después; usar el equivocado deja la máquina de estados incoherente.
¿Por qué ACK no recibe respuesta?
ACK existe para confirmar la respuesta final a un INVITE y completar la negociación en tres fases, así que está definido para no tener respuesta propia. Para un 2xx es una transacción aparte de extremo a extremo; para un fallo se genera salto a salto dentro de la transacción del INVITE.
¿Cómo se envía DTMF en SIP?
Lo más común, como paquetes de telephone-event de RTP (RFC 4733) en el flujo de medios, y como alternativa mediante mensajes SIP INFO que transportan los dígitos por el trayecto de señalización. El telephone-event de RTP se prefiere porque se mantiene sincronizado con el audio.
¿Qué método transfiere una llamada?
REFER (RFC 3515). Pide al destinatario que inicie una nueva solicitud (normalmente un INVITE) hacia un tercero nombrado en la cabecera Refer-To, implementando la transferencia de llamada. Los mensajes NOTIFY informan luego del progreso de la llamada referida al transferente.
Especificaciones de la fuente
Las normas publicadas en las que se basa esta página. Se abre en una pestaña nueva.