Da bi lažje razumeli, kako deluje internet, si oglejmo, kaj se dogaja pri tipični internetni operaciji - denimo takrat, ko brskalnik usmerimo na spletno stran dokumentacijskega projekta Linuxa. Angleški izvirnik spisa, ki ga berete, dobimo na naslovu:
http://www.linuxdoc.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html
Interno gre v resnici za datoteko
HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html
v imeniku s spletnimi stranmi na računalniku
www.linuxdoc.org
.
Da bi prebrali spletno stran, mora brskalnik vzpostaviti povezavo s
spletnim strežnikom, torej z gostiteljskim računalnikom, ki
hrani omenjeno stran. Prvi korak pri tem je, da ugotovi, kje se sploh
nahaja računalnik z internetnim imenom
www.linuxdoc.org
. Lokacija gostiteljskega računalnika je
podana z njegovim naslovom IP (kaj je IP, bomo razložili
pozneje).
Naslov IP ugotovi brskalnik tako, da najprej pokliče drug program, imenski strežnik. Ta lahko teče na našem računalniku, bolj verjetno pa je, da na kakem drugem računalniku v omrežju. Ko ste računalnik pripravljali za delo z vašim ponudnikom internetnih storitev, ste skoraj gotovo morali nekje vpisati tudi naslov imenskega strežnika, ki teče v omrežju vašega ponudnika internetnih storitev.
Imenski strežniki med seboj komunicirajo, ter izmenjujejo in ažurirajo
vse podatke, potrebne za pretvorbo internetnih imen v naslove
IP. Imenski strežnik, na katerega smo naslovili zahtevek za naslov
IP računalnika www.linuxdoc.org
, je morda moral zahtevek
posredovati naprej trem ali štirim drugim imenskim strežnike, vendar
pa se to zgodi zelo hitro, navadno prej kot v sekundi. V naslednjem
razdelku si bomo ogledali podrobnosti imenskih strežnikov.
Na koncu imenski strežnik vrne brskalniku podatek, da je številka IP
za računalnik www.linuxdoc.org
enaka
152.19.254.81
. Opremljeni s tem podatkom lahko naš računalnik
neposredno izmenjuje podatke z računalnikom www.linuxdoc.org
.
Celotno omrežje programov in zbirk podatkov, ki sodelujejo pri pretvarjanju internetnih imen računalnikov v naslove IP se imenuje sistem domenskih imen (angl. Domain Name System, DNS). Kratica DNS je precej pogosta - dostikrat se za imenske strežnike uporablja izraz ,,strežnik DNS``. Ogledali si bomo, kako sistem deluje.
Internetna imena računalnikov sestavljajo besede, ločene s
pikami. Domena je skupina računalnikov, ki si delijo skupno
pripono internetnega imena. Domene so lahko del širših
domen. Računalnik www.linuxdoc.org
je denimo del domene
.linuxdoc.org
, ta pa je del domene .org
.
Za vsako domeno je določen primarni imenski strežnik, ki pozna naslove IP za vse računalnike v dani domeni. Za primer okvare primarnega imenskega strežnika so lahko določeni rezervni ali sekundarni imenski strežniki, ki vskočijo, če je potrebno. Sekundarni strežniki avtomatično usklajujejo podatke v svojih tabelah s podatki na primarnem strežniku vsakih nekaj ur. Tako se spremembe v tabelah, ki jih izvedemo na primarnem strežniku, samodejno prenesejo naprej.
Zdaj pa k pomembnemu delu. Imenski strežnik za dano domeno ne
pozna naslovov računalnikov v drugih domenah, niti ne v lastnih
poddomenah. Kar mora poznati, so naslovi imenskih strežnikov za te
domene. V našem zgledu primarni imenski strežnik za domeno
.org
ne pozna naslova računalnika
www.linuxdoc.org
, niti nobenega drugega računalnika v domeni
.linuxdoc.org
, pozna pa naslov imenskega strežnika za domeno
.linuxdoc.org
, in tega lahko vpraša za naslov kateregakoli
računalnika v tej poddomeni.
Sistem domenskih imen je drevesno urejen. Povsem pri vrhu so korenski
strežniki. Vsakdo pozna naslove IP korenskih strežnikov - vgrajeni so
že v programje DNS. Korenski imenski strežniki poznajo naslove
imenskih strežnikov za vrhnje domene, kot denimo .com
,
.org
ali .si
, ne pa naslovov vseh računalnikov v teh
domenah. Imenski strežniki za vrhnje domene poznajo naslove imenskih
strežnikov za domene neposredno pod njimi, in tako naprej.
Sistem domenskih imen je bil zasnovan z zamislijo, da minimiziramo količino podatkov o obliki drevesa, ki ga mora poznati vsak računalnik v omrežju. Po drugi strani lahko spremembe v pod-drevesih izvedemo enostavno s spremembami v tabelah primarnega strežnika za to poddomeno.
Ko izdamo zahtevek za naslov računalnika z imenom
www.linuxdoc.org
, se zgodi naslednje. Lokalni imenski
strežnik, kateremu smo izdali zahtevek, povpraša korenski strežnik za
naslov strežnika za domeno .org
. Ko ga izve, tega povpraša za
naslov strežnika za domeno .linuxdoc.org
, in tega, ko ga
izve, povpraša za naslov računalnik www.linuxdoc.org
.
Večinoma pa tako dolga pot ni potrebna. Ko je enkrat izvedel naslov, imenski strežnik nekaj časa lokalno hrani tabelo preslikav med internetnimi imeni in naslovi IP, in ga ob naslednjih poizvedbah postreže kar iz lokalne tabele. Zato, ko obiščemo novo spletišče, navadno samo na začetku dobimo sporočilo ,,Looking up host``, pri naslednjih dostopih do strani na istem strežniku pa gre hitreje. Imenski strežnik zbranih tabel ne hrani za vse večne čase, ampak imajo podatki omejen rok trajanja. Ko ta preteče, mora ponovno opraviti celotno pot poizvedbe. To je pomembno, da imenski strežnik ne hrani napačnih podatkov za naslove, ki so se medtem morda spremenili. Naslov je takoj vržen iz tabele tudi v primeru, ko je računalnik na tem naslovu nedosegljiv.
Brskalnik bi rad na koncu spletnemu strežniku posredoval ukaz, s katerim bi prebral spletno stran:
GET /HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html HTTP/1.0
Zgodi se naslenje. Ukaz se zapre v paket - blok bitov, ki je
analogen telegramu, in ki vsebuje tri pomembne podatke: naslov
pošiljatelja (torej naslov IP našega računalnika), naslov
prejemnika (v danem zgledu 152.19.254.81
) in pa
številko storitve oziroma številko vrat. Slednja je
v našem zgledu enaka 80, ki je dogovorjena vrednost za vse spletne
poizvedbe.
Računalnik pošlje paket po omrežju (krajevnem omrežju ali telefonskem vodu do ponudnika internetnih storitev), dokler ne pride do specializiranega računalnika, ki mu pravimo usmerjevalnik. Usmerjevalnik hrani v pomnilniku zemljevid interneta - ne celotnega, ampak del, ki opisuje omrežno okolico - in pozna poti do usmerjevalnikov za druge omrežne okolice v internetu.
Paket bo verjetno na svoji poti do cilja potoval prek več usmerjevalnikov. Ti so premeteni - hranijo tudi podatke o tem, po kako dolgem času drugi usmerjevalniki potrdijo sprejem paketa, in pakete usmerjajo po tistih linijah, ki so hitrejše. Opazijo tudi, kadar kakšen usmerjevalnik ali kabel odpove, in v takih primerih poiščejo alternativne poti.
Urbano izročilo pravi, da je bil internet zasnovan tako, da bi preživel jedrsko vojno. To sicer ni res, vendar pa je zasnova interneta izjemno dobra v tem, da ob nezanesljivi strojni opremi in povezavah zagotavlja zanesljivo komunikacijsko pot. To je zato, ker so podatki, potrebni za delovanje omrežja, razpršeni po tisočih usmerjevalnikih, namesto da bi bili skoncentrirani le v nekaj ogromnih in ranljivih centralah (tako kot denimo telefonsko omrežje). Zato napake ostanejo lokalizirane, omrežje pa se prilagodi tako, da poišče obvoze.
Ko paket prispe do naslovnega računalnika, ta uporabi podatek o številki vrat, in posreduje paket spletnemu strežniku. Ta ve, komu poslati odgovor, saj je na paketu označen tudi naslov pošiljatelja. Ko spletni strežnik kot odgovor vrne zahtevani spis, se tudi ta razdeli na pakete. Velikost paketov je odvisna od prenosnega sredstva v omrežju in vrste storitve.
Da bi razumeli, kako delujejo prenosi več paketov, moramo vedeti, da internet dejansko uporablja za prenos dva protokola, enega vrh drugega.
Na spodnji ravni, IP (angl. Internet Protocol, internetni protokol), je rešeno, kako posamezni paket prenesti od pošiljateljevega naslova do naslovnikovega - zato so ti naslovi znani tudi kot naslovi IP. Vendar pa IP ni zanesljiv protokol - če se paket na poti slučajno izgubi, tega ne pošiljatelj, ne naslovnik morda nikoli ne bosta izvedela. V omrežni terminologiji pravimo takim protokolom brezpovezavni protokoli: pošiljatelj enostavno pošlje paket naslovniku in ne pričakuje potrditve prejema.
IP je hiter in cenen. Včasih je hitra in cenena, pa čeprav nezanesljiva komunikacija čisto v redu. Če po omrežju igramo igro Doom ali Quake, je vsaka krogla predstavljena s paketom IP. Če se sem ter tja kakšna izgubi, ni prevelike škode.
Zanesljivost zagotavlja, zgornja raven, TCP (angl. Transmission Control Protocol, protokol za nadzor prenosa). Ko se računalnika dogovorita za povezavo TCP (kar opravita s paketi IP), prejemnik ve, da mora v dogovorjenem času pošiljatelju poslati potrdilo o prejetem paketu. Če pošiljatelj potrdila ne prejme, ta paket pošlje še enkrat. Nadalje, pošiljatelj pakete TCP oštevilči, tako da jih lahko prejemnik sestavi v pravilnem vrstnem redu, čeprav so morda prispeli pomešani (kar se rado zgodi, kadar se omrežna povezava med prenosom prekine).
Paketi TCP/IP vsebujejo tudi nadzorno vsoto, s katero lahko prejemnik ugotovi, ali so paketi prispeli nepoškodovani. Nadzorna vsota se izračuna tako, da če je poškodovana bodisi sama nadzorna vsota, bodisi preostanek paketa, bo ponoven izračun le-te zelo verjetno izkazal napako. S stališča nekoga, ki uporablja imenske strežnike in TCP/IP, so internetne povezave videti kot zanesljiva oblika povezave med vrati na pošiljateljevem računalniku in vrati na naslovnikovem računalniku, in se mu ni treba ukvarjati z razdelitvijo sporočil na pakete in sestavljanjem le-teh, nadzornimi vsotami in ponovnim pošiljanjem okvarjenih paketov. Za vse to poskrbijo že ravni pod njim.
Vrnimo se k našemu zgledu. Brskalniki in spletni strežniki se
sporazumevajo v uporabniškem protokolu, ki teče nad
TCP/IP. Slednjega uporablja za enostavno pošiljanje podatkovnih nizov
tja in nazaj. Protokol se imenuje HTTP (angl. Hyper-Text Transfer
Protocol, protokol za prenos nadbesedila), in pri zgledu GET
malo prej smo že videli, kako je videti ukaz.
Ko ukaz GET prispe do vrat številka 80 računalnika
www.linuxdoc.org
, bo posredovan spletnemu strežniškemu
programu, ki streže vratom 80. Večina internetnih storitev je
izvedenih s strežniškimi programi, katerih vsak streže svoja vrata -
čaka na promet na danih vratih in izvaja prispele ukaze.
Če je pri zasnovi interneta kakšno splošno pravilo, je to, da so vsi deli čim bolj enostavni in čim bolj dostopni ljudem. HTTP, kot tudi sorodni protokoli, denimo SMTP (angl. Simple Mail Transfer Protocol, preprost protokol za prenos pošte), uporablja preproste besedilne ukaze, ki jih zaključi z znakom za novo vrstico.
To je sicer nekoliko neučinkovito - v nekaterih okoliščinah bi bila uporaba gosto kodiranega binarnega protokola hitrejša. Vendar pa so izkušnje pokazale, da prednosti ukazov, ki jih človek enostavno razume, odtehtajo malenkosten prihranek pri učinkovitosti, ki bi ga pridobili z binarnimi protokoli.
Zatorej je tudi odgovor, ki ga strežnik vrne po protokolu TCP/IP, besedilo. Začetek odgovora bo nekaj podobnega kot to (nekaj vrstic zaglavja je izpuščenih):
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
Glavi sledi prazna vrstica, tej pa besedilo spletne strani. Ko je
celotno besedilo poslano, se zveza prekine, brskalnik pa izriše
stran. Podatki v glavi mu pri tem pomagajo - vrstica
Content-Type
pove, da gre za nadbesedilni spis v obliki HTML.