Mihai Budiu -- mihaib+@cs.cmu.edu
http://www.cs.cmu.edu/~mihaib/
ianuarie 2001
Chiar dacă în urmă cu zece ani se ducea o luptă acerbă între mai multe standarde diferite pentru interconectarea calculatoarelor, în ziua de azi a fost stabilit un cîștigător indisputabil: standardul care definește funcționarea Internetului. Am scris de mai multe ori în PC Report încercînd să explic succesul protocoalelor de comunicație folosite în Internet (cele mai importante dintre acestea fiind TCP, Transmission Control Protocol și IP, Internet Protocol); în secțiunea ``Alte surse de informație'' puteți găsi legături on-line spre unele din aceste texte.
În textul de față vom vedea însă că unele din trăsăturile care fac aceste protocoale atît de eficiente sunt și grave slăbiciuni, care fac problematică desfășurarea unor servicii importante în rețea, cum ar fi transmisiunea de sunet și imagine în timp real (streaming). Vom discuta apoi pe scurt o clasă de soluții paradoxale propuse de cercetători pentru a remedia slăbiciunile, care constau toate în a... sta cu mîinile încrucișate chiar și cînd e multă treabă de făcut. Vom vedea deci că înțelepciunea populară care ne îndeamnă să ``nu lăsăm pe mîine ce putem face azi'' nu este întotdeauna potrivită.
Una din principalele calități ale Internetului este robustețea; așa cum este concepută, rețeaua poate funcționa chiar în prezența unor defecțiuni majore într-o mulțime din calculatoarele participante. Robustețea este o trăsătura definitorie a Internetului, care a fost proiectat pentru a servi drept rețeaua forțelor armate americane, trebuind să continue să funcționeze și în prezența unor atacuri nucleare.
Robustețea însă a avut niște consecințe foarte importante chiar în absența calamităților: orice sistem complex suferă de malfuncții și defecțiuni; legea numerelor mari afirmă ca accidentele sunt norma. Robustețea protocoalelor este esențială pentru funcționarea oricărei rețele mari; Internetul a devenit cea mai mare rețea pentru că era cea mai robustă, și a fost singura care a putut fi extinsă la scară mondială.
Robustețea Internetului provine din doi factori:
Acest din urmă factor este o sabie cu două tăișuri. Pe de o parte, dacă cele două puncte care doresc să comunice vor să aibă o discuție decentă, în pofida eventualelor lipsuri din rețea, printr-un efort de calcul se pot înțelege foarte bine. Pe de altă parte sănătatea întregii rețele depinde de o bună colaborare între punctele terminale; cum am arătat și în alte articole din PC Report, dacă un punct terminal nu respectă regulile de bună purtare, poate răni și pe ceilalți participanți la trafic.
Serviciul oferit de Internet este numit și ``cît de bine poți fără să te spetești'', sau, în terminologia englezească, ``best effort''. Un astfel de serviciu este satisfăcător pentru multe din aplicațiile folosite la ora actuală, cum ar fi transferul de fișiere, poșta electronică, sau ``plimbarea'' pe web. Nici una dintre aceste aplicații nu are cerințe foarte stringente de viteză și fiabilitate, și ca atare, faptul că din cînd în cînd un pachet se pierde sau vine mai tîrziu decît era așteptat, poate fi compensat TCP prin retransmisie, fără a irita prea mult utilizatorul.
Situația se schimbă însă dramatic atunci cînd vrem să transferăm date care sunt destinate consumului direct de către oameni: fie că transmitem sunete sau imagini, simțurile noastre vor fi foarte neplăcut deranjate chiar de mici imperfecțiuni în transmisie. De exemplu, urechea este sensibilă la pauze mai mari de 100 de milisecunde în conversație; ca atare, aplicațiile de telefonie digitală au cerințe stringente de performanță. Cerințele sunt dificil de satisfăcut pentru că însăși durata propagării semnalului electromagnetic între două puncte îndepărtate de pe glob este de ordinul zecilor de milisecunde (într-o milisecundă lumina în vid străbate numai 300 de kilometri). Protocoalele nu mai pot compensa pierderea pachetelor folosind retransmisia, pentru că un semnal livrat prea tîrziu face conversația foarte neplăcută.
Rețeaua poate fi proiectată pentru a oferi suficiente resurse (capacitate) pentru a face astfel de aplicații stringente posibile. Cea mai mare parte din cercetarea curentă în domeniul rețelelor de calculatoare este orientată în direcția proiectării și implementării de servicii care garantează o anumită calitate; numele tehnic este ``Quality of Service'', abreviat și QoS.
Cea mai importantă problemă din QoS este managementul resurselor: cînd ai la dispoziție o rețea folosită de 500 de milioane de utilizatori, orice resursă este potențial insuficientă. Pentru a putea garanta calitatea serviciilor resursele necesare trebuie să fie rezervate dinainte de către cei care o vor folosi.
Ideea de rezervare este însă complet opusă întregii filozofii a Internetului; Internetul este o rețea ``fără memorie'', care, de îndată ce primește un pachet, încearcă să scape de el trimițindu-l în direcția în care crede că se află destinația, și uitînd totul despre existența acelui pachet. Termenul tehnic pentru o astfel de arhitectură este ``stateless''. Ideea de rezervare implică însă reținerea de informații care caracterizează traficul: pentru cine este rezervarea, ce resurse sunt rezervate și pentru cît timp, cît din resursele rezervate sunt folosite, etc.
Noțiunea de rezervare nu este nouă; rețelele telefonice o folosesc ca un ingredient de bază. Pentru că o convorbire telefonică are cerințe foarte stringente de întîrziere și trafic (bandwidth), rețeaua telefonică funcționează complet diferit decît Internetul. Stabilirea unei convorbiri telefonice are trei etape:
Cantitatea de date transmisă prin vocea umană este însă foarte variabilă; o mare parte din timp tăcem la telefon (nu uitați că o sută de milisecunde reprezintă o durată importantă pentru rețea). Rețeaua telefonică însă folosește aceleași resurse, indiferent că vorbim sau că tăcem, pînă eliberați conexiunea.
Prin contrast, cînd folosim o aplicație pentru a trimite informație codificînd voce prin Internet, numai pachetele cu informație sunt trimise; liniștea nu consumă resurse ale rețelei. Din această cauza transmisiunea prin Internet este inerent mai ieftină: consumi numai resursele de care ai strictă nevoie. Rețeaua telefonică consumă mult mai multe resurse decît necesar, pentru că le rezervă pentru cazul cel mai defavorabil. Din cauza aceasta convorbirile telefonice sunt mult mai scumpe decît transmisiunea de date, și companiile care au apărut în ultima vreme, care oferă telefonie prin Internet (numită și ``voce peste IP'', ``voice over IP'', sau VoIP) pot oferi prețuri mult mai reduse.
Internetul face ceea ce se numește ``multiplexare statistică'', adică folosește resursele în comun pentru toată lumea (``a multiplexa'' înseamnă a pune o resursă în comun; ``statistic'' vine din faptul că atunci cînd multă lume folosește o resursă în mod intermitent, ea poate fi utilizată mult mai eficient). Rețeaua telefonică folosește rezervare.
Este important de realizat că noțiunea de rezervare este inseparabilă de cea de control al accesului (access control); dacă nu sunt destule resurse pentru rezervare, acțiunea de transmisiune va fi refuzată (ton de ocupat). Internetul, la ora actuală, nu refuză niciodată pachete, indiferent cît de ``ocupat'' este.
Trebuie să remarcăm că noțiunile de rezervare și multiplexare statistică nu sunt mutual exclusive, în sensul că pot fi amîndouă folosite în aceeași rețea simultan. Toate propunerile care încearcă să aducă QoS în Internet lasă loc și pentru vechea funcționare, best effort: resursele rezervate, sau cele care sunt rezervate, dar nu sunt folosite, pot fi folosite pentru trafic de ``prioritate scăzută''.
Cercetarea din domeniul QoS încearcă să construiască o infrastructură pentru rezervarea resurselor folosind arhitectura existentă a Internet-ului. În acest articol nu vom vorbi despre cum se face rezervarea, ci despre un alt aspect: presupunînd că poți rezerva resurse, cum trebuie să le exploatezi cît mai eficient? Altfel spus, cît de puține resurse sunt necesare pentru a oferi un serviciu garantat?
Internetul este o colecție de rețele mici conectate una de alta. Rețelele adiacente sunt conectate una de alta folosind calculatoare specializate numite rutere. Ruterele își cheltuiesc toată puterea de calcul pentru două scopuri:
Din punct de vedere al puterii de calcul, a două activitate a ruterelor este cea mai importantă, și cea care pune cele mai mari constrîngeri. Asta se întîmplă pentru că topologia Internetului nu variază prea des și prea mult, așa că informația mai veche despre topologie este în general corectă. În schimb, pachetele care vin au la dispoziție doar cîteva milisecunde pentru a fi procesate2.
Cum manipulează un ruter un pachet? Ce fel de resurse consumă? Figura 1 ilustrează schematic funcționarea unui ruter.
Resursele consumate sunt deci: timp de procesor, pentru analiza pachetului și deciderea rutei, lărgime de bandă (bandwidth) la intrare, la ieșire și în rețeaua internă de interconectare care leagă intrările de ieșiri, și memorie, pentru stocare în vederea prelucrării.
Ruterele comerciale la ora actuală folosesc algoritmi foarte simpli pentru procesarea pachetelor: ele sunt prelucrate în ordinea sosirii, puse în cozi la interfețele de ieșire în aceeași ordine (FIFO: first in, first out) și trimise de îndată ce transmisia pachetului anterior este terminată.
Să zicem că sunteți un ruter care primește o grămadă de pachete pe toate interfețele, și că aveți ceva memorie în care puteți gestiona pachetele care nu au fost încă transmise. Ce părere aveți: e mai bine (A) ca de îndată ce o interfață de ieșire e liberă să căutați un pachet care poate fi trimis pe acolo, sau (B) să vă relaxați un pic și să nu trimiteți nimic, chiar dacă ar fi pachete-candidat?
Dacă veți răspunde (A), veți proceda la fel ca toți cercetătorii din rețele pînă acum 10 ani. Ultima decadă însă a adus în atenție politici din categoria (B), demonstrînd că au unele calități superioare.
Algoritmul care decide cînd fiecare pachet trebuie transmis se numește algoritm de planificare (scheduling). Despre algoritmii din categoria (A) se spune că ``conservă lucrul'', pe cînd cei din categoria (B), nu. În engleză disciplinele de planificare de tip (A) se numesc ``work conserving'', iar cele din categoria (B) ``non-work conserving''.
Aparent o disciplină care nu conservă lucrul nu are nici un sens: irosește timp, în care ar putea face treabă utilă. De ce să întîrzii emiterea unui pachet gata? Răspunsul este subiectul central al acestui articol: pentru că în felul acesta poți face traficul mai predictibil, ducînd la o economie substanțială de resurse pentru ruterele traversate de trafic.
Pentru a înțelege în ce fel predictibilitatea traficului depinde de disciplina de planificare, să privim figura 2. Presupunînd că pachetele sunt prelucrate în ordinea venirii, o rafală de pachete pe una din conexiuni poate întîrzia pachetele pe cealaltă conexiune. În acest fel, trafic independent poate distorsiona regularitatea unui trafic care intră foarte regulat în rețea.
Doi parametri ne vor ajuta să înțelegem importanța regularității: rata medie și rata instantanee a traficului. Dacă sursa A trimite cîte un pachet pe secundă timp de zece secunde, rata medie și cea maximă de transmisiune sunt de 1 pachet pe secundă. Dacă sursa A trimite însă 10 pachete în prima secundă și apoi 9 secunde nimic, rata medie este tot de 1 pachet pe secundă, dar rafala de pachete din prima secundă face rata instantanee de 10 pachete pe secundă.
Chiar dacă traficul respectă în medie rezervarea, neuniformitatea poate duce la probleme:
Ruterele din rețea trebuie deci să prevină apariția neregularităților în trafic. Ruterele au suficiente resurse pentru a prelucra traficul atunci cînd acesta vine cu rata medie, declarată la stabilirea conexiunii, în procesul de rezervare (dacă nu ar avea destule resurse, ar fi respins rezervarea). Cheia este ca traficul să aibă o rată instantanee egală cu cea medie, și atunci resursele vor fi suficiente. În caz contrar, se vor crea cozi de pachete, care vor cauza și mai multe neregularități.
Soluția este oferită de algoritmii de planificare care nu conservă lucrul; acești algoritmi vor încerca să re-creeze la ieșire un trafic regulat. Chiar dacă pachetele nu vor sosi echidistant, din cauza interferențelor între diferitele conexiuni care străbat același ruter, ruterele vor întîrzia unele din pachete, pentru a recrea un trafic regulat la ieșire.
Partea frumoasă a acestei scheme este că, dacă toate ruterele colaborează, traficul rămîne predictibil și regulat în mare măsură, deci toate ruterele au nevoie de mai puține resurse, și pot satisface mult mai bine cerințele de calitate.
Cercetătorii au ridicat o seamă de obiecții la adresa protocoalelor care nu conservă lucrul. Unele dintre ele sunt nefondate, dar totuși interesante de analizat:
În acest articol am discutat pe scurt despre cercetarea curentă din rețele de calculatoare care încearcă să adauge Internetului servicii cu calitate garantată, necesare pentru transmisiuni de sunet sau imagini video. Am văzut că aceasta este o problemă foarte grea, din cauză că Internetul funcționează în mod minimalist, și reține foarte puține informații despre datele care-l tranzitează.
Am discutat apoi pe scurt despre efectul disciplinelor de planificare, folosite pentru a alege ordinea și momentul la care pachetele primite de un ruter sunt trimise mai departe spre destinație. Am văzut de asemenea că a termina treaba cît se poate de repede nu e întotdeauna optim, ci că lucrul regulat este mai sănătos pentru întreaga rețea.
Deocamdată aceste idei sunt testate doar în laboratoare; rămîne de văzut care va fi succesul lor în Internet.