teejuht
1. Sissejuhatus
2. Routing
Järgneva eesmärk on selgitada kuidas suudavad IP datagrammid
leida ühest hostist teise tee kui nende vahel on palju teisi hoste,
nn. Internet. Seda õige tee leidmist nimetatakse routinguks. Jutt
eeldab, et arvutid on omavahel ühendatud, kernelid on peal, aga nimesüsteem
puudub. Ma küll kasutasin joonisel nimesid aga ainult ilmestamiseks.
Seda kuidas antud olukorraga seostada ka nimed vaatab mõnel teisel
lehel.
Lehel Arvutid Võrgus on kirjutatud suhteliselt
detailselt sellest kuidas info liigub Interneti masinate ehk hostide vahel.
Internetis realiseeritakse ühendused hostide vahel kas tavaliste metalljuhtmete või valguskaablite või hoopis raadiosidega - see ei ole põhimõtteliselt tähtis. Topoloogiliselt (st. terviku struktuuri silmas pidades) taandub asi nn. bus'ile (koaksiaalkaabli - moodi) või tähtühendusele (HUB'idega). Või nende mõlema kombinatsioonile.
Kui datagramm lähtub algustpunkti hostist ja peab jõubma lõpppunkti hosti, siis on küsimus millist teed mööda sinna jõuda. Tavaliselt on neid teid mitu. Selle õige tee leidmist nimetatakse route'inguks (route pr. k. 'tee').
Teatavasti on igal Interneti arvuti võrgukaardil unikaalne IP aadress. Datagrammil on piltlikult üteldes silt otsa ees kuhu ta peab välja jõudma ning router'ite (tegelikult võivad need olla tavalised arvutid, millel töötab peal vastav programm ehk server) roll on nad käest kätte edasi anda kuni datagramm satub tollesse subdomaini milles sihtpunktiks olev host asub ja lõpuks vulpsab sihtpunkt-hosti võrgukaardi kaudu hosti sisse. Seal loodetavasti tegeleb temaga kernel edasi. Router'itega sarnast funtsiooni omavad gateway's (väravad) ja bridge'id (mastid, sillad). Brigde'd on huvitavad selle poolest, etnad on liilkusele läbipaistvad, neil polegi IP aadresse.
Et saada datagrammid kahe arvuti vahel liikuma kusjuures jul kui nad
peavad läbima teel mitmeid hoste (st. gateway'sid) tuleb peale võrgukaardide
sisseühendamist kasutada programme ifconfig ja route:
neis kahes ja kõikides teistes arvutites tuleb pika seada
iga võrgukaardi
- IP number
- network'i number
- netmask
- gateway'd
Kuidas neid programme kasutada on kirjeldatud Kahe arvuti Ehternet'i võrgu lehel. Allpool on kah paar näidet.
Allpool on toodud üks julge pilt, keegi tegelikult nii Internertti ei ehita. Praktiliselt pole hea teha teab kui suuri (hostide arvu ja kaablite pikuse mõttes) alamvõrke ehk subdomaine; datagrammid peavad siis füüsilise ringiliikumise jaoks üksteise taga ootama. Aga hea küll :) . Selle joonise mõte on kirjeldada mida tähendab endast routing ja jälgida kuidas datagrammid liiguvad hostide vahel läbides oma teel teisi hoste.
Ma märgiks veel niipalju, et jätkuv jutt on nö. selle
taseme jutt kus arvutite vahele on kaablid veetud ja kaardid sisse pandud
ja kernelid kompilleeritud. Aga veel ei ole nimesid omistatud (a la eenet.ee).
St. kui on tehtud nii palju kui siin lehel on kirjas siis peaks saama teha
telnetti ja pingi ja ftp jne. eeldusel pöördumistel kasutatakse
IP aadresse.
Routing
Kõigepealt, ma plaanisin joonisele üldse mitte märkida tähti ega rääkida domainidest selles mõttes, et tartu.ee on ee. alam-domain ehk subdomain. Niisiis, kõigepealt ärge üldse mõtelge sellele mis riigi alla mõni ahel arvuteid kuulub vaid ainult sellele kuidas saab võimalikuks IP datagrammi liikumine ühest arvutist teise - routing.
Niisiis, sättides igal joonisel toodud arvutil paika järgmised asjad:
- hosti (täpsemine võrguinterface'i) IP number ehk aadress
- networki IP number
- võrguinterface'i ja routingu tabeli kirjete netmask'id
- hosti kerneli routingu tabelis näidatud gateway'd
peaks saama määratleda kuidas IPdatagrammid hakkavad liikuma
alguspunkti ja sihtjaama vahel.
Käsk ifconfig seob kerneli network device'ga (nt. eth0) IP numbri ehk IP aadressi. Igal nö. päris Internetti kuuluval arvutil on unikaalne IP number.
Käsk route võimaldab luua kerneli routingu tabeli
Nende käskude kasutamist on valgustatud kahe arvuti etherneti lehküljel.
Püüame kirjeldada detailselt datagrammide liikumist hostilt
ut.tartu.ee.
hosti estreet.au. vaadates mis milliseid gatewaysid ta
läbib.
Olgu tegu nö. fikseeritud routinguga, st. kõik on konfigureerimise
ajal kindlaks määratud.
1. IP datagramm lähtub hosti ut.tartu.ee võrgukaardilt eth0 199.15.111.14 ja kerneli routingu tabel on selline:
ut.tartu.ee# route -n
Kernel IP routing table
Destination
Gateway Genmask
Flags Metric Ref Use Iface
127.0.0.1
*
255.0.0.0 U
0 0
1 lo
199.15.111.10
*
255.255.255.255 UH 0
0 1 eth0 (ut.tartu.ee.)
199.15.111.0
*
255.255.255.0 U 0
0 0 eth0 (otse
tartusse)
default
199.15.111.10 0.0.0.0
UG 0 0
1 eth0 (igale poole mujale)
ut.tartu.ee#
Kommentaar, tulpade kaupa:
- sihtpunktid: võrgud või hostid; kui datagramm kuhugi
ei kõlba siis läheb defaulti gateway peale
- kuidas sinna saab: kas võrgukaart on nendega sama juhtme peal
(*) või saab sinna läbi gateway (199.15.111.10)
- mask mille abil leitakse datagrammi networki number ja võrreldakse
esimese tulbaga: kas kõlbab või mitte
- U: interface on up st. töötab; H sihtpunkt on host; G sihtpunkti
saab läbi gateway
- metric võiks olla mõnel juhul nt. 1: näitab prioriteeti
- ref: puuduvad andmed
- use: puuduvad andmed
- interface: kernelis oleva seadme nimi mis on vastavuses füüsilise
võrgukaardiga, tavaliselt
- kommentaar
Siin kasutab kernel eth0'i netsmaski ja leiab, et IP datagrammi network'i
number 200.15.80.0 ei lange kokku kohaliku networki numbriga 199.15.111.0
ja saadab NW 199.15.111.0'ist datagrammi otse GW1 peale.
2. Tartu-Eesti piir: IP datagramm liigub NW: 193.40.75.0's siseneb seadmest eth0 hosti GW1 ja tolle kernel vaatab oma routingu tabelist mis temaga teha:
gw1.tartu.ee# route -n
Kernel IP routing table
Destination
Gateway Genmask
Flags Metric Ref Use Iface
127.0.0.1
*
255.0.0.0 U
0 0
1 lo
199.15.111.10
*
255.255.255.255 UH 0
0 1 eth1 (gw.tartu.ee.)
193.40.75.18
*
255.255.255.255 UH 0
0 0 eth1 (gw-tartu.ee.)
199.15.111.0
*
255.255.255.0 U 0
0 0 eth0 (otse
tartusse)
193.40.75.0
*
255.255.255.0 U 0
0 0 eth1 (otse
eestisse)
182.15.0.0
193.40.75.150 255.255.0.0
UG 0 0
1 eth1 (soome)
194.65.48.0
193.40.75.10 255.255.255.0
UG 0 0
1 eth1 (prantsusmaale)
200.15.80.0
193.40.75.10 255.255.255.0
UG 0 0
1 eth1 (austraaliasse)
12.0.0.0
193.40.75.10 255.0.0.0
UG 0 0
1 eth1 (ameerikasse)
gw1.tartu.ee#
Siin on kernelil tegelikult raske otsus: kumma gateway kaudu datagramm
edasi saata. Aga kuna asi on staatiline pole midagi mõtelda:
saata Prantsusmaa kaudu.
Selle näite puhul vaatame kuidas saab sellise kerneli routingu tabeli luua:
#!/bin/sh
#Tart-Eesti piiril oleva gateway
gw.tartu.ee kerneli routingu tabel
ifconfig eth0 down
ifconfig eth1 down
ifconfig lo down
#nn. loopback seade
ifconfig lo 127.0.0.1 netmask
255.0.0.0 broadcast 127.255.255.255 up
route add -net 127.0.0.0 netmask
255.0.0.0 dev lo
#seade eth0
ifconfig eth0 199.15.111.10
netmask 255.255.255.0 broadcast 199.15.111.255 up
route add -net 199.15.111.0
netmask 255.255.255.0 dev eth0
#seade eth1
ifconfig eth1 193.40.75.18
netmask 255.255.255.0 broadcast 193.40.75.255 up
route add -net 193.40.75.0
netmask 255.255.255.0 dev eth0
#route'id gatewaydesse
#prantsusmaa suunas
route add -host 193.40.75.10
netmask 255.255.255.255 dev eth1
#soome suunas
route add -host 193.40.75.150
netmask 255.255.255.255 dev eth1
#gateway prantsusmaale
route add -net 194.65.48.0
gw 193.40.75.10 netmask 255.255.255.0 dev eth1
#gateway soome
route add -net 182.15.0.0 gw
193.40.75.150 netmask 255.255.0.0 dev eth1
#gateway ameerikasse
route add -net 12.0.0.0 gw
193.40.75.10 netmask 255.0.0.0 dev eth1
#gateway austraaliasse
route add -net 200.15.80.0
gw 193.40.75.10 netmask 255.255.255.0 dev eth1
#route add default gw 193.40.75.10
Antud gateway puhul oleks ilmselt selle asemel, et ära näidata iga riigi gateway mis kõigi jaoks peale soome on sama mõistlikum kasutada default gateway'd (viimane rida sisse kommenteerida). Aga joonise teiste gateway'de puhul defaulti kasutada minu meelest ei ole suurt mõtet.
3. Eesti-Prantsuse piir: IP datagramm siseneb seadmest eth0 hosti GW2 ja kernel vaatab oma routingu tabelist mis temaga teha:
gw2.ee# route -n
Kernel IP routing table
Destination
Gateway Genmask
Flags Metric Ref Use Iface
127.0.0.1
*
255.0.0.0 U
0 0
1 lo
194.65.48.10
*
255.255.255.255 UH 0
0 1 eth1 (gw-edu.fr.)
193.40.75.18
*
255.255.255.255 UH 0
0 1 eth0 (gw-tartu.ee.)
193.40.75.150
*
255.255.255.255 UH 0
0 1 eth0 (gw-fi.ee.)
194.65.48.0
*
255.255.255.0 U 0
0 0 eth1 (otse
prantsusmaale)
193.40.75.0
*
255.255.255.0 U 0
0 0 eth0 (otse
eestisse)
199.15.111.0
193.40.75.18 255.255.255.0
UG 0 0
0 eth0 (tartusse)
182.15.0.0
193.40.75.150 255.255.0.0
UG 0 0
1 eth0 (soome)
200.15.80.0
194.65.48.10 255.255.255.0
UG 0 0
0 eth1 (austraaliasse)
12.0.0.0
194.65.48.10 255.0.0.0
UG 0 0
1 eth1 (ameerikasse)
gw2.ee#
Siin on asi selge, maskide abil teeb kernel kindlaks kas datagramm kuulub kohalikku võrku või tuleb saata gateway'sse. Ilmselt saata läbi eth1 seadme hosti GW3.
4. Prantsuse-Ameerika piir: IP datagramm siseneb seadmest eth0 hosti GW3 ja kernel vaatab oma routingu tabelist mis taga teha:
gw3.fr# route -n
Kernel IP routing table
Destination
Gateway Genmask
Flags Metric Ref Use Iface
127.0.0.1
*
255.0.0.0 U
0 0
1 lo
12.125.15.10
*
255.255.255.255 U 0
0 0 eth1 (gw-fi.edu.)
12.15.15.10
*
255.255.255.255 U 0
0 0 eth1 (gw-au.edu.)
194.65.48.200
*
255.255.255.255 U 0
0 0 eth0 (gw-ee.fr.)
12.0.0.0
*
255.0.0.0 UH
0 0
1 eth1 (otse ameerikasse)
194.65.48.0
*
255.255.255.0 U 0
0 0 eth0 (otse
prantsusmaale)
193.40.75.0
194.65.48.200 255.255.255.0 UG
0 0
0 eth0 (eestisse)
182.15.0.0
12.15.15.10 255.255.0.0
UG 0 0
0 eth1 (soome)
200.15.80.0
12.125.15.10 255.255.255.0
UG 0 0
0 eth0 (austraaliasse)
199.15.111.0
194.65.48.200 255.255.255.0 UG
0 0
0 eth0 (tartusse)
gw3.fr#
Siin ilmselt otsustab kernel, et datagramm tuleb saata GW4.
5. Ameerika - Austraalia piir: IP datagramm siseneb seadmest eth0 hosti GW4 ja kernel vaatab oma routingu tabelist mis taga teha:
gw4.au# route -n
Kernel IP routing table
Destination
Gateway Genmask
Flags Metric Ref Use Iface
127.0.0.1
*
255.0.0.0 U
0 0
1 lo
12.5.115.250
*
255.255.255.255 UH 0
0 0 eth0 (gw-fr.edu.)
12.15.15.10
*
255.255.255.255 UH 0
0 0 eth0 (gw-fi.edu.)
12.0.0.0
*
255.0.0.0 U
0 0
1 eth0 (otse ameerikasse)
200.15.80.0
*
255.255.255.0 U 0
0 0 eth1 (otse
austraaliasse)
182.15.0.0
12.15.15.10 255.255.0.0
UG 0 0
0 eth0 (soome)
194.65.48.0
12.5.115.250 255.255.255.0
UG 0 0
0 eth0 (prantsusmaale)
193.40.75.0
12.5.115.250 255.255.255.0
UG 0 0
0 eth0 (eestisse)
199.15.111.0
12.5.115.10 255.255.255.0
UG 0 0
0 eth0 (tartusse)
gw4.au#
Loodetavasti siin vigu ei ole kui mitte arvestada seda, et see kõik kokku on üks suur viga :)
Aga selle asja mõte oli see, et teha üks puust joonistus
ja näidata kuidas routing käib. Reaalselt on Internet palju suurema
arvu ja tihedamini läbi põimunud ühendustega. Päris
gateway'des ei ole kerneli routingu tabelid jäigalt fikseeritud vaid
nö. routingut tegevad programmid ehk serverid pidevalt muudavad seda.
Ja erinevate hostide routingut tegevad prorammid (nt. routed, gated) vahetavad
ka omavahel pidevalt informatsiooni et kõik gateway'd oleksid kursis
milline on optimaalne tee kuhu.