Zkoumáme VoIP engine Mediastreamer2. Část 8

Materiál článku je převzat z mého zenového kanálu.

Zkoumáme VoIP engine Mediastreamer2. Část 8

Struktura RTP-paketu

V minulosti článku pomocí TShark jsme provedli zachycení RTP-paketů, kterými si vyměňovaly naše přijímač a vysílač. V této části pak obarvíme prvky paketu na různé barvy a probereme jejich funkci.

Podívejme se na stejný paket, ale již s obarvenými poli a vysvětlovacími popisky:
Zkoumáme VoIP engine Mediastreamer2. Část 8

Ve spodní části výpisu jsou obarveny bajty, které tvoří RTP-paket, jenž je zároveň užitečným zatížením UDP-paketu (jeho hlavička je obkreslena černou linkou). Barevné pozadí vyznačuje bajty RTP-hlavičky, a zelenou barvou je vyznačen blok dat, který obsahuje užitečné zatížení RTP-paketu. Data jsou zde představena v šestnáctkové formátu. V našem případě jde o zvukový signál komprimovaný podle u-zákona (mü-zákona), t.j. jeden vzorek má velikost 1 bajt. Protože jsme použili výchozí vzorkovací frekvenci (8000 Hz), musí každý RTP-paket obsahovat 160 bajtů užitečného zatížení při frekvenci paketů 50 Hz. To uvidíme tak, že spočítáme bajty v zelené oblasti, mělo by jich být 10 řádků.

Podle standardu musí být množství dat v užitečném zatížení násobkem čtyř, nebo jinými slovy, musí obsahovat celé množství čtyřbajtových slov. Pokud se stane, že vaše užitečné zatížení nebude vyhovovat této podmínce, je třeba na konec užitečného zatížení přidat bajty s nulovými hodnotami a nastavit bit Padding (Doplňování). Tento bit se nachází v prvním bajtu RTP-hlavičky a je zabarven tyrkysovou barvou. Všimněte si, že všechny bajty užitečného zatížení mají hodnotu 0xFF — takto vypadá ticho ve formátu u-law.

Hlavička RTP-paketu se skládá z 12 povinných bajtů, ale ve dvou případech může být delší:

  • Když paket nese zvukový signál získaný smícháním signálů z několika zdrojů (RTP toků), pak po prvních 12 bajtech hlavičky následuje tabulka se seznamem identifikátorů zdrojů, jejichž užitečné zatížení bylo použito pro vytvoření užitečného zatížení tohoto paketu. Přičemž v nižších čtyřech bitech prvního bajtu hlavičky (pole Počet identifikátorů přispívajících zdrojů) uvádí počet zdrojů. Velikost pole je 4 bity, takže tabulka může obsahovat až 15 identifikátorů zdrojů. Každý z nich zabírá 4 bajty. Tato tabulka se používá při organizaci konferenčního spojení.

  • Když má hlavička rozšíření. V tomto případě se v prvním bajtu hlavičky nastaví bit X. V rozšířené hlavičce, po tabulce účastníků (pokud existují), se nachází hlavička rozšíření o velikosti jednoho slova, a za ní následují slova rozšíření. Rozšíření je soubor bajtů, které můžete použít k přenosu dodatečných dat. Standard neuvádí formát těchto dat — může být libovolný. Například to mohou být nějaká dodatečná nastavení pro zařízení, které přijímá RTP-pakety. Pro některé aplikace však byly vyvinuty standardy rozšířené hlavičky. Například to bylo provedeno pro komunikační prostředky ve standardu ED-137 ( Interoperability Standards for VoIP ATM Components ).

Nyní se podívejme na pole hlavičky podrobněji. Níže je zobrazen kanonický obrázek se strukturou RTP-hlavičky, který jsem také nemohl odolat a vybarvil jej ve stejných barvách.

Zkoumáme VoIP engine Mediastreamer2. Část 8
VER — číslo verze protokolu (aktuální verze 2);

redicted Frame) — flag, který se nastavuje v případech, kdy je RTP-paket doplněn prázdnými bajty na konci;

X — flag, který indikuje, že hlavička je rozšířená;

CC — obsahuje počet CSRC identifikátorů, které následují za trvalou hlavičkou (po slovech 1..3), na obrázku tabulka není zobrazena;

M — marker začátku rámce nebo přítomnosti řeči v kanálu (pokud je použit detektor pauz v řeči). Pokud příjemce neobsahuje detektor pauz v řeči, měl by být tento bit trvale nastaven;

PTYPE — udává formát payloadu;

Číslo sekvence — číslo paketu, používá se k obnově pořadí přehrávání paketů, protože skutečně může nastat situace, kdy pakety dosahují příjemce ne v tom pořadí, v jakém byly odeslány. Počáteční hodnota by měla být náhodná, to se dělá, aby se v případě šifrování RTP-streamu ztížilo jeho prolomení. Také toto pole umožňuje odhalit ztráty paketů;

Časová značka — časová značka. Čas se měří ve vzorcích signálu, t.j. pokud paket obsahuje 160 vzorků, časová značka následujícího paketu bude o 160 vyšší. Počáteční hodnota časové značky by měla být náhodná;

SSRC — identifikátor zdroje paketu, měl by být unikátní. Je lepší jej generovat náhodně před spuštěním RTP toku.

Pokud vyvíjíte svůj vlastní vysílač nebo přijímač RTP paketů, budete muset několikrát zkontrolovat své pakety, abyste zvýšili efektivitu, doporučuji vám osvojit si použití filtrování paketů v TShark, které umožňuje zachytit pouze ty pakety, které vás zajímají. V podmínkách, kdy v síti pracují desítky RTP zařízení, je to velmi cenné. V příkazovém řádku TShark se parametry filtrování zadávají pomocí volby "-f". Tuto volbu jsme použili, když jsme chtěli zachytit pakety z portu 8010:
-f "udp port 8010"
Parametry filtrování jsou v podstatě souborem kritérií, kterým by měl odpovídat "zachycený" paket. Podmínka může kontrolovat adresu, port, hodnotu určitého bajtu v paketu. Podmínky lze kombinovat logickými operacemi "A", "NEBO" a podobně. Velmi mocný nástroj.

Pokud chcete sledovat dynamiku změn polí v paketech, budete muset duplikovat výstup TShark do souboru, jak bylo ukázáno v předchozím článku, pomocí přesměrování výstupu TShark na vstup tee. Dále otevřete logovací soubor pomocí less, vim nebo jiného nástroje, který dokáže rychle pracovat s obrovskými textovými soubory a provádět vyhledávání řetězců, abyste zjistili všechny nuance chování polí paketů v RTP toku.

Pokud potřebujete poslouchat signál přenášený RTP tokem, je třeba použít verzi TShark s grafickým rozhraním Wireshark. Při jednoduchých manipulacích myší zde můžete poslouchat, vidět oscilogram signálu. Ale za jedné podmínky — pokud bude kódován ve formátu u-law nebo a-low.

V následující článku vytvoříme si duplexní komunikační zařízení. Připravte si pár sluchátek a jednoho společníka.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster