Mediastreamer2 VoIP programmas izpēte. 8. daļa

Raksta materiāls ņemts no mana zen kanāls.

Mediastreamer2 VoIP programmas izpēte. 8. daļa

RTP pakešu struktūra

Pagātnē raksts mēs ar palīdzību TShark Mēs uztvērām RTP paketes, ar kurām apmainījās mūsu uztvērējs un raidītājs. Šajā sadaļā mēs iekrāsosim paketes elementus un apspriedīsim to mērķus.

Apskatīsim to pašu iepakojumu, bet ar iekrāsotiem laukiem un skaidrojošiem uzrakstiem:
Mediastreamer2 VoIP programmas izpēte. 8. daļa

Saraksta apakšējā daļā ir parādīti krāsainie baiti, kas veido RTP paketi, kas savukārt ir UDP paketes lietderīgā slodze (tās galvene ir iezīmēta melnā krāsā). Krāsainie foni norāda RTP galvenes baitus, un zaļais datu bloks, kas satur RTP paketes lietderīgo slodzi, ir iezīmēts. Dati tiek attēloti heksadecimālā formātā. Mūsu gadījumā tas ir audio signāls, kas saspiests, izmantojot u likumu (mu likumu), kas nozīmē, ka viens paraugs ir 1 baita lielumā. Tā kā mēs izmantojām noklusējuma paraugu ņemšanas frekvenci (8000 Hz), pie paketes frekvences 50 Hz katrā RTP paketē jābūt 160 baitiem lietderīgās slodzes. To var redzēt, saskaitot baitus zaļajā zonā; jābūt 10 rindām.

Saskaņā ar standartu datu apjomam vērtajā slodzē jābūt četru reizinājumam jeb, citiem vārdiem sakot, tajā jāiekļauj vesels skaits četru baitu vārdu. Ja jūsu vērtā slodze neatbilst šim noteikumam, vērtās slodzes beigās jāpievieno nulles vērtības baiti un jāiestata papildināšanas bits. Šis bits atrodas RTP galvenes pirmajā baitā un ir iezīmēts tirkīza krāsā. Ņemiet vērā, ka visiem vērtās slodzes baitiem ir vērtība 0xFF — šādi izskatās klusums u-law formātā.

RTP paketes galvene sastāv no 12 obligātajiem baitiem, bet divos gadījumos tā var būt garāka:

  • Kad pakete pārraida audio signālu, kas iegūts, sajaucot signālus no vairākiem avotiem (RTP plūsmām), pēc pirmajiem 12 galvenes baitiem ir tabula ar to avotu identifikatoru sarakstu, kuru lietderīgā slodze tika izmantota šīs paketes lietderīgās slodzes izveidošanai. Šajā gadījumā galvenes pirmā baita mazāk nozīmīgie četri biti (lauks Veicinošo avotu identifikatoru skaits) norāda avotu skaitu. Lauka lielums ir 4 biti, tāpēc tabulā var būt līdz 15 avotu identifikatoriem, katrs no kuriem aizņem 4 baitus. Šī tabula tiek izmantota, iestatot konferenču zvanus.

  • Ja galvenei ir paplašinājums, šajā gadījumā galvenes pirmajā baitā tiek iestatīts bits. XPaplašinātajā galvenē pēc dalībnieku tabulas (ja tāda ir) ir viena vārda paplašinājuma galvene, kam seko paplašinājuma vārdi. Paplašinājums ir baitu kopa, ko var izmantot papildu datu pārraidei. Standarts nenorāda šo datu formātu — tas var būt jebkas. Piemēram, tie varētu būt daži papildu iestatījumi ierīcei, kas saņem RTP paketes. Tomēr dažām lietojumprogrammām ir izstrādāti paplašinātās galvenes standarti. Tas tiek darīts, piemēram, saziņai standartā ED-137 (VoIP bankomātu komponentu sadarbspējas standarti).

Tagad aplūkosim galvenes laukus tuvāk. Zemāk ir redzams RTP galvenes struktūras kanonisks attēls, kuru es nevarēju pretoties iekrāsot tādā pašā veidā.

Mediastreamer2 VoIP programmas izpēte. 8. daļa
VER — protokola versijas numurs (pašreizējā 2. versija);

P — karodziņš, kas tiek iestatīts gadījumos, kad RTP pakete beigās tiek papildināta ar tukšiem baitiem;

X — atzīmēt, ka nosaukums ir pagarināts;

CC — satur CSRC identifikatoru skaitu aiz konstantās galvenes (pēc vārdiem 1..3), tabula attēlā nav parādīta;

M — marķieris, kas norāda kadra sākumu vai runas klātbūtni kanālā (ja tiek izmantots runas pauzes detektors). Ja uztvērējam nav runas pauzes detektora, šim bitam jābūt iestatītam pastāvīgi;

PTYPE — norāda lietderīgās slodzes formātu;

Secības numurs — paketes numurs, ko izmanto, lai atjaunotu paketes atskaņošanas secību, jo patiesībā paketes var sasniegt saņēmēju nepareizā secībā. Sākotnējai vērtībai jābūt nejaušai, lai to būtu grūtāk uzlauzt, ja RTP plūsma ir šifrēta. Šis lauks ļauj arī noteikt trūkstošās paketes;

Timestamp — laika zīmogs. Laiks tiek mērīts signāla paraugos, t. i., ja paketē ir 160 paraugi, nākamās paketes laika zīmogs būs par 160 paraugiem lielāks. Laika zīmoga sākotnējai vērtībai jābūt nejaušai;

SSRC — paketes avota identifikators; tam jābūt unikālam. Vislabāk to ģenerēt nejauši pirms RTP plūsmas sākšanas.

Ja izstrādājat savu RTP pakešu raidītāju vai uztvērēju, jums būs bieži jāpārbauda savas paketes. Lai uzlabotu produktivitāti, iesaku apgūt pakešu filtrēšanas lietošanu programmā TShark. Tas ļauj uztvert tikai tās paketes, kas jūs interesē. Tas ir nenovērtējami, ja tīklā darbojas desmitiem RTP ierīču. TShark komandrindā filtrēšanas parametri tiek norādīti ar opciju "-f". Mēs izmantojām šo opciju, kad vēlējāmies uztvert paketes no 8010. porta:
-f "udp port 8010"
Filtrēšanas parametri būtībā ir kritēriju kopums, kam paketei jāatbilst, lai to "noķertu". Nosacījums var pārbaudīt adresi, portu vai konkrēta baita vērtību paketē. Nosacījumus var apvienot, izmantojot loģiskos operatorus, piemēram, "UN", "VAI" utt. Ļoti spēcīgs rīks.

Ja vēlaties redzēt lauku izmaiņu dinamiku pakotnēs, jums būs jādublē izvade. TShark uz failu, kā parādīts iepriekšējā rakstā, izmantojot izvades cauruļvadus TShark pie ieejas teePēc tam atveriet žurnālfailu, izmantojot mazāk, spars vai citu rīku, kas spēj ātri strādāt ar lieliem teksta failiem un meklēt virknes, varat uzzināt visas pakešu lauku uzvedības nianses RTP plūsmā.

Ja jums ir jāklausās RTP straumes pārraidītais signāls, jums jāizmanto versija TShark ar vizuālu saskarni WiresharkAr vienkāršām peles kustībām var klausīties un apskatīt signāla osciloskopa trajektoriju. Bet tikai tad, ja tā ir kodēta u-law vai a-low formātā.

Nākamais raksts Mēs jums uzbūvēsim pilna dupleksa domofonu. Paņemiet līdzi pāris austiņas un vēl vienu cilvēku, ar ko runāt.

Avots: www.habr.com

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster