Explorarea motorului VoIP Mediastreamer2. Partea 8

Materialul articolului este preluat de pe mine canal zen.

Explorarea motorului VoIP Mediastreamer2. Partea 8

Structura pachetelor RTP

În trecut articol folosim TShark a efectuat capturarea pachetelor RTP care au fost schimbate între receptorul și transmițătorul nostru. Ei bine, în aceasta vom picta elementele pachetului în diferite culori și vom vorbi despre scopul lor.

Să aruncăm o privire la același pachet, dar cu margini colorate și etichete explicative:
Explorarea motorului VoIP Mediastreamer2. Partea 8

În partea de jos a listei, octeții care alcătuiesc pachetul RTP sunt nuanțați, iar aceasta este, la rândul său, sarcina utilă a pachetului UDP (antetul acestuia este încercuit cu negru). Fundalul colorat indică octeții antetului RTP, iar blocul de date care conține sarcina utilă a pachetului RTP este evidențiat cu verde. Datele sunt prezentate în format hexazecimal. În cazul nostru, acesta este un semnal audio comprimat conform u-law (mu-law), adică un eșantion are o dimensiune de 1 octet. Deoarece am folosit rata de eșantionare implicită (8000 Hz), la o rată a pachetelor de 50 Hz, fiecare pachet RTP ar trebui să conțină 160 de octeți de sarcină utilă. Vom vedea acest lucru numărând octeții din zona verde, ar trebui să fie 10 linii din ei.

Conform standardului, cantitatea de date din sarcina utilă trebuie să fie un multiplu de patru sau, cu alte cuvinte, trebuie să conțină un număr întreg de cuvinte de patru octeți. Dacă se întâmplă că sarcina dvs. utilă nu se potrivește cu această regulă, atunci trebuie să adăugați octeți cu valoare zero la sfârșitul sarcinii utile și să setați bitul de umplutură. Acest bit este situat în primul octet al antetului RTP și este colorat în turcoaz. Rețineți că toți octeții de încărcare utilă sunt 0xFF, ceea ce arată liniștea u-law.

Antetul pachetului RTP este format din 12 octeți obligatorii, dar în două cazuri poate fi mai lung:

  • Când un pachet poartă un semnal audio obținut prin amestecarea semnalelor din mai multe surse (fluxuri RTP), atunci după primii 12 octeți ai antetului există un tabel cu o listă de identificatori de sursă ale căror încărcături utile au fost folosite pentru a crea sarcina utilă a acestui pachet. În acest caz, în cei patru biți inferiori ai primului octet al antetului (câmp Se numără identificatorii surselor contributive) indică numărul de surse. Dimensiunea câmpului este de 4 biți, deci tabelul poate conține până la 15 identificatori de sursă. Fiecare dintre acestea ocupă 4 octeți. Acest tabel este utilizat la configurarea unui apel conferință.

  • Când titlul are extensia . În acest caz, bitul este setat în primul octet al antetului X. În antetul extins, după tabelul de participanți (dacă există), există un antet de extensie cu un singur cuvânt, urmat de cuvintele de extensie. O extensie este o colecție de octeți pe care îi puteți folosi pentru a transfera date suplimentare. Standardul nu stipulează formatul acestor date - poate fi orice. De exemplu, pot fi unele setări suplimentare pentru dispozitivul care primește pachete RTP. Pentru unele aplicații, totuși, au fost dezvoltate standarde de antet extinse. Acest lucru se face, de exemplu, pentru comunicațiile în standard ED-137 (Standarde de interoperabilitate pentru componentele ATM VoIP).

Acum să ne uităm la câmpurile de antet mai detaliat. Mai jos este o poză canonică cu structura antetului RTP, căreia nu am putut rezista și am pictat în aceleași culori.

Explorarea motorului VoIP Mediastreamer2. Partea 8
VER — numărul versiunii protocolului (versiunea curentă 2);

P - un flag care este setat în cazurile în care pachetul RTP este suplimentat cu octeți goli la sfârșit;

X - semnalizare că antetul este extins;

CC — conține numărul de identificatori CSRC care urmează antetului constant (după cuvintele 1..3), tabelul nu este prezentat în figură;

M — marker al începutului unui cadru sau al prezenței vorbirii în canal (dacă se folosește un detector de pauză a vorbirii). Dacă receptorul nu conține un detector de pauză de vorbire, atunci acest bit va fi setat permanent;

PTYPE - specifică formatul încărcăturii utile;

Număr de secvență - numărul pachetului, folosit pentru a restabili ordinea în care sunt redate pachetele, deoarece situația reală este atunci când pachetele pot ajunge la receptor în ordinea greșită în care au fost trimise. Valoarea inițială trebuie să fie aleatorie, acest lucru se face astfel încât, dacă fluxul RTP este criptat, va fi dificil să îl piratați. De asemenea, acest câmp vă permite să detectați pachetele pierdute;

Marcaj de timp - timestamp-ul. Timpul este măsurat în mostre de semnal, adică dacă o explozie conține 160 de mostre, atunci marcajul de timp al următoarei explozii va fi cu 160 mai mult. Valoarea inițială a marcajului de timp trebuie să fie aleatorie;

SSRC — identificatorul sursei pachetului, acesta trebuie să fie unic. Este mai bine să-l generați aleatoriu înainte de a începe fluxul RTP.

Dacă vă dezvoltați propriul emițător sau receptor de pachete RTP, va trebui să vă uitați la pachetele de mai multe ori pentru a crește productivitatea, vă recomand să învățați cum să utilizați filtrarea de pachete în TShark, vă permite să capturați numai acele pachete care sunt de interes pentru tine. Într-un mediu în care zeci de dispozitive RTP funcționează în rețea, acest lucru este foarte valoros. În linia de comandă TShark, opțiunile de filtrare sunt specificate cu opțiunea „-f”. Am folosit această opțiune când am vrut să captăm pachete din portul 8010:
-f "udp port 8010"
Parametrii de filtrare sunt în esență un set de criterii pe care un pachet „prins” trebuie să le îndeplinească. Condiția poate verifica adresa, portul, valoarea unui anumit octet din pachet. Condițiile pot fi combinate cu operații logice „ȘI”, „SAU”, etc. Un instrument foarte puternic.

Dacă doriți să vizualizați dinamica modificărilor câmpului în loturi, va trebui să duplicați rezultatul TShark într-un fișier, așa cum se arată în ultimul articol, trecând rezultatul TShark la intrare reper. Apoi, deschideți fișierul jurnal cu mai puțin, vim sau un alt instrument care poate lucra rapid cu fișiere text uriașe și poate căuta șiruri de caractere, puteți afla toate nuanțele comportamentului câmpurilor de pachete într-un flux RTP.

Dacă trebuie să ascultați semnalul transmis de fluxul RTP, atunci trebuie să utilizați versiunea TShark cu interfata vizuala Wireshark. Cu manipulări simple ale mouse-ului, puteți asculta și vedea forma de undă a semnalului. Dar cu o condiție - dacă este codificat în format u-law sau a-low.

Următorul articol vom face un interfon duplex cu tine. Aprovizionați cu o pereche de căști și un interlocutor.

Sursa: www.habr.com

Adauga un comentariu