Explorando el motor VoIP de Mediastreamer2. Parte 8

El material del artículo está tomado de mi canal zen.

Explorando el motor VoIP de Mediastreamer2. Parte 8

Estructura del paquete RTP

En el pasado статье estamos usando Tiburón realizó la captura de paquetes RTP que se intercambiaban entre nuestro receptor y transmisor. Bueno, en este pintaremos los elementos del paquete en diferentes colores y hablaremos sobre su propósito.

Echemos un vistazo al mismo paquete, pero con márgenes de colores y etiquetas explicativas:
Explorando el motor VoIP de Mediastreamer2. Parte 8

En la parte inferior de la lista, los bytes que componen el paquete RTP están teñidos, y esto a su vez es la carga útil del paquete UDP (su encabezado está encerrado en un círculo negro). Los fondos de colores indican los bytes del encabezado RTP y el bloque de datos que contiene la carga útil del paquete RTP está resaltado en verde. Los datos se presentan en formato hexadecimal. En nuestro caso, se trata de una señal de audio comprimida según la ley u (mu-law), es decir una muestra tiene un tamaño de 1 byte. Dado que usamos la tasa de muestreo predeterminada (8000 Hz), a una tasa de paquete de 50 Hz, cada paquete RTP debe contener 160 bytes de carga útil. Veremos esto contando los bytes en el área verde, debe haber 10 líneas de ellos.

De acuerdo con el estándar, la cantidad de datos en la carga útil debe ser un múltiplo de cuatro, o en otras palabras, debe contener un número entero de palabras de cuatro bytes. Si sucede que su carga útil no coincide con esta regla, debe agregar bytes con valor cero al final de la carga útil y configurar el bit de relleno. Este bit se encuentra en el primer byte del encabezado RTP y es de color turquesa. Tenga en cuenta que todos los bytes de carga útil son 0xFF, que es como se ve el silencio de la ley u.

El encabezado del paquete RTP consta de 12 bytes obligatorios, pero en dos casos puede ser más largo:

  • Cuando un paquete transporta una señal de audio obtenida al mezclar señales de varias fuentes (flujos RTP), luego de los primeros 12 bytes del encabezado hay una tabla con una lista de identificadores de fuente cuyas cargas útiles se usaron para crear la carga útil de este paquete. En este caso, en los cuatro bits inferiores del primer byte de la cabecera (campo Recuento de identificadores de fuentes contribuyentes) indica el número de fuentes. El tamaño del campo es de 4 bits, por lo que la tabla puede contener hasta 15 identificadores de origen. Cada uno de los cuales ocupa 4 bytes. Esta tabla se utiliza cuando se establece una llamada de conferencia.

  • Cuando el título tiene la extensión . En este caso, el bit se establece en el primer byte del encabezado. X. En el encabezado extendido, después de la tabla de participantes (si corresponde), hay un encabezado de extensión de una palabra, seguido de las palabras de extensión. Una extensión es una colección de bytes que puede usar para transferir datos adicionales. El estándar no estipula el formato de estos datos, puede ser cualquier cosa. Por ejemplo, puede haber algunas configuraciones adicionales para el dispositivo que recibe paquetes RTP. Sin embargo, para algunas aplicaciones se han desarrollado estándares de encabezado extendidos. Esto se hace, por ejemplo, para las comunicaciones en el estándar ED-137 (Estándares de interoperabilidad para componentes ATM de VoIP).

Ahora veamos los campos de encabezado con más detalle. A continuación se muestra una imagen canónica con la estructura del encabezado RTP, que tampoco pude resistir y pinté en los mismos colores.

Explorando el motor VoIP de Mediastreamer2. Parte 8
VER — número de versión del protocolo (versión actual 2);

P - una bandera que se establece en los casos en que el paquete RTP se complementa con bytes vacíos al final;

X - marca que el encabezado se extiende;

CC — contiene el número de identificadores CSRC después del encabezado constante (después de las palabras 1..3), la tabla no se muestra en la figura;

M — marcador del comienzo de una trama o la presencia de voz en el canal (si se utiliza un detector de pausa de voz). Si el receptor no contiene un detector de pausa de voz, este bit se establecerá de forma permanente;

PTIPO - especifica el formato de la carga útil;

Secuencia de números - número de paquete, utilizado para restaurar el orden en que se reproducen los paquetes, ya que la situación real es cuando los paquetes pueden llegar al receptor en el orden incorrecto en el que fueron enviados. El valor inicial debe ser aleatorio, esto se hace para que si el flujo RTP está encriptado, sea difícil piratearlo. Además, este campo le permite detectar paquetes perdidos;

Timestamp - marca de tiempo. El tiempo se mide en muestras de señal, es decir, si una ráfaga contiene 160 muestras, entonces la marca de tiempo de la siguiente ráfaga será más de 160. El valor inicial de la marca de tiempo debe ser aleatorio;

SSRC — identificador de la fuente del paquete, debe ser único. Es mejor generarlo aleatoriamente antes de iniciar la transmisión RTP.

Si desarrolla su propio transmisor o receptor de paquetes RTP, tendrá que mirar sus paquetes más de una vez para aumentar la productividad, le recomiendo que aprenda a usar el filtrado de paquetes en TShark, le permite capturar solo aquellos paquetes que son de su interés. En un entorno en el que docenas de dispositivos RTP operan en la red, esto es muy valioso. En la línea de comandos de TShark, las opciones de filtrado se especifican con la opción "-f". Usamos esta opción cuando queríamos capturar paquetes del puerto 8010:
-f "udp port 8010"
Los parámetros de filtrado son esencialmente un conjunto de criterios que debe cumplir un paquete "capturado". La condición puede verificar la dirección, el puerto, el valor de un determinado byte en el paquete. Las condiciones se pueden combinar con operaciones lógicas "Y", "O", etc. Una herramienta muy poderosa.

Si desea ver la dinámica de los cambios de campo en lotes, deberá duplicar la salida Tiburón a un archivo, como se muestra en el último artículo, pasando la salida Tiburón en la entrada tee. A continuación, abra el archivo de registro con menos, vim u otra herramienta que pueda trabajar rápidamente con archivos de texto grandes y buscar cadenas, puede descubrir todos los matices del comportamiento de los campos de paquetes en una secuencia RTP.

Si necesita escuchar la señal transmitida por la transmisión RTP, entonces debe usar la versión Tiburón con interfaz visual Wireshark. Con simples manipulaciones del mouse, puede escuchar y ver la forma de onda de la señal. Pero con una condición: si está codificado en formato u-law o a-low.

Próximo статье Haremos un intercomunicador dúplex contigo. Abastecerse de un par de auriculares y un interlocutor.

Fuente: habr.com

Añadir un comentario