Exploration du moteur VoIP Mediastreamer2. Partie 8

Le matériel de l'article est tiré de mon canal zen.

Exploration du moteur VoIP Mediastreamer2. Partie 8

Structure des paquets RTP

À la fin article nous utilisons Requin effectué la capture des paquets RTP qui ont été échangés entre notre récepteur et émetteur. Eh bien, dans celui-ci, nous peindrons les éléments de l'emballage de différentes couleurs et parlerons de leur objectif.

Regardons le même paquet, mais avec des marges colorées et des étiquettes explicatives :
Exploration du moteur VoIP Mediastreamer2. Partie 8

Au bas de la liste, les octets qui composent le paquet RTP sont teintés, et c'est à son tour la charge utile du paquet UDP (son en-tête est entouré en noir). Les arrière-plans colorés indiquent les octets de l'en-tête RTP et le bloc de données qui contient la charge utile du paquet RTP est surligné en vert. Les données sont présentées au format hexadécimal. Dans notre cas, il s'agit d'un signal audio compressé selon la loi u (mu-law), c'est-à-dire un échantillon a une taille de 1 octet. Puisque nous avons utilisé le taux d'échantillonnage par défaut (8000 Hz), avec un débit de paquets de 50 Hz, chaque paquet RTP doit contenir 160 octets de charge utile. Nous verrons cela en comptant les octets dans la zone verte, il devrait y en avoir 10 lignes.

Selon la norme, la quantité de données dans la charge utile doit être un multiple de quatre, ou en d'autres termes, elle doit contenir un nombre entier de mots de quatre octets. S'il arrive que votre charge utile ne corresponde pas à cette règle, vous devez ajouter des octets de valeur nulle à la fin de la charge utile et définir le bit de remplissage. Ce bit est situé dans le premier octet de l'en-tête RTP et est de couleur turquoise. Notez que tous les octets de charge utile sont 0xFF, ce à quoi ressemble le silence u-law.

L'en-tête du paquet RTP est composé de 12 octets obligatoires, mais dans deux cas il peut être plus long :

  • Lorsqu'un paquet transporte un signal audio obtenu en mélangeant des signaux provenant de plusieurs sources (flux RTP), alors après les 12 premiers octets de l'en-tête se trouve un tableau avec une liste d'identifiants de source dont les charges utiles ont été utilisées pour créer la charge utile de ce paquet. Dans ce cas, dans les quatre bits inférieurs du premier octet de l'en-tête (champ Nombre d'identifiants de source contributive) indique le nombre de sources. La taille du champ est de 4 bits, la table peut donc contenir jusqu'à 15 identifiants source. Chacun d'eux occupe 4 octets. Ce tableau est utilisé lors de la configuration d'une conférence téléphonique.

  • Lorsque le titre porte l'extension . Dans ce cas, le bit est défini dans le premier octet de l'en-tête X. Dans l'en-tête étendu, après le tableau des participants (le cas échéant), il y a un en-tête d'extension d'un mot, suivi des mots d'extension. Une extension est une collection d'octets que vous pouvez utiliser pour transférer des données supplémentaires. La norme ne stipule pas le format de ces données - cela peut être n'importe quoi. Par exemple, il peut s'agir de paramètres supplémentaires pour l'appareil qui reçoit les paquets RTP. Pour certaines applications, cependant, des normes d'en-tête étendues ont été développées. Ceci est fait, par exemple, pour les communications dans la norme ED-137 (normes d'interopérabilité pour les composants VoIP ATM).

Examinons maintenant les champs d'en-tête plus en détail. Ci-dessous, une image canonique avec la structure de l'en-tête RTP, à laquelle je n'ai pas non plus pu résister et peinte dans les mêmes couleurs.

Exploration du moteur VoIP Mediastreamer2. Partie 8
VER — numéro de version du protocole (version actuelle 2) ;

P - un indicateur qui est défini dans les cas où le paquet RTP est complété par des octets vides à la fin ;

X - indicateur que l'en-tête est étendu ;

CC — contient le nombre d'identificateurs CSRC après l'en-tête constant (après les mots 1..3), le tableau n'est pas représenté sur la figure ;

M — marqueur du début d'une trame ou de la présence de parole dans le canal (si un détecteur de pause de parole est utilisé). Si le récepteur ne contient pas de détecteur de pause de parole, ce bit doit être activé en permanence;

TYPEP - spécifie le format de la charge utile ;

Numéro de séquence - numéro de paquet, utilisé pour rétablir l'ordre dans lequel les paquets sont joués, car la situation réelle est celle où les paquets peuvent atteindre le récepteur dans le mauvais ordre dans lequel ils ont été envoyés. La valeur initiale doit être aléatoire, ceci est fait pour que si le flux RTP est crypté, il sera difficile de le pirater. De plus, ce champ vous permet de détecter les paquets manqués ;

Horodatage - horodatage. Le temps est mesuré en échantillons de signal, c'est-à-dire si une rafale contient 160 échantillons, alors l'horodatage de la rafale suivante sera supérieur à 160. La valeur initiale de l'horodatage doit être aléatoire ;

SSRC — identifiant de la source du paquet, il doit être unique. Il est préférable de le générer aléatoirement avant de démarrer le flux RTP.

Si vous développez votre propre émetteur ou récepteur RTP, vous devrez revoir vos paquets plus d'une fois afin d'augmenter la productivité, je vous recommande d'apprendre à utiliser le filtrage de paquets dans TShark, il vous permet de capturer uniquement les paquets qui sont de t'intéresse. Dans un environnement où des dizaines de périphériques RTP fonctionnent sur le réseau, cela est très précieux. Dans la ligne de commande de TShark, les options de filtrage sont spécifiées avec l'option "-f". Nous avons utilisé cette option lorsque nous voulions capturer des paquets du port 8010 :
-f "udp port 8010"
Les paramètres de filtrage sont essentiellement un ensemble de critères qu'un paquet "intercepté" doit respecter. La condition peut vérifier l'adresse, le port, la valeur d'un certain octet dans le paquet. Les conditions peuvent être combinées avec des opérations logiques "ET", "OU", etc. Un outil très puissant.

Si vous souhaitez afficher la dynamique des changements de champ par lots, vous devrez dupliquer la sortie Requin à un fichier, comme indiqué dans le dernier article, en passant la sortie Requin à l'entrée tee. Ensuite, ouvrez le fichier journal avec moins, vim ou un autre outil capable de travailler rapidement avec d'énormes fichiers texte et de rechercher des chaînes, vous pouvez découvrir toutes les nuances du comportement des champs de paquets dans un flux RTP.

Si vous avez besoin d'écouter le signal transmis par le flux RTP, vous devez utiliser la version Requin avec interface visuelle Wireshark. Avec de simples manipulations de la souris, vous pouvez écouter et voir la forme d'onde du signal. Mais à une condition - s'il est encodé au format u-law ou a-low.

Suivant article nous ferons un interphone duplex avec vous. Faites le plein d'une paire de casques et d'un interlocuteur.

Source: habr.com

Ajouter un commentaire