Materijal u članku preuzet je sa mog .

Struktura RTP-paketa
V prejšnjem smo s pomočjo TShark izvedli zajem RTP-paketov, ki so jih izmenjavali naš sprejemnik in prenosnik. V tem koraku bomo obarvali elemente paketa v različne barve in govorili o njihovi funkciji.
Poglejmo isti paket, vendar s pobarvanimi polji in pojasnjevalnimi napisi:

V spodnjem delu seznama so pobarvani bajti, ki sestavljajo RTP-paket, ta pa je v resnici del podatkovnega paketa UDP (njegova glava je označena z črno črto). Barvne ozadja označujejo bajte RTP-glave, medtem ko je z zeleno barvo označen blok podatkov, ki vsebuje uporabne podatke RTP-paketa. Podatki so predstavljeni v šestnajstiškem formatu. V našem primeru gre za zvočni signal, stisnjen po u-zakonu (mü-zakonu), tj. ena ocena ima velikost 1 bajta. Ker smo uporabili privzeto hitrost vzorčenja (8000 Hz), bi moral vsak RTP-paket pri frekvenci paketov 50 Hz vsebovati 160 bajtov uporabnih podatkov. To bomo videli, ko preštejemo bajte v zeleni površini, njihovo število naj bi bilo 10 vrstic.
Po standardu bi morala biti količina podatkov v uporabnih podatkih večkratnik štiri, oziroma naj vsebuje celo število štiribitnih besed. Če se zgodi, da vaši uporabni podatki ne ustrezajo temu pravilu, je na koncu uporabnih podatkov potrebno dodati bajte z ničelnimi vrednostmi in nastaviti bit Padding (Dodatno). Ta bit je na prvem bajtu RTP-glave, pobarvan je v turkizni barvi. Upoštevajte, da vsi bajti uporabnih podatkov imajo vrednost 0xFF — tako izgleda tišina v formatu u-law.
Glava RTP-paketa je sestavljena iz 12 obveznih bajtov, vendar je v dveh primerih lahko daljša:
Ko paket prenaša zvočni signal, pridobljen s mešanjem signalov iz več virov (RTP-tokenov), se po prvih 12 bajtih glave nahaja tabela s seznamom identifikatorjev virov, katerih uporabne obremenitve so bile uporabljene za ustvarjanje uporabne obremenitve tega paketa. Pri tem so v spodnjih štirih bitih prvega bajta glave (polje Število identifikatorjev prispevajočih virov) se navede število virov. Velikost polja znaša 4 bita, zato lahko tabela vsebuje do 15 identifikatorjev virov, pri čemer vsak zasede 4 bajte. Ta tabela se uporablja za organizacijo konferenčnih klicev.
Ko ima naslov razširitev. V tem primeru se v prvem bajtu naslova nastavi bit X. V razširjenem naslovu, po tabeli udeležencev (če obstajajo), je na voljo razširjen naslov velikosti enega beseda, za njim pa so besede razširitev. Razširitev je niz bajtov, ki jih lahko uporabite za prenos dodatnih podatkov. Standard ne predpisuje formata teh podatkov — ta je lahko poljuben. Na primer, to lahko vključuje dodatne nastavitve za napravo, ki prejema RTP-pakete. Za nekatere aplikacije so bili razviti standardi razširjenega naslova. Tako je na primer za komunikacijska sredstva v standardu ED-137 (Standardi interoperabilnosti za komponente VoIP ATM).
Zdaj si podrobneje oglejmo polja naslova. Spodaj je prikazana kanonična slika z strukturo RTP-naslova, ki sem jo tudi sam obarval v iste barve.

VER — številka različice protokola (trenutna različica je 2);
P — zastavica, ki se nastavi v primerih, ko je RTP-paket dopolnjen s praznimi bajti na koncu;
X — zastavica, ki označuje, da je naslov razširjen;
CC — vsebuje število CSRC identifikatorjev, ki sledijo po stalnem naslovu (po besedah 1..3), na risbi tabela ni prikazana;
У — marker začetka okvira ali prisotnosti govora v kanalu (če se uporablja detektor premor v govoru). Če sprejemnik ne vsebuje detektorja premor v govoru, mora biti ta bit neprekinjeno nastavljen;
PTYPE — označuje format uporabnega bremena;
Sequence number — številka paketa, ki se uporablja za obnovitev zaporedja predvajanja paketov, saj se lahko zgodi, da paketi dosežejo sprejemnik ne v tistem zaporedju, v katerem so bili poslani. Začetna vrednost mora biti naključna, to se naredi, da se, če se uporablja šifriranje RTP-toka, oteži njegovo hackanje. To polje prav tako omogoča odkrivanje manjkajočih paketov;
Timestamp — časová značka. Čas sa meria v signálnych vzorkách, t. j. ak paket obsahuje 160 vzoriek, časová značka nasledujúceho paketu bude väčšia o 160. Počiatočná hodnota časovej značky by mala byť náhodná;
SSRC — identifikátor zdroja paketu, musí byť jedinečný. Najlepšie je ho generovať náhodne pred spustením RTP toku.
Ak vyvíjate svoj odosielateľ alebo prijímač RTP paketov, budete musieť nie raz prehodnotiť vaše pakety, aby ste zvýšili efektivitu, odporúčam vám osvojiť si používanie filtrovacieho nástroja v TShark, ktorý vám umožňuje zachytávať len tie pakety, ktoré Vás zaujímajú. V podmienkach, keď v sieti pracuje desiatky RTP zariadení, je to veľmi cenné. V príkazovom riadku TShark sa parametre filtrovania zadávajú voľbou "-f". Túto voľbu sme použili, keď sme chceli zachytiť pakety z portu 8010:
-f "udp port 8010"
Parametre filtrovania sú v podstate sada kritérií, ktorým musí vyhovovať "zachytávaný" paket. Podmienka môže kontrolovať adresu, port, hodnotu určitého bajtu v pakete. Podmienky môžu byť kombinované logickými operáciami "A", "ALEBO" a podobne. Veľmi silný nástroj.
Ak chcete sledovať dynamiku zmien polí v paktoch, budete musieť duplikovať výstup TShark do súboru, ako bolo uvedené v predchádzajúcom článku, pomocou prenosu výstupu TShark na vstup tee. Ďalej otvorením logového súboru pomocou less, vim alebo iného nástroja, ktorý dokáže rýchlo pracovať s obrovskými textovými súbormi a vykonávať vyhľadávanie v riadkoch, budete môcť zistiť všetky nuansy správania polí paketu v RTP toku.
Ak potrebujete počuť signál prenášaný RTP tokom, musíte využiť verziu TShark s grafickým rozhraním Wireshark. Pomocou jednoduchých manipulácií myšou tam môžete počuť, vidieť oscilogram signálu. Ale s jednou podmienkou — ak bude zakódovaný vo formáte u-law alebo a-law.
V nasledujúcej vytvoríme duplexný telefonický prístroj. Pripravte si pár slúchadiel a jedného partnera.
Izvor: habr.com
