Le contenu de cet article est tiré de ma .

Structure du paquet RTP
Dans le passé, nous avons réalisé TShark la capture des paquets RTP échangés entre notre récepteur et notre émetteur. Dans cette section, nous allons colorer les éléments du paquet de différentes couleurs et discuter de leur fonction.
Regardons le mĂȘme paquet, mais avec des champs colorĂ©s et des annotations explicativesâŻ:

Dans la partie infĂ©rieure de la liste, les octets constituant le paquet RTP sont colorĂ©s, et celui-ci est Ă son tour la charge utile du paquet UDP (son en-tĂȘte est entourĂ© d'une ligne noire). Les arriĂšre-plans colorĂ©s indiquent les octets de l'en-tĂȘte RTP, et la zone verte met en Ă©vidence le bloc de donnĂ©es qui contient la charge utile du paquet RTP. Les donnĂ©es y sont prĂ©sentĂ©es au format hexadĂ©cimal. Dans notre cas, il s'agit d'un signal sonore compressĂ© selon la loi u (loi mu), c'est-Ă -dire qu'un Ă©chantillon a une taille de 1 octet. Ătant donnĂ© que nous avons utilisĂ© la frĂ©quence d'Ă©chantillonnage par dĂ©faut (8000 Hz), avec une frĂ©quence de paquets de 50 Hz, chaque paquet RTP doit contenir 160 octets de charge utile. C'est ce que nous allons constater en comptant les octets dans la zone verte, qui devrait contenir 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, doit contenir un nombre entier de mots de quatre octets. Si par hasard votre charge utile ne respecte pas cette rĂšgle, il faudrait alors ajouter des octets de valeur nulle Ă la fin de la charge utile et activer le bit Padding (ComplĂ©ment). Ce bit se trouve dans le premier octet de l'en-tĂȘte RTP, il est colorĂ© en turquoise. Notez que tous les octets de la charge utile ont une valeur de 0xFF â c'est Ă quoi ressemble le silence au format u-law.
L'en-tĂȘte du paquet RTP est composĂ© de 12 octets obligatoires, mais dans deux cas, il peut ĂȘtre plus longâŻ:
Lorsque le paquet transporte un signal sonore rĂ©sultant du mĂ©lange de signaux provenant de plusieurs sources (flux RTP), une table avec la liste des identifiants de sources dont les charges utiles ont Ă©tĂ© utilisĂ©es pour crĂ©er la charge utile de ce paquet est placĂ©e aprĂšs les 12 premiers octets de l'en-tĂȘte. Dans ce cas, les quatre bits infĂ©rieurs du premier octet de l'en-tĂȘte (champ Nombre d'identifiants de sources contributrices) indique le nombre de sources. La taille du champ est de 4 bits, la table peut donc contenir jusqu'Ă 15 identifiants de sources. Chacun occupe 4 octets. Cette table est utilisĂ©e lors de l'organisation de la confĂ©rence.
Lorsque l'en-tĂȘte a une extension. Dans ce cas, le premier octet de l'en-tĂȘte a un bit dĂ©fini X. Dans l'en-tĂȘte Ă©tendu, aprĂšs la table des participants (s'il y en a), se trouve l'en-tĂȘte d'extension d'une taille d'un mot, suivi des mots d'extension. L'extension est un ensemble d'octets que vous pouvez utiliser pour transmettre des donnĂ©es supplĂ©mentaires. La norme ne spĂ©cifie pas le format de ces donnĂ©es â il peut ĂȘtre quelconque. Par exemple, cela peut ĂȘtre des paramĂštres supplĂ©mentaires pour l'appareil qui reçoit les paquets RTP. Pour certaines applications, des normes d'en-tĂȘte Ă©tendu ont nĂ©anmoins Ă©tĂ© dĂ©veloppĂ©es. C'est le cas, par exemple, pour les moyens de communication dans la norme ED-137 (Normes d'interopĂ©rabilitĂ© pour les composants VoIP ATM).
Examinons maintenant les champs de l'en-tĂȘte plus en dĂ©tail. Ci-dessous, une image canonique de la structure de l'en-tĂȘte RTP, que j'ai Ă©galement coloriĂ©e dans les mĂȘmes couleurs.

VER â numĂ©ro de version du protocole (version actuelle 2);
redicted Frame) â un drapeau qui est dĂ©fini dans les cas oĂč le paquet RTP est complĂ©tĂ© par des octets vides Ă la fin;
X â un drapeau indiquant que l'en-tĂȘte est Ă©tendu;
CC â contient le nombre d'identifiants CSRC suivant l'en-tĂȘte fixe (aprĂšs les mots 1..3), dans l'image la table n'est pas montrĂ©e;
M â marqueur de dĂ©but de cadre ou de prĂ©sence de parole dans le canal (si un dĂ©tecteur de pauses dans la parole est utilisĂ©). Si le rĂ©cepteur ne contient pas de dĂ©tecteur de pauses dans la parole, ce bit doit ĂȘtre constamment dĂ©fini;
PTYPE â indique le format de la charge utile;
NumĂ©ro de sĂ©quence â numĂ©ro de paquet, utilisĂ© pour restaurer l'ordre de lecture des paquets, car en rĂ©alitĂ©, il peut y avoir des cas oĂč les paquets atteignent le rĂ©cepteur dans un ordre diffĂ©rent de celui dans lequel ils ont Ă©tĂ© envoyĂ©s. La valeur initiale doit ĂȘtre alĂ©atoire, cela permet, si le flux RTP est cryptĂ©, de rendre son dĂ©cryptage plus difficile. Ce champ permet Ă©galement de dĂ©tecter les paquets manquants;
Horodatage â horodatage. Le temps est mesurĂ© en Ă©chantillons de signal, c'est-Ă -dire que si le paquet contient 160 Ă©chantillons, l'horodatage du paquet suivant sera supĂ©rieur de 160. La valeur initiale de l'horodatage doit ĂȘtre alĂ©atoire;
SSRC â identifiant de la source du paquet, il doit ĂȘtre unique. Il vaut mieux le gĂ©nĂ©rer de maniĂšre alĂ©atoire avant de dĂ©marrer le flux RTP.
Si vous dĂ©veloppez votre propre Ă©metteur ou rĂ©cepteur de paquets RTP, vous aurez Ă plusieurs reprises Ă examiner vos paquets. Pour amĂ©liorer votre productivitĂ©, je vous recommande de maĂźtriser l'utilisation du filtrage de paquets dans TShark, cela vous permet de capturer uniquement les paquets qui vous intĂ©ressent. Dans un environnement oĂč des dizaines d'appareils RTP fonctionnent, c'est trĂšs prĂ©cieux. Dans la ligne de commande TShark, les paramĂštres de filtrage sont dĂ©finis par l'option "-f". Nous avons utilisĂ© cette option lorsque nous souhaitions capturer des paquets du port 8010 :
-f "udp port 8010"
Les paramĂštres de filtrage sont essentiellement un ensemble de critĂšres auxquels doit correspondre le paquet Ă "capturer". Une 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. C'est un outil trĂšs puissant.
Si vous souhaitez visualiser la dynamique des champs dans les paquets, vous devrez dupliquer la sortie TShark dans un fichier, comme cela a été montré dans l'article précédent, en transférant la sortie TShark en entrée tee. Ensuite, en ouvrant le fichier journal avec less, vim ou un autre outil capable de travailler rapidement avec de grands fichiers texte et d'effectuer des recherches de chaßnes, vous pourrez comprendre tous les détails du comportement des champs de paquets dans le flux RTP.
Si vous devez Ă©couter le signal transmis par le flux RTP, vous devez utiliser la version TShark avec interface graphique Wireshark. Avec quelques manipulations simples de la souris, vous pouvez Ă©couter et voir l'oscillogramme du signal. Mais Ă une condition â s'il est codĂ© au format u-law ou a-law.
Dans la prochaine nous allons créer un dispositif de communication duplex. Munissez-vous de deux casques et d'un interlocuteur.
Source : habr.com
