Skúmanie enginu Mediastreamer2 VoIP. Časť 8

Materiál článku je prevzatý z môjho zenový kanál.

Skúmanie enginu Mediastreamer2 VoIP. Časť 8

Štruktúra paketov RTP

V poslednom článok používame TShark vykonalo zachytávanie RTP paketov, ktoré si vymieňali náš prijímač a vysielač. No, v tomto namaľujeme prvky balenia v rôznych farbách a hovoríme o ich účele.

Pozrime sa na ten istý balík, ale s farebnými okrajmi a vysvetľujúcimi štítkami:
Skúmanie enginu Mediastreamer2 VoIP. Časť 8

V spodnej časti zoznamu sú zafarbené bajty, ktoré tvoria RTP paket, a to je zase užitočné zaťaženie paketu UDP (jeho hlavička je zakrúžkovaná čiernou farbou). Farebné pozadie označuje bajty hlavičky RTP a dátový blok, ktorý obsahuje užitočné zaťaženie paketu RTP, je zvýraznený zelenou farbou. Údaje sú prezentované v hexadecimálnom formáte. V našom prípade ide o audio signál komprimovaný podľa u-law (mu-law), t.j. jedna vzorka má veľkosť 1 bajt. Keďže sme použili predvolenú vzorkovaciu frekvenciu (8000 Hz), s paketovou rýchlosťou 50 Hz, každý RTP paket by mal obsahovať 160 bajtov užitočného zaťaženia. Uvidíme to spočítaním bajtov v zelenej ploche, malo by ich byť 10 riadkov.

Podľa normy musí byť množstvo dát v užitočnom zaťažení násobkom štyroch, alebo inými slovami, musí obsahovať celé číslo štvorbajtových slov. Ak sa stane, že vaše užitočné zaťaženie nezodpovedá tomuto pravidlu, musíte na koniec užitočného zaťaženia pridať bajty s nulovou hodnotou a nastaviť bit Padding. Tento bit sa nachádza v prvom byte hlavičky RTP a má tyrkysovú farbu. Všimnite si, že všetky bajty užitočného zaťaženia sú 0xFF, ako vyzerá ticho u-zákona.

Hlavička RTP paketu pozostáva z 12 povinných bajtov, ale v dvoch prípadoch môže byť dlhšia:

  • Keď paket nesie zvukový signál získaný zmiešaním signálov z viacerých zdrojov (RTP tokov), potom po prvých 12 bajtoch hlavičky je tabuľka so zoznamom identifikátorov zdrojov, ktorých užitočné zaťaženia boli použité na vytvorenie užitočného zaťaženia tohto paketu. V tomto prípade v dolných štyroch bitoch prvého bajtu hlavičky (pole Prispievajúce zdrojové identifikátory sa počítajú) označuje počet zdrojov. Veľkosť poľa je 4 bity, takže tabuľka môže obsahovať až 15 zdrojových identifikátorov. Každý z nich zaberá 4 bajty. Táto tabuľka sa používa pri vytváraní konferenčného hovoru.

  • Keď má názov príponu . V tomto prípade je bit nastavený v prvom byte hlavičky X. V rozšírenej hlavičke je za tabuľkou účastníkov (ak existuje) jednoslovná rozširujúca hlavička, za ktorou nasledujú rozširujúce slová. Rozšírenie je zbierka bajtov, ktoré môžete použiť na prenos ďalších údajov. Formát týchto údajov norma nestanovuje – môže to byť čokoľvek. Môže ísť napríklad o niektoré dodatočné nastavenia pre zariadenie, ktoré prijíma RTP pakety. Pre niektoré aplikácie však boli vyvinuté rozšírené štandardy hlavičiek. Robí sa to napríklad pri komunikácii v štandarde ED-137 (štandardy interoperability pre VoIP ATM komponenty).

Teraz sa pozrime na polia hlavičky podrobnejšie. Nižšie je kanonický obrázok so štruktúrou hlavičky RTP, ktorému som tiež neodolal a namaľoval ho v rovnakých farbách.

Skúmanie enginu Mediastreamer2 VoIP. Časť 8
VER — číslo verzie protokolu (aktuálna verzia 2);

P - príznak, ktorý sa nastavuje v prípadoch, keď je RTP paket na konci doplnený o prázdne bajty;

X - príznak, že hlavička je predĺžená;

CC — obsahuje počet identifikátorov CSRC za hlavičkou konštanty (za slovami 1..3), tabuľka na obrázku nie je znázornená;

M — značka začiatku rámca alebo prítomnosti reči v kanáli (ak sa používa detektor pauzy reči). Ak prijímač neobsahuje detektor rečovej pauzy, potom musí byť tento bit trvale nastavený;

PTYPE - určuje formát užitočného zaťaženia;

Poradové číslo - číslo paketu, ktoré sa používa na obnovenie poradia, v akom sa pakety prehrávajú, pretože reálna situácia je, keď sa pakety môžu dostať k prijímaču v nesprávnom poradí, v akom boli odoslané. Počiatočná hodnota musí byť náhodná, to sa robí tak, že ak je RTP stream zašifrovaný, bude ťažké ho hacknúť. Toto pole vám tiež umožňuje zistiť zmeškané pakety;

Timestamp - časová značka. Čas sa meria vo vzorkách signálu, t.j. ak zhluk obsahuje 160 vzoriek, časová pečiatka nasledujúceho zhluku bude o 160 viac. Počiatočná hodnota časovej pečiatky musí byť náhodná;

SSRC — identifikátor zdroja balíka, musí byť jedinečný. Pred spustením streamu RTP je lepšie ho vygenerovať náhodne.

Ak vyvíjate vlastný vysielač alebo prijímač RTP paketov, budete sa musieť na svoje pakety pozrieť viackrát, aby ste zvýšili produktivitu, odporúčam vám naučiť sa používať filtrovanie paketov v TShark, umožňuje vám zachytiť iba tie pakety, ktoré sú pre vás zaujímavé. V prostredí, kde v sieti fungujú desiatky RTP zariadení, je to veľmi cenné. V príkazovom riadku TShark sú možnosti filtrovania špecifikované voľbou "-f". Túto možnosť sme použili, keď sme chceli zachytiť pakety z portu 8010:
-f "udp port 8010"
Parametre filtrovania sú v podstate súbor kritérií, ktorým musí vyhovovať „zachytený“ paket. Podmienka môže skontrolovať adresu, port, hodnotu určitého bajtu v pakete. Podmienky je možné kombinovať s logickými operáciami „AND“, „ALEBO“ atď. Veľmi silný nástroj.

Ak chcete zobraziť dynamiku zmien polí v dávkach, budete musieť duplikovať výstup TShark do súboru, ako je uvedené v poslednom článku, odovzdaním výstupu TShark Pri vchode tee. Potom otvorte súbor denníka s menej, vim alebo iný nástroj, ktorý dokáže rýchlo pracovať s obrovskými textovými súbormi a vyhľadávať reťazce, môžete zistiť všetky nuansy správania sa paketových polí v RTP streame.

Ak potrebujete počúvať signál prenášaný prúdom RTP, musíte použiť verziu TShark s vizuálnym rozhraním Wireshark. Pomocou jednoduchých manipulácií myšou môžete počúvať a vidieť priebeh signálu. Ale pod jednou podmienkou - ak je zakódovaný vo formáte u-law alebo a-low.

Ďalšie článok vyrobíme s vami duplexný interkom. Zásobte si pár náhlavných súprav a jedného partnera.

Zdroj: hab.com

Pridať komentár