Istraživanje Mediastreamer2 VoIP motora. Dio 8

Materijal članka je preuzet sa mog zen kanal.

Istraživanje Mediastreamer2 VoIP motora. Dio 8

Struktura RTP paketa

U poslednjem članak koristimo TShark izvršili hvatanje RTP paketa koji su razmijenjeni između našeg prijemnika i predajnika. Pa, u ovom ćemo obojiti elemente pakovanja u različite boje i pričati o njihovoj namjeni.

Pogledajmo isto pakovanje, ali sa obojanim marginama i naljepnicama s objašnjenjima:
Istraživanje Mediastreamer2 VoIP motora. Dio 8

Na dnu liste, bajtovi koji čine RTP paket su obojeni, a ovo je zauzvrat nosivost UDP paketa (njegovo zaglavlje je zaokruženo crnom bojom). Pozadine u boji označavaju bajtove RTP zaglavlja, a blok podataka koji sadrži nosivost RTP paketa je označen zelenom bojom. Podaci su prikazani u heksadecimalnom formatu. U našem slučaju se radi o audio signalu komprimiranom prema u-zakonu (mu-law), tj. jedan uzorak ima veličinu od 1 bajta. Pošto smo koristili podrazumevanu brzinu uzorkovanja (8000 Hz), sa brzinom paketa od 50 Hz, svaki RTP paket treba da sadrži 160 bajtova korisnog opterećenja. To ćemo vidjeti prebrojavanjem bajtova u zelenoj površini, trebalo bi ih biti 10 redova.

Prema standardu, količina podataka u korisnom učitavanju mora biti višestruka od četiri, ili drugim riječima, mora sadržavati cijeli broj riječi od četiri bajta. Ako se dogodi da se vaš teret ne podudara sa ovim pravilom, tada morate dodati bajtove nulte vrijednosti na kraj korisnog učitavanja i postaviti bit Padding. Ovaj bit se nalazi u prvom bajtu RTP zaglavlja i obojen je tirkizno. Imajte na umu da su svi bajtovi korisnog opterećenja 0xFF, kako izgleda tišina u-zakona.

Zaglavlje RTP paketa sastoji se od 12 obaveznih bajtova, ali u dva slučaja može biti duže:

  • Kada paket nosi audio signal dobijen miješanjem signala iz više izvora (RTP tokova), tada se nakon prvih 12 bajtova zaglavlja nalazi tabela sa listom identifikatora izvora čiji su korisni tereti korišteni za kreiranje korisnog opterećenja ovog paketa. U ovom slučaju, u donja četiri bita prvog bajta zaglavlja (polje Broj identifikatora izvora koji doprinose) označava broj izvora. Veličina polja je 4 bita, tako da tabela može sadržavati do 15 izvornih identifikatora. Svaki od njih zauzima 4 bajta. Ova tabela se koristi prilikom postavljanja konferencijskog poziva.

  • Kada naslov ima ekstenziju . U ovom slučaju, bit se postavlja u prvi bajt zaglavlja X. U proširenom zaglavlju, nakon tabele učesnika (ako postoji), nalazi se zaglavlje ekstenzije od jedne riječi, nakon čega slijede riječi ekstenzije. Ekstenzija je skup bajtova koje možete koristiti za prijenos dodatnih podataka. Standard ne propisuje format ovih podataka - to može biti bilo šta. Na primjer, to mogu biti neka dodatna podešavanja za uređaj koji prima RTP pakete. Za neke aplikacije, međutim, razvijeni su prošireni standardi zaglavlja. To se radi, na primjer, za komunikacije u standardu ED-137 (Standardi interoperabilnosti za VoIP ATM komponente).

Pogledajmo sada detaljnije polja zaglavlja. Ispod je kanonska slika sa strukturom RTP zaglavlja kojoj također nisam mogao odoljeti i obojao sam je u iste boje.

Istraživanje Mediastreamer2 VoIP motora. Dio 8
VER — broj verzije protokola (trenutna verzija 2);

P - oznaka koja se postavlja u slučajevima kada je RTP paket dopunjen praznim bajtovima na kraju;

X - oznaka da je zaglavlje prošireno;

CC — sadrži broj CSRC identifikatora iza zaglavlja konstante (posle riječi 1..3), tabela nije prikazana na slici;

M — marker početka kadra ili prisutnosti govora u kanalu (ako se koristi detektor govorne pauze). Ako prijemnik ne sadrži detektor govorne pauze, tada će ovaj bit biti trajno postavljen;

PTYPE - specificira format korisnog opterećenja;

Redni broj - broj paketa, koji se koristi za vraćanje redosleda po kojem se paketi reprodukuju, pošto je stvarna situacija kada paketi mogu doći do primaoca pogrešnim redosledom kojim su poslati. Početna vrijednost mora biti nasumična, to je učinjeno tako da ako je RTP tok šifriran, biće teško hakovati ga. Takođe, ovo polje vam omogućava da otkrijete propuštene pakete;

Vremenska oznaka - vremenska oznaka. Vrijeme se mjeri u uzorcima signala, tj. ako burst sadrži 160 uzoraka, tada će vremenska oznaka sljedećeg niza biti više za 160. Početna vrijednost vremenske oznake mora biti nasumična;

SSRC — identifikator izvora paketa, mora biti jedinstven. Bolje ga je generirati nasumično prije pokretanja RTP streama.

Ako razvijete vlastiti RTP odašiljač ili prijemnik, morat ćete pregledati svoje pakete više puta kako biste povećali produktivnost, preporučujem da naučite kako koristiti filtriranje paketa u TSharku, ono vam omogućava da uhvatite samo one pakete koji su interes za vas. U okruženju u kojem desetine RTP uređaja rade na mreži, ovo je vrlo vrijedno. U komandnoj liniji TShark, opcije filtriranja su specificirane opcijom "-f". Koristili smo ovu opciju kada smo htjeli uhvatiti pakete sa porta 8010:
-f "udp port 8010"
Parametri filtriranja su u suštini skup kriterijuma koje "uhvaćeni" paket mora da ispuni. Uslov može provjeriti adresu, port, vrijednost određenog bajta u paketu. Uslovi se mogu kombinovati sa logičkim operacijama "AND", "OR" itd. Veoma moćan alat.

Ako želite vidjeti dinamiku promjena polja u serijama, morat ćete duplicirati izlaz TShark u datoteku, kao što je prikazano u prošlom članku, prosljeđivanjem izlaza TShark na ulazu tee. Zatim otvorite datoteku dnevnika sa manje, vim ili neki drugi alat koji može brzo raditi s ogromnim tekstualnim datotekama i tražiti nizove, možete saznati sve nijanse ponašanja polja paketa u RTP streamu.

Ako trebate slušati signal koji prenosi RTP stream, onda morate koristiti verziju TShark sa vizuelnim interfejsom Wireshark. Uz jednostavne manipulacije mišem, možete slušati i vidjeti valni oblik signala. Ali pod jednim uslovom - ako je kodiran u u-law ili a-low formatu.

Sljedeći članak sa Vama ćemo napraviti duplex interfon. Nabavite par slušalica i jednog sagovornika.

izvor: www.habr.com

Dodajte komentar