Uurime VoIP-mootorit Mediastreamer2. Osa 8

Artikli sisu on pärit minu zen-kanalist.

Uurime VoIP-mootorit Mediastreamer2. Osa 8

RTP-paketi struktuur

Eelmises osas artiklis kasutasime TShark RTP-pakettide püüdmiseks, mida vahetasid meie vastuvõtja ja saatja. Sellega värvime paketi elemente erinevates värvustes ja räägime nende eesmärgist.

Vaatame sama paketti, kuid nüüd on väljad värvilised ja selgitavad sildid:
Uurime VoIP-mootorit Mediastreamer2. Osa 8

Loendi allosas on värvitud bait, mis koosneb RTP-paketist, mis omakorda on UDP-paketi kasulik koormus (selle pealkiri on musta joonega ümber tõmmatud). Värvilised taustad tähistavad RTP-pealkirja baite ja rohelisega on välja toodud andmeplokk, mis sisaldab RTP-paketi kasulikku koormust. Andmed on esitatud kuutekohalises formaadis. Meie juhul on see helisignaal, mis on kokku surutud u-seaduse (mü-seaduse) alusel, st ühes proovitusel on suurus 1 bait. Kuna kasutasime vaikimisi seadistatud proovisagedust (8000 Hz), peaks iga RTP-pakett sisaldama 160 bait'i kasulikku koormust sagedusel 50 Hz. Selle märgimegi rohelises alal olevate baitide arvu kokku lugedes, neid peaks olema 10 rida.

Standardi kohaselt peab andmekoormuse suurus olema neljakordne, st sisaldama täisarvu nelja baitisest sõna. Kui juhtub, et teie andmekoormus ei vasta sellele reeglile, tuleb andmekoormuse lõppu lisada nullväärtusega baidid ning seada Padding (Täienduse) bit. See bit asub RTP-pealkirja esimeses baidis, see on värvitud türkiissinisega. Pange tähele, et kõik andmekoormuse baidid on väärtusega 0xFF — nii näeb tühjus välja u-law formaadis.

RTP-paketi pealkiri koosneb 12 kohustuslikust baitist, kuid kahel juhul võib see olla pikem:

  • Kui pakett edastab heli, mis saadakse mitme allika (RTP-voogude) signaalide segamisel, siis pärast esimesi 12 baidi pealkirja asub allikate identifikaatorite tabel, millel põhinevate andmekoormuste loetelu on kasutatud selle paketi andmekoormuse loomisel. Samuti, esimeses baidis asuva pealkirja madalamates neljas bitis (välja Kaasaaitavate allikate identifikaatorite arv) näitab allikate arvu. Väli suurus on 4 bitti, seega võib tabel sisaldada kuni 15 allika identifikaatorit. Igaüks neist võtab 4 baiti. Seda tabelit kasutatakse konverentsikõne korraldamisel.

  • Kui pealkirjal on laiendus. Sel juhul seadistatakse esimeses bitti pealkirjas bit X. Laiendatud pealkirjas, pärast osalejate tabelit (kui need on olemas), asub ühe sõna suurune laienduse pealkiri, millele järgneb laiendussõna. Laiendus on byte'ide kogum, mida võite kasutada täiendavate andmete edastamiseks. Standard ei reguleeri nende andmete formaati — see võib olla igaüht. Näiteks võivad need olla täiendavad seadistused seadme jaoks, mis vastab RTP-pakettidele. Mõnede rakenduste jaoks on siiski välja töötatud laiendatud pealkirja standardid. Näiteks on see tehtud sidetehnika jaoks standardis ED-137 (VoIP ATM komponentide vastastikuse töötluse standardid).

Nüüd vaatame pealkirja välju lähemalt. Allpool on esitatud RTP-pealkirja kanoniline joonis, mille ma samuti samadesse värvidesse värvisin.

Uurime VoIP-mootorit Mediastreamer2. Osa 8
VER — protokolli versiooni number (praegune versioon on 2);

P — lipp, mis seadistatakse juhtudel, kui RTP-pakett täiendatakse lõpus tühjade baitidega;

X — lipp, mis näitab, et pealkiri on laiendatud;

CC — sisaldab CSRC-identifikaatorite arvu, mis järgneb kindlale pealkirjale (sõnade 1..3 järel), joonisel nimekiri ei ole näidatud;

M — kaadri alguse või kõne esinemise marker kanalis (kui kasutatakse kõnepausi detektorit). Kui vastuvõtjal ei ole kõnepausi detektorit, peab see bit olema pidevalt seadistatud;

PTYPE — näitab koormuse formaati;

Sequence number — paketi number, mida kasutatakse pakettide taasesituse järjekorra taastamiseks, kuna on reaalne olukord, kus paketid võivad vastuvõtjale jõuda mitte selles järjekorras, milles need saadeti. Algväärtus peab olema juhuslik, et kui RTP-voo krüpteerimine toimub, oleks selle murdmine raskendatud. Samuti võimaldab see väli avastada pakettide kadumist;

Aeg — ajatemponäit. Aeg mõõdetakse signaalinäidete järgi, st kui pakett sisaldab 160 näidet, siis järgmise paketi ajatemponäit on 160 võrra suurem. Ajamtemponäidiku algväärtus peaks olema juhuslik;

SSRC — paketi allika identifikaator, see peab olema ainulaadne. Seda on parem genereerida juhuslikult enne RTP-voo käivitamist.

Kui hakkate arendama oma RTP-paketisaatjat või -vastuvõtjat, peate mitte ühe korra vaatama oma pakette, et suurendada tootlikkust. Soovitan teil omandada paketifiltrite kasutamise oskused TSharkis, see võimaldab jäädvustada ainult neid pakette, mis on teile huvipakkuvad. Tingimustes, kus võrgus töötavad kümned RTP-seadmed, on see väga väärtuslik. TSharki käsureal määratakse filtreerimise parameetrid valiku "-f" abil. Kasutasime seda valikut, kui soovisime jäädvustada pakette pordilt 8010:
-f "udp port 8010"
Filtreerimise parameetrid on oma olemuselt kriteeriumide kogum, millele peab vastama "püütud" paket. Tingimus võib kontrollida aadressi, porti, teatud byte'i väärtust pakendis. Tingimusi saab omavahel liita loogiliste operatsioonidega "JA", "Või" jne. Väga võimas tööriist.

Kui soovite näha pakettide väljade muutumise dünaamikat, peate väljundi kopeerima TShark faili, nagu eelmisest artiklist oli näidatud, kasutades väljundi edasiülekannet TShark sisendisse tee. Seejärel avades logifaili kasutades less, vim või mõnda muud tööriista, mis suudab kiiresti töötada suurte tekstifailidega ja teha ridade otsingut, saate välja selgitada kõik paketiväljade käitumise nüansid RTP-voos.

Kui peate kuulama RTP-vooga edastatavat signaali, peate kasutama versiooni TShark c graafilise liidesega Wireshark. Lihtsate hiiremanipulatsioonide abil on seal võimalik kuulata, näha signaali osillogrammi. Kuid ühe tingimuse juures — kui see on kodeeritud u-law või a-law formaadis.

Järgmisel artiklis teeme koos koosoleku duplex-seadmestiku. Varustage end paariga kõrvaklappe ja ühe vestluspartneriga.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster