En el tema anterior hacía una introducción a las diferentes entidades lógicas que podía adoptar un servidor SIP. En esta ocasión, trataré de entrar más en detalle mediante el uso de ejemplos prácticos que podemos encontrarnos en cualquier entorno VoIP. Soy de los que piensan que con un ejemplo se ven las cosas más claras.
Vamos a entrar en materia.
Servidores SIP Proxy en entorno VoIP (Proxy Servers)
En este caso, vamos a ver el flujo de una llamada a través de un servidor que hace de proxy. Esta entidad tendrá que intermediar entre los dos UA para negociar con éxito los mensajes SIP y posteriormente una vez establecida la sesión, dejar a los UA el intercambio de voz.
Walter White desconoce dónde está registrado Jesse Pinkman, por ese motivo el servidor Proxy deberá localizar y enrutar la petición INVITE hacia su destino.
1. Walter White realiza una llamada la método INVITE para establecer una sesión entre él y Jesse Pinkman (ambos serían entidades UA).
INVITE sip:jesse.pinkman@wikiasterisk.org SIP/2.0
Via: SIP/2.0/UDP 100.101.102.103:5060;branch=z0hG5bKmp28a
Max-Forwards: 70
To: Jesse Pinkman <sip:jesse.pinkman@wikiasterisk.org>
From: Walter White <sip:walter.white@voipelia.com>;tag=53
Call-ID: 4827322-391-32934
CSeq: 1 INVITE
Subject: ¿Dónde estás exactamente?
Contact: <sip:walter.white@voipelia.com>
Content-Type: application/sdp
Content-Length: 159
<SDP OMITIDO>
2. El proxy realizará una búsqueda en su base de datos de la SIP URI destino:
<sip:jesse.pinkman@wikiasterisk.org>
Una vez localizado, retransmitirá una petición INVITE a la dirección IP de Jesse Pinkman y añadirá en la cabecera SIP un segundo campo Vía con la dirección del proxy.
INVITE sip:jesse.pinkman@200.201.202.203
Via: SIP/2.0/UDP proxy.wikiasterisk.org:5060;branch=z9hG4bK83842.1
Via: SIP/2.0/UDP 100.101.102.103:5060;branch=z0hG5bKmp28a
Max-Forwards: 69
To: Jesse Pinkman <sip:jesse.pinkman@wikiasterisk.org>
From: Walter White <sip:walter.white@voipelia.com>;tag=53
Call-ID: 4827322-391-32934
CSeq: 1 INVITE
Contact: <sip:walter.white@voipelia.com>
Content-Type: application/sdp
Content-Length: 159
<SDP OMITIDO>
3. Gracias a la presencia de este segundo campo Vía, Jesse Pinkman ya conoce de la existencia de un servidor proxy y le responde con un mensaje 180 Ringing.
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP proxy.wikiasterisk.org:5060;branch=z9hG4bK83842.1;received=100.101.102.105
Via: SIP/2.0/UDP 100.101.102.103:5060;branch=z0hG5bKmp28a
To: Jesse Pinkman <sip:jesse.pinkman@wikiasterisk.org>;tag=425260
From: Walter White <sip:walter.white@voipelia.com>;tag=53
Call-ID: 4827322-391-32934
CSeq: 1 INVITE
Contact: <sip:jesse.pinkman@200.201.202.203>
Content-Length: 0
4. El servidor proxy procesa el primer campo Vía (su propia dirección) y lo elimina de la cabecera SIP. A continuación retransmite la respuesta 180 Ringing hacia su próximo salto (Vía), Walter White.
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 100.101.102.103:5060;branch=z0hG5bKmp28a
To: Jesse Pinkman <sip:jesse.pinkman@wikiasterisk.org>;tag=425260
From: Walter White <sip:walter.white@voipelia.com>;tag=53
Call-ID: 4827322-391-32934
CSeq: 1 INVITE
Contact: <sip:jesse.pinkman@200.201.202.203>
Content-Length: 0
5. La llamada es aceptada por Jesse Pinkman,el cual manda una respuesta 200 OK hacia el servidor Proxy con el siguiente formato.
SIP/2.0 200 OK
Via: SIP/2.0/UDP proxy.wikiasterisk.org:5060;branch=z9hG4bK83842.1;received=100.101.102.105
Via: SIP/2.0/UDP 100.101.102.103:5060;branch=z0hG5bKmp28a
To: Jesse Pinkman <sip:jesse.pinkman@wikiasterisk.org>;tag=425260
From: Walter White <sip:walter.white@voipelia.com>;tag=53
Call-ID: 4827322-391-32934
CSeq: 1 INVITE
Contact: <sip:jesse.pinkman@200.201.202.203>
Content-Type: application/sdp
Content-Length: 159
<SDP omitido>
6. El servidor proxy retransmite la respuesta hacia Walter White, eliminando de nuevo de la cabecera SIP el campo Vía de su propia dirección.
SIP/2.0 200 OK
Via: SIP/2.0/UDP 100.101.102.103:5060;branch=z0hG5bKmp28a
To: Jesse Pinkman <sip:jesse.pinkman@wikiasterisk.org>;tag=425260
From: Walter White <sip:walter.white@voipelia.com>;tag=53
Call-ID: 4827322-391-32934
CSeq: 1 INVITE
Contact: <sip:jesse.pinkman@200.201.202.203>
Content-Type: application/sdp
Content-Length: 159
<SDP omitido>
7. Como se puede observar, el campo Contact de la cabecera SIP contiene la dirección SIP URI de Jesse Pinkman, por tanto, Walter White podrá mandar el método ACK como respuesta al INVITE que genero él mismo, directamente a Jesse Pinkman, sin pasar por el servidor Proxy.
ACK sip:jesse.pinkman@200.201.202.203
Via: SIP/2.0/UDP 100.101.102.103:5060;branch=z0hG5bKka53
Max-Forwards: 70
To: Jesse Pinkman <sip:jesse.pinkman@wikiasterisk.org>tag=425260
From: Walter White <sip:walter.white@voipelia.com>tag=53
Call-ID: 4827322-391-32934
CSeq: 1 ACK
Content-Length: 0
8. Se produce el intercambio de media entre Walter Whitey Jesse Pinkman.
9. Para finalizar la sesión, Jesse Pinkman enviará un mensaje BYE y Walter White responderá con un mensaje
200 OK.
BYE sip:walter.white@voipelia.com SIP/2.0
Via: SIP/2.0/UDP 200.201.202.203:5060;branch=z0hG5bK5443
Max-Forwards: 70
To: Walter White <sip:walter.white@voipelia.com; tag=53
From: Jesse Pinkman <sip:jesse.pinkman@wikiasterisk.org>tag=425260
Call-ID: 4827322-391-32934
CSeq: 2000 BYE
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP 200.201.202.203:5060;branch=z0hG5bK5443
To: Walter White <sip:walter.white@voipelia.com>tag=53
From: Jesse Pinkman <sip:jesse.pinkman@wikiasterisk.org>tag=425260
Call-ID: 4827322-391-32934
CSeq: 2000 BYE
Content-Length: 0
Como hemos ido viendo en el ejemplo, un servidor proxy tiene muchas funciones, pero entre las más importantes, sería la localización de los UA u otros servidores SIP y la retransmisión de los mensajes SIP hacia los destinos oportunos para establecer sesiones entre los dos puntos.
1 comentario en «VoIP: Breve Analisis de los Servidores SIP II»