Explorant el motor de VoIP Mediastreamer2. Part 8

El material de l'article està extret del meu canal zen.

Explorant el motor de VoIP Mediastreamer2. Part 8

Estructura de paquets RTP

En l'últim article estem utilitzant TShark paquets RTP capturats intercanviats entre el nostre receptor i transmissor. Bé, en aquest pintarem els elements del paquet de diferents colors i parlarem de la seva finalitat.

Fem una ullada al mateix paquet, però amb camps tenyits i notes explicatives:
Explorant el motor de VoIP Mediastreamer2. Part 8

A la part inferior de la llista hi ha els bytes que formen el paquet RTP, que al seu torn és la càrrega útil del paquet UDP (la seva capçalera es mostra en negre). Els fons de colors indiquen els bytes de la capçalera RTP i el verd indica el bloc de dades que conté la càrrega útil del paquet RTP. Les dades allà es presenten en format hexadecimal. En el nostre cas, es tracta d'un senyal d'àudio comprimit segons la llei u (mu-law), és a dir. una mostra té una mida d'1 byte. Com que hem utilitzat la freqüència de mostreig predeterminada (8000 Hz), a una velocitat de paquets de 50 Hz, cada paquet RTP hauria de contenir 160 bytes de càrrega útil. Això ho veurem comptant els bytes de la zona verda, hi hauria d'haver 10 línies.

Segons l'estàndard, la quantitat de dades de la càrrega útil ha de ser múltiple de quatre, o en altres paraules, ha de contenir un nombre enter de paraules de quatre bytes. Si passa que la vostra càrrega útil no segueix aquesta regla, haureu d'afegir bytes amb valors zero al final de la càrrega útil i establir el bit de farciment. Aquest bit es troba al primer byte de la capçalera RTP i és de color turquesa. Tingueu en compte que tots els bytes de càrrega útil tenen el valor 0xFF: aquest és el que sembla el silenci en format u-law.

La capçalera del paquet RTP consta de 12 bytes necessaris, però en dos casos pot ser més llarg:

  • Quan un paquet transporta un senyal d'àudio obtingut barrejant senyals de diverses fonts (streams RTP), després dels primers 12 bytes de la capçalera hi ha una taula amb una llista d'identificadors de font les càrregues útils s'han utilitzat per crear la càrrega útil d'aquest paquet. En aquest cas, als quatre bits inferiors del primer byte de la capçalera (camp Els identificadors de font contribuents compten) s'indica el nombre de fonts. La mida del camp és de 4 bits, de manera que la taula pot contenir fins a 15 identificadors de font. Cadascun dels quals pren 4 bytes. Aquesta taula s'utilitza quan s'organitza una trucada de conferència.

  • Quan el títol té una extensió. En aquest cas, s'estableix el bit del primer byte de la capçalera X. A la capçalera ampliada, després de la taula de participants (si n'hi ha), hi ha una capçalera d'extensió d'una paraula, seguida de les paraules de l'extensió. Una extensió és un conjunt de bytes que podeu utilitzar per transferir dades addicionals. L'estàndard no especifica el format d'aquestes dades: pot ser qualsevol cosa. Per exemple, aquestes podrien ser algunes configuracions addicionals per al dispositiu que rep paquets RTP. Per a algunes aplicacions, però, s'han desenvolupat estàndards de capçalera ampliats. Això es fa, per exemple, per als equips de comunicacions de l'estàndard ED-137 (Estàndards d'interoperabilitat per a components VoIP ATM).

Ara mirem els camps de capçalera amb més detall. A continuació hi ha una imatge canònica amb l'estructura d'una capçalera RTP, que tampoc no vaig poder resistir i vaig pintar amb els mateixos colors.

Explorant el motor de VoIP Mediastreamer2. Part 8
VER — número de versió del protocol (versió actual 2);

P — un indicador que s'estableix en els casos en què un paquet RTP es complementa amb bytes buits al final;

X — marcar que la capçalera està ampliada;

CC — conté el nombre d'identificadors CSRC després de la capçalera constant (després de les paraules 1..3), la taula no es mostra a la figura;

M — marcador de l'inici del fotograma o de la presència de parla al canal (si s'utilitza un detector de pausa de parla). Si el receptor no conté un detector de pausa de parla, aquest bit s'ha d'establir permanentment;

PTYPE — indica el format de càrrega útil;

Número de seqüència — número de paquet, que s'utilitza per restaurar l'ordre de reproducció dels paquets, ja que la situació real és quan els paquets poden arribar al receptor en un ordre diferent del que s'han enviat. El valor inicial ha de ser aleatori; això es fa de manera que si s'utilitza el xifratge de flux RTP, serà difícil de trencar. Aquest camp també us permet detectar caigudes de paquets;

Timestamp - segell de temps. El temps es mesura en mostres de senyal, és a dir. si un paquet conté 160 mostres, llavors la marca de temps del paquet següent serà més gran en 160. El valor inicial de la marca de temps ha de ser aleatori;

SSRC — identificador de font del paquet, ha de ser únic. És millor generar-lo aleatòriament abans d'iniciar el flux RTP.

Si desenvolupeu el vostre propi transmissor o receptor de paquets RTP, haureu de mirar els vostres paquets més d'una vegada, per tant, per augmentar la productivitat, us recomano que domineu l'ús del filtratge de paquets a TShark, ja que us permet capturar només aquests paquets. que siguin del vostre interès. En condicions en què desenes de dispositius RTP operen a la xarxa, això és molt valuós. A la línia d'ordres de TShark, els paràmetres de filtratge s'especifiquen amb l'opció "-f". Hem utilitzat aquesta opció quan volíem capturar paquets del port 8010:
-f "udp port 8010"
Els paràmetres de filtratge són essencialment un conjunt de criteris que ha de complir el paquet "captat". La condició pot comprovar l'adreça, el port o el valor d'un byte específic del paquet. Les condicions es poden combinar mitjançant operacions lògiques "AND", "OR", etc. Una eina molt potent.

Si voleu veure la dinàmica dels canvis de camp per lots, haureu de duplicar la sortida TShark a un fitxer, com es va mostrar a l'article anterior, mitjançant la transferència de sortida TShark a l'entrada tee. A continuació, obriu el fitxer de registre amb menys, vim o una altra eina que pugui funcionar ràpidament amb fitxers de text enormes i cercar cadenes, podeu esbrinar tots els matisos del comportament dels camps de paquets en un flux RTP.

Si necessiteu escoltar el senyal transmès pel flux RTP, heu d'utilitzar la versió TShark amb interfície visual Wireshark. Mitjançant manipulacions senzilles amb el ratolí, podeu escoltar i veure l'oscil·lograma del senyal. Però amb una condició: si està codificat en format u-law o a-low.

Pròxim article Farem un intercomunicador dúplex amb tu. Aprovisiona't d'un parell d'auriculars i un interlocutor.

Font: www.habr.com

Afegeix comentari