Artikelmaterialet Àr hÀmtat frÄn min .

Strukturen av RTP-paketet
Tidigare 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:

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.

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 kommer vi att skapa ett duplexkommunikationssystem tillsammans. Se till att ha ett par hörlurar och en kompis.
KĂ€lla: habr.com
