A continuación, se detalla la estructura de un paquete SIP, así como su transmisión por la RED.
Se tratan conceptos algo abstractos en telefonía, como SDP, RTP y como localizar estos parámetros en las trazas.
También se detalla los códecs ofrecidos y soportados por cada una de las partes en una comunicación por el protocolo SIP.
Pulsa leer más para acceder al contenido completo.
Traza sip:
INVITE sip:911XXXXXX@XX.XX.XX.XX;user=phone SIP/2.0 Max-Forwards: 69 Session-Expires: 3600;refresher=uac Min-SE: 600 Supported: timer, 100rel To: <sip:9XXXXXXXX@XX.XX.XX.XX;user=phone> From: <sip:6XXXXXXXX@YY.YY.YY.YY;user=phone>;tag=3746418364-214331909 P-Asserted-Identity: <sip:6XXXXXXXX@YY.YY.YY.YY;user=phone> Call-ID: 51062176-3746418364-1539934950@GXXXXXXXXX.mydomain.com CSeq: 1 INVITE Allow: PUBLISH,MESSAGE,UPDATE,PRACK,SUBSCRIBE,REFER,INFO,NOTIFY,REGISTER,OPTIONS,BYE,INVITE,ACK,CANCEL Via: SIP/2.0/UDP YY.YY.YY.YY:5060;branch=z9hG4bK031b6f191198f6239edc5c1539a5af68 Contact: <sip:6XXXXXXXX@YY.YY.YY.YY:5060> Content-Type: application/sdp Accept: application/sdp Content-Length: 494 v=0 o=GXXXXXXXXX 1537429953240 1537429953240 IN IP4 YY.YY.YY.YY s=sip call c=IN IP4 UU.UU.UU.UU t=0 0 m=audio 22686 RTP/AVP 8 0 18 101 c=IN IP4 212.31.198.118 a=rtpmap:8 PCMA/8000 a=rtpmap:0 PCMU/8000 a=fmtp:18 annexb=no a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-15 a=ptime:20
Línea de solicitud
INVITAR sip:911XXXXXX@XX.XX.XX.XX;user=phone SIP/2.0
La línea de solicitud me dice que se trata de un INVITE enviado a sip:911XXXXXX@XX.XX.XX.XX. También me dice que INVITE utiliza SIP versión 2.0 (la versión actual).
Al final de la llamada, verá un mensaje SIP con un BYE en la línea de solicitud.
FROM
From: <sip:6XXXXXXXX@YY.YY.YY.YY;user=phone>;tag=3746418364-214331909
From es el primer encabezado de este INVITE. Es importante saber que From podría haber aparecido en cualquier parte de la sección del encabezado. Con la excepción de la Vía, los encabezados SIP no dependen del pedido.
El parámetro de «tag» se usa para identificar la pierna de llamada o el diálogo.
TO
sip:911XXXXXX@XX.XX.XX.XX
Este encabezado To indica que la parte llamada es 911XXXXXX@XX.XX.XX.XX. Observe que no hay etiqueta. Una etiqueta será aplicada por el destinatario.
Call-ID:
Identificador de llamada: 51062176-3746418364-1539934950@GXXXXXXXXX.mydomain.com
Call-ID se usa para crear una identidad única para esta sesión. El requisito para Call-ID es que debe ser único globalmente. Una forma común de garantizar la exclusividad es generar un número aleatorio exclusivo del remitente y luego anexar la dirección IP del remitente. Este número más la dirección IP lo hace globalmente único ya que no hay dos puntos finales que tengan la misma dirección IP.
CSeq
CSeq: 1 INVITA
La secuencia de comando se usa para identificar el número de solicitudes de un tipo específico. Aquí, el encabezado nos dice que esta es la 1ª INVITACIÓN enviada por este cliente blando. El cliente incrementará el número en uno para la próxima INVITACIÓN.
Vía
Via: SIP/2.0/UDP YY.YY.YY.YY:5060;branch=z9hG4bK031b6f191198f6239edc5c1539a5af68
Via se utiliza para registrar la ruta de un mensaje SIP.
Escribí extensamente sobre el encabezado Via en mi artículo, Entendiendo el encabezado Vía del SIP .
Content-Length:
Longitud del contenido: 494
Content-Length es el número de byes en el cuerpo del mensaje. Una longitud de contenido de 0 (cero) indica que no hay cuerpo de mensaje. Este cuerpo de mensaje tiene 306 bytes de longitud. Necesitamos encontrar Content-Type para saber qué representan esos bytes.
Max-Forwards:
Max-Adelante: 69
Max-Forwards se utiliza para detectar y detener un mensaje SIP de bucle sin fin alrededor de la red. La mayoría de los clientes, como este, usan el valor predeterminado de 70.
Content-Type:
Tipo de contenido: application / sdp
Si hay un cuerpo del mensaje, Content-Type le dirá cómo se ha formateado ese cuerpo del mensaje. En este caso, contiene SDP.
User-Agent:
Usuario-Agente: phone
User-Agent se usa para informar a la parte llamante sobre el punto final SIP de la persona que llama. Una buena analogía es un navegador de Internet. El navegador le dirá al servidor web cuál es su marca y modelo. Esto permite que el servidor web trate a Internet Explorer de una manera y Chrome a otra.
Supported:
Compatible: reemplaza
El encabezado admitido permite que la persona que llama le diga a la parte llamada qué extensiones SIP admite. Reemplaza es una de esas extensiones.
Eso es todo por el mensaje SIP. Luego viene el cuerpo del mensaje.
Sabemos que hay un cuerpo de mensaje porque Content-Length era mayor que 0 (cero). Conocemos el formato del cuerpo del mensaje de Content-Type. Entonces, para este INVITE, tenemos 306 bytes de SDP.
Versión:
v = 0
La versión actual de SDP es 0 (cero).
Autor:
o = GXXXXXXXXX 1537429953240 1537429953240 IN IP4 YY.YY.YY.YY
Esta sección identifica al remitente, el protocolo que usa el remitente y la dirección IP del remitente.
Sesión:
s = sip call
Este es el título de la sesión. Nunca lo he visto usado para mucho, pero tiene que aparecer en cada mensaje SDP.
Información de conexión:
c=IN IP4 UU.UU.UU.UU
Este campo define el tipo de conexión y la dirección. Aquí, estaban usando IPV4 y la dirección de medios del remitente.
Sincronización:
t = 0 0
El tiempo se usa para indicar las horas de inicio y finalización de una sesión. Los tiempos de inicio y detención de 0 (cero) indican que la sesión es permanente y no está limitada en el tiempo. Nunca he visto SDP en un INVITE que no usó ceros para ambos valores.
Descriptor de medios
m = audio 22686 RTP/AVP 8 0 18 101
Una línea de medios estará presente para cada tipo de medio publicitado dentro de un mensaje SDP. El formato es:
m =
En este ejemplo, la línea de medios informa a la parte llamada que la persona que llama admite audio RTP en el puerto 22686. El 0, 8, 18 y 101 son los diversos códecs que se describirán por líneas de atributo.
Líneas de atributo:
a = rtpmap: 0 PCMU / 8000/1
a = rtpmap: 8 PCMA / 8000/1
a = rtpmap: 18 G729 / 8000/1
a = fmtp: 18 annexb = no
a = rtpmap: 4 G723 / 8000/1
a = rtpmap: 120 telephone-event / 8000/1
Cada línea de atributo se refiere al Descriptor de Medios y los valores . Como teníamos cinco formatos (0, 8, 18, 4, 120) tendremos al menos cinco líneas de atributos. Nuestro ejemplo tiene seis porque el códec 18 usa dos líneas para describirse a sí mismo.
El formato de estos atributos es:
a = rtpmap: / [/ <parámetros de codificación>]