Routing - tee leidmine

teejuht

                1. Sissejuhatus
                2. Routing
 

1. Sissejuhatus

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.
 

2. Rounting
 

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.