Numără un pachet G.729 printr-un tunel IPsec
Un exemplu G.729 rezolvat arată cum se adună încărcătura utilă, RTP, ESP și încadrarea Ethernet, și de ce același apel costă o lățime de bandă diferită la fiecare graniță.
Vocea prin IPsec este citată ca bitrate al codecului, iar această cifră este greșită la fiecare graniță în afară de granița codecului însuși. Audio-ul este 8 kbit/s, pachetul care îl transportă este mai mare, anvelopa ESP este și mai mare, iar cadrul Ethernet adaugă o încadrare pe care nicio captură de pe tunel nu o arată. Numărarea unui pachet pornind de la un format declarat este singura cale de a afla ce trebuie să transporte de fapt legătura fizică. Parcursul de mai jos face asta doar pentru o direcție, iar fiecare cifră de aici este aritmetică, nu măsurătoare.
Începe cu o alegere de pachetizare, nu cu o cifră a codecului
Un tabel de codec dă rata încărcăturii utile și nimic altceva: G.729 emite 8 kbit/s, adică 30 de octeți de audio la fiecare 30 ms. Nu spune nimic despre antete, protecție sau încadrare, iar aceste trei domină rezultatul. Intervalul este o alegere de politică asupra căreia ambele capete trebuie să cadă de acord, așa că alege-l primul și declară-l, pentru că fiecare cifră ulterioară depinde de acea singură decizie.
Acest exemplu folosește 30 ms, deci rata pachetelor este 33.3 pe secundă. Presupune un antet RTP de 12 octeți, un antet UDP de 8 octeți și un antet IPv4 interior de 20 de octeți fără opțiuni, și niciun SRTP, comprimare de antete sau umplutură de confidențialitate a fluxului de trafic; orice modificare mută bugetul cu ea, de aceea presupunerile stau lângă răspuns.
Adaugă antetele interioare, apoi anvelopa ESP
Aplicația trimite încărcătură utilă plus RTP plus UDP plus IP, ceea ce la această pachetizare înseamnă 70 de octeți. Acel flux interior ajunge la 18.7 kbit/s, deja mai mult decât dublul ratei codecului, pentru că antetele, nu audio-ul, formează cea mai mare parte a pachetului. Niciunul dintre acei octeți nu este voce; ei sunt prețul adresării și al numerotării. O captură făcută deasupra tunelului arată exact această cifră, și ea este cea citată când oamenii spun că apelul este mic.
Este și cifra care nu ajunge niciodată pe cablu. Modul tunel ESP adaugă un SPI și un număr de secvență de 8 octeți, un IV explicit de 8 octeți pentru AES-GCM, o coadă de 2 octeți și o etichetă de autentificare de 16 octeți. Încărcătura de 70 de octeți plus coada ajunge la 72, ceea ce satisface deja alinierea la patru octeți, deci aici nu e nevoie de umplutură suplimentară.RFC 4106 stabilește dimensiunile IV-ului și ale etichetei GCM, și ambele aparțin aritmeticii, nu unei note de subsol:
30 payload, G.729 at 30 ms
12 RTP
8 UDP
20 inner IPv4
--
70 inner IP packet
8 ESP SPI and sequence
8 explicit IV
2 pad length and next header
16 authentication tag
--
104 ESP packetAdaugă antetele exterioare cerute de traversarea NAT
În afara anvelopei ESP stau un antet IPv4 exterior de 20 de octeți și un antet UDP de 8 octeți pentru traversarea NAT, așa că pachetul devine 132 de octeți. Encapsularea UDP există pentru că pachetul trebuie să treacă de un dispozitiv de traducere între parteneri, și ea schimbă forma exterioară fără să atingă încărcătura protejată. La 33.3 pachete pe secundă, 132 de octeți înseamnă circa 35.2 kbit/s, adică aproximativ de patru ori rata nominală a codecului.
Nici eticheta, nici IV-ul nu pot fi scoase din estimare ca să o facă mai mică, pentru că ambele fac parte din ce va transporta de fapt legătura. O estimare care le omite descrie un pachet pe care receptorul l-ar respinge. Același lucru este valabil pentru coadă, care există pentru a marca granița încărcăturii și antetul următor din regiunea protejată.
Numește granița înainte de a cita cifra
O cifră de IP exterior exclude încă încadrarea Ethernet. O legătură de acces cu etichetă sau fără etichetă adaugă un antet MAC de 14 octeți și o secvență de verificare a cadrului de 4 octeți, făcând cadrul de 150 de octeți, care este dimensiunea pe care o numără un port de comutator. La aceeași rată a pachetelor asta înseamnă 40 kbit/s, de cinci ori rata codecului, iar diferența nu este risipă ci costul transportului.
| Boundary | Packet size | Rate at 33.3 packets/s | What it counts |
|---|---|---|---|
| Codec payload | 30 bytes | 8.0 kbit/s | The audio alone |
| Inner IP packet | 70 bytes | 18.7 kbit/s | Application headers included |
| Outer IP packet | 132 bytes | 35.2 kbit/s | ESP and NAT-T included |
| Ethernet frame | 150 bytes | 40.0 kbit/s | Link framing included |
Cifra de 40 kbit/s exclude încă preambulul, spațiul dintre cadre, etichetele VLAN, encapsularea furnizorului, RTCP, semnalizarea și audio-ul care călătorește în cealaltă direcție. Este o estimare pe direcție, nu o rezervare de legătură, iar citarea ei ca atare supraestimează ce trebuie să rezerve legătura într-un loc și subestimează în altul. O captură pe gazdă poate rata și încadrarea pe care o adaugă legătura, de aceea granița trebuie numită lângă cifră, și de aceea un tabel de granițe este mai util decât o singură cifră de titlu. Rezervă separat pentru direcția pe care nu ai numărat-o.
Verifică aritmetica față de interfață
Înainte de a te încrede în estimare, compară-o cu ce raportează interfața pentru un număr cunoscut de pachete. Capturează pe interfața fizică, nu pe dispozitivul tunelului, ca încadrarea pe care încerci să o contabilizezi să fie inclusă, și așteaptă-te la o mică diferență, nu la o potrivire perfectă.
sudo tcpdump -ni eth0 -c 50 'udp port 4500'
ip -s link show eth0Captura confirmă dimensiunea pachetului exterior, în timp ce contoarele interfeței arată rata inclusiv încadrarea. Dacă cele două diferă cu aproximativ toleranța Ethernet, aritmetica este corectă și doar granița a fost numită greșit. O diferență mult mai mare decât un antet de cadru indică altceva pe legătură, cum ar fi retransmisii sau un alt flux care împarte interfața. Scrie intervalul de pachetizare, suita de protecție și granița lângă cifră, pentru că o estimare fără aceste trei este citată ca măsurătoare de următoarea persoană care o citește.