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.
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.
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.
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.
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).