Da bi laže 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 sploh je 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 v našem računalniku, bolj verjetno pa je, da v kakem drugem računalniku v omrežju. Ko ste računalnik pripravljali za delo z vašim ponudnikom internetnih storitev, ste skoraj gotovo morali nekam 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 posodabljajo
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
. Naš računalnik lahko, opremljen s tem podatkom,
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. Če se pokvari primarni imenski strežnik, so lahko določeni rezervni ali sekundarni imenski strežniki, ki vskočijo, če je treba. Sekundarni strežniki avtomatično usklajujejo podatke v svojih tabelah s podatki v primarnem strežniku vsakih nekaj ur. Tako se spremembe v tabelah, ki jih izvedemo v 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. To, 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 po naslovu 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. Na drugi strani lahko spremembe v poddrevesih 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 po
naslovu strežnika za domeno .org
. Ko ga izve, tega povpraša po
naslovu strežnika za domeno .linuxdoc.org
, in tega, ko ga
izve, po naslovu računalnika www.linuxdoc.org
.
Večinoma pa tako dolga pot ni potrebna. Ko je imenski strežnik enkrat izvedel naslov, nekaj časa lokalno hrani tabelo preslikav med internetnimi imeni in naslovi IP, in naslov 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 v 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 strežnik spet opraviti celotno pot poizvedbe. To je pomembno, da imenski strežnik ne hrani napačnih podatkov za naslove, ki so se medtem morda že spremenili. Naslov je takoj izvržen iz tabele tudi takrat, 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 naslednje. Ukaz se zapre v paket - blok bitov, ki je
analogen telegramu in obsega 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, kar 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 doseže specializiranega računalnika, ki mu pravimo usmerjevalnik. Usmerjevalnik hrani v pomnilniku zemljevid interneta -- ne vsega, 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 takrat 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 ima zares dobro zasnovo, saj ob nezanesljivi strojni opremi in povezavah zagotavlja zanesljivo komunikacijsko pot. Za to so zaslužni podatki, potrebni za delovanje omrežja, razpršeni po tisočih usmerjevalnikih, namesto da bi bili zbrani le v nekaj velikanskih 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.
Najnižja raven, IP (angl. Internet Protocol, internetni
protokol), je odgovorna za označevanje paketov z naslovom računalnika
pošiljatelja in računalnika naslovnika. Če, denimo, z vašega
računalnika, ki ima naslov 192.168.1.101, uporabljate spletno mesto
http://www.linuxdoc.org/
, ki ima naslov 152.2.210.81, bodo
paketi označeni s tema dvema naslovoma. Naslavljanje paketov z naslovi
IP je zelo podobno naslavljanju pisemskih pošiljk s poštnim naslovom
-- poštna služba prebere naslov in določi, po kateri poti bo dostavila
pošiljko do vas. Podobno počnejo usmerjevalniki z internetnim prometom.
Zgornja raven, TCP (angl. Transmission Control Protocol, protokol za nadzor prenosa), zagotavlja zanesljivost 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 (to se rado zgodi, kadar se omrežna povezava med prenosom prekine).
Paketi TCP/IP obsegajo tudi nadzorno vsoto, s katero lahko prejemnik ugotovi, ali so paketi prispeli nepoškodovani. Nadzorna vsota se izračuna tako, da bo takrat, ko je poškodovana bodisi sama nadzorna vsota bodisi preostanek paketa, vnovični 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 v pošiljateljevem računalniku in vrati v naslovnikovem računalniku, in se mu ni treba ukvarjati z razdelitvijo sporočil na pakete in sestavljanjem le-teh, nadzornimi vsotami in vnovičnim 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, od katerih vsak streže svoja vrata --
čaka na promet na danih vratih in izvaja prispele ukaze.
Če pri zasnovi interneta velja kakšno splošno pravilo, je to, da so vsi deli čim bolj enostavni in čim bolj dostopni ljudem. HTTP, pa tudi sorodni protokoli, denimo SMTP (angl. Simple Mail Transfer Protocol, preprost protokol za prenos pošte), uporabljajo preproste besedilne ukaze, ki jih končajo 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.