Înainte Înapoi Cuprins

13. Cum merge Internetul?

Ca să vă ajutăm să înțelegeți cum lucrează Internetul, o să ne uităm la lucrurile care se întâmplă când faceți o operație tipica Internet -- îndreptați un browser la prima pagină a acestui document la casa sa de pe Wb la Documentarea Proiectului Linux. Acest document este

http://metalab.unc.edu/LDP/HOWTO/Fundamentals.html

care înseamnă că se află în fișierul LDP/HOWTO/Fundamentals.html sub directorul exportat World Wide Web al gazdei metalab.unc.edu.

13.1 Nume și locații

Primul lucru pe care browserul dvs. îl are de făcut este să stabilească o conexiune prin rețea la mașina unde se află documentul. Pentru a face asta, trebuie să găsească locația pe rețea a gazdei metalab.unc.edu (`gazdă' este scurtătură pentru `mașină gazdă' sau `gazdă de rețea'; metalab.unc.edu este un nume de gazdă tipic). Locația corespunzătoare este de fapt un număr numit adresă IP (o să explicăm partea `IP' a acestui termen mai târziu).

Pentru a face aceasta, browserul întreabă un program numit server de nume. Serverul de nume se poate afla pe mașina dvs., dar este mult mai probabil să ruleze pe o mașină de servicii cu care vorbește mașina dvs. Când vă înscrieți la un ISP ( Internet Service Provider - Ofertant de Servicii Internet ), o parte din procedura de instalare va implica aproape sigur spunerea softwareului dvs. de Internet a adresei IP a unui server de nume pe rețeaua ISPului.

Serverele de nume de pe mașini diferite vorbesc unul cu altul, schimbând și ținând la zi toate informațiile de care este nevoie pentru a rezolva numele de gazde (potrivirea lor la adrese IP). Serverul dvs. de nume poate întreba trei sau patru siteuri diferite prin rețea în procesul rezolvării gazdei metalab.unc.edu, dar aceasta se întâmplă de obicei foarte repede (în mai puțin de o secundă).

Serverul de nume o să-i spună browserului dvs. că adresa IP a Metalab-ului este 152.2.22.81; știind aceasta, mașina dvs. o să fie capabilă să schimbe biți direct cu metalab.

13.2 Pachete și routere

Ce vrea browserul să facă este să trimită o comandă la serverul de Web pe Metalab care arată astfel:

GET /LDP/HOWTO/Fundamentals.html HTTP/1.0

Iată cum se întâmplă. Comanda este făcută într-un pachet, un bloc de biți ca o telegramă care este trimisă cu trei lucruri importante; adresa sursei (adresa IP a mașinii dvs.), adresa destinației (152.2.22.81), și un număr de serviciu sau număr de port (80, în acest caz) care indică că este o cerere World Wide Web.

Mașina dvs. trimite apoi pachetul jos pe fir (conexiunea modem la ISPul dvs., sau rețeaua locală) până când ajunge la o mașină specializată numită router (route = rută). Routerul are o hartă a Internetului în memoria sa -- nu mereu una completă, dar una care descrie complet rețeua din vecinătate și știe cum să ajungă la routerele pentru alte rețele de pe Internet.

Pachetul dvs. poate trece prin câteva routere în calea sa către destinație. Routerele sunt deștepte. Ele urmăresc cât timp le ia la alte routere pentru a da de știre că au primit un pachet. Ele folosesc acea informație pentru a directa traficul prin legături rapide. O folosesc pentru a observa când alt router (sau cablu) a căzut din rețea și compensează dacă este posibil găsind altă rută.

Este o legendă urbană că Internetul a fost conceput pentru a supraviețui unui război nuclear. Aceasta nu este adevărat, dar designul Internetului este extrem de bun la obținerea performanțelor sigure din hardware cu defecte într-o lume nesigură. Aceasta este direct datorită faptului că inteligența sa este distribuită prin mii de routere decât prin câteva întrerupătoare masive (precum rețeaua telefonică). Aceasta înseamnă că nereușitele tind să fie bine localizate și rețeua poate ruta în jurul lor.

Odată ce pachetul dvs. ajunge la mașina desinație, acea mașină folosește numărul de serviciu pentru a introduce pachetul în serverul de web. Serverul de web își poate da seama unde să răspundă uitându-se la adresa IP a sursei pachetului de comandă. Când serverul web întoarce acest document, o să fie spart într-un număr de pachete. Mărimea pachetelor o să variaze în funcție de mediul de transmisiune din rețea și tipul transmisiunii.

13.3 TCP și IP

Ca să înțelegeți cum transmisiunile cu pachete multiple sunt realizate, trebuie să știți că de fapt Internetul folosește două protocoale, puse unul desupra celuilalt.

Nivelul de mai jos, IP (Internet Protocol), știe cum să obțină pachete individuale de la o adresă a sursei pentru o adresă a destinației (de aceasta sunt numite adrese IP). Oricum, IPul nu este sigur; dacă un pachet se pierde sau se renunță la el, mașinile sursă și destinație pot să nu afle niciodată despre el. În jargonul de rețea, IPul este un protocol fară conexiune; emițătorul lansează un pachet la receptor și nu așteaptă o confirmare.

IP este rapid și ieftin, totuși. Câteodată rapid, ieftin și nesigur este OK. Când jucați Doom sau Quake în rețea, fiecare glonț este reprezentat de un pachet IP. Dacă se pierd câteva, este OK.

Nivelul de sus, TCP (Transmission Control Protocol), vă dă siguranță. Când două mașini negociază o conexiune TCP (folosind IP), receptorul știe să trimită confirmări ale pachetelor pe care le vede înapoi la emițător. Dacă emițătorul nu vede o confirmare pentru un pachet într-o perioadă de timp, re-trimite acel pachet. Mai mult, emițătorul dă fiecărui pachet TCP un număr de secvențe, pe care receptorul poate să-l folosească pentru a reasambla pachete în caz că nu apar în ordine. (Aceasta se poate întâmpla dacă legăturile de rețea cad și revin în timpul unei conexiuni.)

Pachetele TCP/IP conțin deasemena o sumă de verificare pentru a activa detecția de date stricate de legături proaste. Astfel, din punctul de vedere al oricui folosind TCP/IP și servere de nume, arată ca o cale sigură de a trimite șiruri de octeți între perechile nume gazdă/număr serviciu. Oamenii care scriu protocoale de rețea nu trebuie să se gândească aproape niciodată despre împachetare, reasamblarea pachetelor, verificarea erorilor, sume de verificare, și retransmisia care se întâmplă mai jos de acel nivel.

13.4 HTTP, un protocol de aplicație

Să mergem înapoi la exemplul nostru. Browserele web și serverele vorbesc un protocol de aplicație care rulează pe vârful lui TCP/IP, folosindu-l simplu ca o cale de a trimite șiruri de octeți înainte și înapoi. Acest protocol este numit HTTP (Hyper-Text Transfer Protocol) și am văzut deja o comandă în el -- GET (ia) de mai sus.

Când comanda GET merge la serverul de web al lui metalab.unc.edu cu numărul de serviciu 80, o să fie dat unui daemon server care ascultă pe portul 80. Cele mai multe servicii Internet sunt implementate de daemoni server care nu fac nimic decât să asculte pe porturi, uitându-se după și executând comenzile care vin.

Dacă designul Internetului are o regulă generală, aceea este că toate părțile ar trebui să fie pe cât de simplu și accesibil oamenilor posibil. HTTP, și rudele sale (precum Protocolul Simplu de Tranfer de Poștă, SMTP, care este folosit pentru a muta poștă electronică între gazde) tind să folosească comenzi simple, texte listabile care se termină cu carriage-return/line feed (ENTER).

Aceasta este marginal neeficient; în unele circumstanțe ați putea avea mai multă viteză folosind un protocol codat binar. Dar experiența a arătat că beneficiile de a avea comenzi ușor de descris și înțeles pentru ființele umane cântăresc mai greu decât orice câștig marginal în eficiență pe care l-ați putea obține cu costul facerii lucrurilor păcălitoare și opace.

De aceea, ce daemonul server trimite înapoi la dvs. prin TCP/IP este tot text. Începutul răspunsului o să arate ceva de genul acesta (câteva headere au fost tăiate):

HTTP/1.1 200 OK
Date: Sat, 10 Oct 1998 18:43:35 GMT
Server: Apache/1.2.6 Red Hat
Last-Modified: Thu, 27 Aug 1998 17:55:15 GMT
Content-Length: 2982
Content-Type: text/html

Aceste headere (capete) or să fie urmate de o linie goală și textul paginii web (după care conexiunea este închisă). Browserul dvs. doar afișează acea pagină. Headerele îi spun cum (în particular, headerul Content-Type (Tip-Conținut) îi spune că datele întoarse sunt chiar HTML).


Înainte Înapoi Cuprins