Vi studerar VoIP-motorn Mediastreamer2. Del 8

Artikelmaterialet Àr hÀmtat frÄn min Zen-kanal.

Vi studerar VoIP-motorn Mediastreamer2. Del 8

Strukturen av RTP-paketet

Tidigare artikeln Vi har med hjÀlp av TShark genomfört en fÄngst av RTP-paket som utbyttes mellan vÄr mottagare och sÀndare. I denna kommer vi att fÀrglÀgga paketets element i olika fÀrger och diskutera deras syften.

LÄt oss titta pÄ samma paket, men nu med fÀrgade fÀlt och förklarande texter:
Vi studerar VoIP-motorn Mediastreamer2. Del 8

I den nedre delen av listningen Àr de bytes som utgör RTP-paketet fÀrgade, och det Àr i sin tur nyttolasten i UDP-paketet (dess huvud Àr inringat med en svart linje). FÀrgfonderna markerar bytes av RTP-huvudet, medan den gröna fÀrgen framhÀver datablocket som innehÄller RTP-paketets nyttolast. Data presenteras i hexadecimalt format. I vÄrt fall Àr detta ett ljudsignal komprimerat enligt u-law (my-law), det vill sÀga en sampling har storleken 1 byte. Eftersom vi anvÀnde standard samplingfrekvens (8000 Hz), ska varje RTP-paket innehÄlla 160 bytes nyttolast vid en paketfrekvens pÄ 50 Hz. Detta ser vi nÀr vi rÀknar bytes i det gröna omrÄdet; de borde vara 10 rader.

Enligt standarden ska mĂ€ngden data i nyttolasten vara ett multipel av fyra, eller med andra ord innehĂ„lla ett helt antal fyrabyte ord. Om det skulle hĂ€nda att din nyttolast inte uppfyller denna regel, mĂ„ste du lĂ€gga till nollbytes i slutet av nyttolasten och sĂ€tta biten Padding. Denna bit finns i den första byte av RTP-huvudet, och den Ă€r fĂ€rgad turkos. Observera att alla bytes i nyttolasten har vĂ€rdet 0xFF – sĂ„ ser tystnad ut i u-law format.

RTP-paketets huvud bestÄr av 12 obligatoriska bytes, men i tvÄ fall kan den vara lÀngre:

  • NĂ€r paketet bĂ€r en ljudsignal som mottagits genom att blanda signaler frĂ„n flera kĂ€llor (RTP-strömmar), placeras en lista med identifikationsnummer för kĂ€llor, vars nyttolaster har anvĂ€nts för att skapa nyttolasten av detta paket, efter de första 12 bytes av huvudet. I de lĂ€gre fyra bitarna av den första byte av huvudet (fĂ€ltet Antal identifierare för bidragande kĂ€llor) anger antalet kĂ€llor. Storleken pĂ„ fĂ€ltet Ă€r 4 bitar, vilket innebĂ€r att tabellen kan innehĂ„lla upp till 15 kĂ€llidentifierare. Var och en tar upp 4 byte. Denna tabell anvĂ€nds vid organiseringen av konferenskommunikation.

  • NĂ€r rubriken har en förlĂ€ngning. I detta fall sĂ€tts en bit i den första byte av rubriken. X. I den utvidgade rubriken, efter deltagartabellen (om de finns), finns en utvidgad rubrik med storlek av ett ord, följt av utvidgade ord. En utvidgning Ă€r en uppsĂ€ttning byte som du kan anvĂ€nda för att överföra ytterligare data. Standarden specificerar inte formatet för dessa data — det kan vara vilket som helst. Till exempel kan det vara nĂ„gra ytterligare instĂ€llningar för en enhet som tar emot RTP-paket. För vissa tillĂ€mpningar har standarder för den utvidgade rubriken utvecklats. Det Ă€r sĂ„ gjort exempelvis för kommunikationsmedel i standarden ED-137 ( Interoperability Standards for VoIP ATM Components ).

LÄt oss nu titta mer i detalj pÄ rubrikfÀlten. Nedan visas en kanonisk bild med strukturen för RTP-rubriken, som jag ocksÄ inte kunde lÄta bli att fÀrga i samma fÀrger.

Vi studerar VoIP-motorn Mediastreamer2. Del 8
VER — versionsnumret för protokollet (nuvarande version 2);

P — en flagga som sĂ€tts i de fall dĂ€r RTP-paketet kompletteras med tomma byte i slutet;

X — en flagga för att indikera att rubriken Ă€r utvidgad;

CC — innehĂ„ller antalet CSRC-identifikatorer som följer efter den fasta rubriken (efter orden 1..3), i bilden visas inte tabellen;

M — en markör för början av ett paket eller nĂ€rvaro av tal i kanalen (om tystnadsdetektor anvĂ€nds). Om mottagaren inte har en tystnadsdetektor, ska denna bit alltid sĂ€ttas;

PTYPE — indikerar formatet för nyttolasten;

Sekvensnummer — paketnumret, anvĂ€nds för att Ă„terstĂ€lla ordningen pĂ„ uppspelningen av paketen, eftersom det i verkligheten kan hĂ€nda att paketen nĂ„r mottagaren i en annan ordning Ă€n den som de skickades. StartvĂ€rdet ska vara slumpmĂ€ssigt, detta görs för att om RTP-strömmen krypteras ska det bli svĂ„rare att bryta den. Detta fĂ€lt möjliggör Ă€ven att upptĂ€cka bortfall av paket;

TidsstĂ€mpel — tidsstĂ€mpel. Tiden mĂ€ts i signalprov, det vill sĂ€ga om paketet innehĂ„ller 160 prov, kommer tidsstĂ€mpeln för nĂ€sta paket att öka med 160. StartvĂ€rdet för tidsstĂ€mpeln bör vara slumpmĂ€ssigt;

SSRC — identifierare för paketkĂ€llan, den mĂ„ste vara unik. Det Ă€r bĂ€st att generera den slumpmĂ€ssigt innan du startar RTP-flödet.

Om du utvecklar din egen sÀndare eller mottagare för RTP-paket, kommer du att behöva titta pÄ dina paket flera gÄnger för att öka produktiviteten; jag rekommenderar att du bemÀstrar anvÀndningen av paketfiltrering i TShark, eftersom det tillÄter dig att fÄnga endast de paket som Àr av intresse för dig. Under förhÄllanden dÀr dussintals RTP-enheter fungerar pÄ nÀtverket Àr detta mycket vÀrdefullt. I kommandoraden stÀlls filtreringsparametrarna in med alternativet "-f". Vi anvÀnde detta alternativ nÀr vi ville fÄnga paket frÄn port 8010:
-f "udp port 8010"
Filtreringsparametrar Àr i grunden en uppsÀttning kriterier som det "fÄngade" paketet mÄste uppfylla. Villkoret kan kontrollera adress, port, vÀrdet av en viss byte i paketet. Villkor kan kombineras med logiska operationer "OCH", "ELLER" och sÄ vidare. Ett mycket kraftfullt verktyg.

Om du vill se dynamiken i fÀltsÀndningar i paketen, mÄste du duplicera utdata TShark till en fil, som visat i den tidigare artikeln, med hjÀlp av att överföra utdata TShark till ingÄngen tee. Du öppnar sedan loggfilen med less, vim eller nÄgot annat verktyg som snabbt kan hantera stora textfiler och utföra sökningar, sÄ kan du ta reda pÄ alla nyanser i fÀltena för RTP-flödet.

Om du behöver lyssna pĂ„ signalen som överförs av RTP-flödet, bör du anvĂ€nda versionen TShark med grafiskt grĂ€nssnitt Wireshark. Genom enkla musmanipulationer kan du dĂ€r lyssna, se signalens oscilloskop. Men under ett villkor — om den kodas i formatet u-law eller a-law.

I nÀsta artikeln kommer vi att skapa ett duplexkommunikationssystem tillsammans. Se till att ha ett par hörlurar och en kompis.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster