Prozkoumání enginu Mediastreamer2 VoIP. Část 8

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

Prozkoumání enginu Mediastreamer2 VoIP. Část 8

Struktura paketů RTP

V minulosti článek používáme TShark provedlo zachycení RTP paketů, které byly vyměněny mezi naším přijímačem a vysílačem. No, v tomto budeme malovat prvky balíčku v různých barvách a mluvit o jejich účelu.

Podívejme se na stejný balíček, ale s barevnými okraji a vysvětlujícími štítky:
Prozkoumání enginu Mediastreamer2 VoIP. Část 8

Ve spodní části výpisu jsou zabarveny bajty, které tvoří RTP paket, a to je zase užitečné zatížení UDP paketu (jeho hlavička je zakroužkována černě). Barevné pozadí označuje bajty hlavičky RTP a datový blok, který obsahuje užitečné zatížení paketu RTP, je zvýrazněn zeleně. Data jsou prezentována v hexadecimálním formátu. V našem případě se jedná o audio signál komprimovaný podle u-law (mu-law), tzn. jeden vzorek má velikost 1 bajt. Protože jsme použili výchozí vzorkovací frekvenci (8000 Hz), při paketové frekvenci 50 Hz by měl každý RTP paket obsahovat 160 bajtů užitečného zatížení. 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é zátěži násobkem čtyř, nebo jinými slovy, musí obsahovat celé číslo čtyřbajtových slov. Pokud se stane, že vaše užitečné zatížení neodpovídá tomuto pravidlu, musíte na konec užitečného zatížení přidat bajty s nulovou hodnotou a nastavit bit Padding. Tento bit se nachází v prvním bajtu hlavičky RTP a má tyrkysovou barvu. Všimněte si, že všechny bajty užitečného zatížení jsou 0xFF, jak vypadá ticho 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 přenáší audio signál získaný smícháním signálů z více zdrojů (RTP streamy), pak po prvních 12 bytech záhlaví je tabulka se seznamem identifikátorů zdrojů, jejichž užitečné zatížení bylo použito k vytvoření užitečného zatížení tohoto paketu. V tomto případě v dolních čtyřech bitech prvního bajtu záhlaví (pole Počítají se identifikátory přispívajících zdrojů) označuje počet zdrojů. Velikost pole je 4 bity, takže tabulka může obsahovat až 15 identifikátorů zdroje. Každý z nich zabírá 4 bajty. Tato tabulka se používá při sestavování konferenčního hovoru.

  • Když má název příponu . V tomto případě je bit nastaven v prvním bajtu záhlaví X. V rozšířeném záhlaví je za tabulkou účastníků (pokud existuje) jednoslovné rozšiřující záhlaví a za ním rozšiřující slova. Rozšíření je kolekce bajtů, které můžete použít k přenosu dalších dat. Formát těchto údajů norma nestanoví – může to být cokoliv. Může se například jednat o některá další nastavení pro zařízení, které přijímá pakety RTP. Pro některé aplikace však byly vyvinuty rozšířené standardy záhlaví. To se provádí například pro komunikaci ve standardu ED-137 (standardy interoperability pro komponenty ATM VoIP).

Nyní se podíváme na pole záhlaví podrobněji. Níže je kanonický obrázek se strukturou hlavičky RTP, kterému jsem také neodolal a namaloval ve stejných barvách.

Prozkoumání enginu Mediastreamer2 VoIP. Část 8
VER — číslo verze protokolu (aktuální verze 2);

P - příznak, který se nastavuje v případech, kdy je RTP paket doplněn o prázdné bajty na konci;

X - příznak, že záhlaví je prodlouženo;

CC — obsahuje počet CSRC identifikátorů za hlavičkou konstanty (za slovy 1..3), tabulka na obrázku není zobrazena;

M — značka začátku rámce nebo přítomnosti řeči v kanálu (pokud je použit detektor řečové pauzy). Pokud přijímač neobsahuje detektor řečových pauz, pak musí být tento bit trvale nastaven;

PTYPE - specifikuje formát užitečného zatížení;

Pořadové číslo - číslo paketu, používané k obnovení pořadí, ve kterém jsou pakety přehrávány, protože skutečná situace nastává, když pakety mohou dorazit k přijímači ve špatném pořadí, v jakém byly odeslány. Počáteční hodnota musí být náhodná, to se dělá tak, že pokud je RTP stream zašifrovaný, bude těžké ho hacknout. Toto pole také umožňuje detekovat zmeškané pakety;

Timestamp - časové razítko. Čas se měří ve vzorcích signálu, tzn. pokud burst obsahuje 160 vzorků, pak časová značka dalšího burstu bude o 160 více. Počáteční hodnota časového razítka musí být náhodná;

SSRC — identifikátor zdroje balíku, musí být jedinečný. Je lepší jej vygenerovat náhodně před spuštěním RTP streamu.

Pokud vyvíjíte vlastní RTP paketový vysílač nebo přijímač, budete se muset podívat na své pakety více než jednou, abyste zvýšili produktivitu, doporučuji vám naučit se používat filtrování paketů v TShark, umožňuje zachytit pouze ty pakety, které jsou pro vás zajímavé. V prostředí, kde v síti fungují desítky RTP zařízení, je to velmi cenné. V příkazovém řádku TShark jsou možnosti filtrování specifikovány volbou "-f". Tuto možnost jsme použili, když jsme chtěli zachytit pakety z portu 8010:
-f "udp port 8010"
Parametry filtrování jsou v podstatě sadou kritérií, kterým musí „chycený“ paket odpovídat. Podmínka může zkontrolovat adresu, port, hodnotu určitého bajtu v paketu. Podmínky lze kombinovat s logickými operacemi "AND", "OR" atd. Velmi silný nástroj.

Pokud chcete zobrazit dynamiku změn polí v dávkách, budete muset duplikovat výstup TShark do souboru, jak je uvedeno v minulém článku, předáním výstupu TShark u vchodu Tee. Dále otevřete soubor protokolu pomocí méně, vim nebo jiný nástroj, který umí rychle pracovat s obrovskými textovými soubory a vyhledávat řetězce, můžete zjistit všechny nuance chování paketových polí v RTP streamu.

Pokud potřebujete poslouchat signál přenášený RTP streamem, pak musíte použít verzi TShark s vizuálním rozhraním Wireshark. Pomocí jednoduchých manipulací myší můžete poslouchat a vidět průběh signálu. Ale pod jednou podmínkou - pokud je zakódován ve formátu u-law nebo a-low.

další článek vyrobíme s vámi duplexní interkom. Připravte si pár náhlavních souprav a jednoho partnera.

Zdroj: www.habr.com

Přidat komentář