Võrgud ja alamvõrgud

Allikas: Kuutõrvaja
Redaktsioon seisuga 22. september 2007, kell 12:30 kasutajalt Jj (arutelu | kaastöö) (Subnetworking)
(erin) ←Vanem redaktsioon | Viimane redaktsiooni (erin) | Uuem redaktsioon→ (erin)

Nets and Subnets - võrgud ja alamvõrgud

Sissejuhatus

Siin leheküljel on kirjeldatud ühte vähemalt minu jaoks algul pikka aega segaseks jäänud asja - tehnikat kuidas moodustatake alamvõrke ehk subnette, miks neid moodustatakse, mis kasu sellest on ja kuidas subnetid asetuvad kõigi teiste subnettide (ehk Interneti) suhtes.

Et siit maksimaalselt aru saada oleks soovitav enne järele uurida mis asi on routing ja kuidas kasutada käsku route ja ifconfig. Pole muidugi kohustuslik :)


IP aadresside klassid

IP aadressid kuuluvad enamjaolt kolme klassi ja IP aadressis eristatakse nn. võrgu ja hosti osa:

A: 1.0.0.0 - 127.0.0.0

esimene neljast näitab võrgu numbrit ja ülejäänud kolm hosti oma: seega on võimalik 127 (ca 2 ^ 8 :) võrku ja ca 2 ^ 24 hosti igas võrgus

B: 128.0.0.0 - 191.255.0.0

kaks esimest neljast näitavad võrgu numbrit ja ülejäänud kaks hosti oma: seega on võimalik 16 065 (ca 2 ^ 16 :) võrku ja 65534 hosti (ca 2 ^ 16) hosti igas võrgus

C: 192.0.0.0 - 223.255.255.0

kolm esimest neljast näitavad võrgu numbrit ja viimane hosti oma: seega on võimalik ca 2 ^ 24 võrku ja 254 (ca 2 ^ 8) hosti igas võrgus

Tekib õigustatud küsimus, et miks on need klassid tehtud, ega sellest võimalike hostide arv ei kasva. Siiski, nii see kord on ja sinna pole midagi parata. Need häirivad 'ca' kohad leivad põhjenduse ühel teisel lehel:

Näited:

193.40.51.89 on konkreetse hosti (täpsemini tema ühe võrguinterface number) ja see kuulub C klassi  võrku.
Kuivõrd vastav võrgu osa on 193.40.51.0 siis üteldakse, et võrgukaart on võrgus numbriga 193.40.51.0
154.54.67.12 on konkreetse hosti (täpsemini tema ühe võrguinterface number) ja see kuulub B klassi  võrku.
Kuivõrd vastav võrgu osa on 154.54.0.0 siis üteldakse, et võrgukaart on võrgus numbriga 154.54.0.0

Niisiis host'i number ei saa olla 0 kuna see on reserveeritud identifitseerimina võrku kui tervikut.

Hosti number ei saa olla ka 255 kuivõrd see on nn. broadcast (in. k. ülekanne) ja selle numbri kasutamine võtab ühendust kõigi vastava alamvõrgu hostidega.

nt. andes käsu ping 154.54.255.255 peaks ta pingima korraga kõiki võrgu 154.54.0.0 hoste. Nii muidugi ei ole ilus pingida.

Olemas on veel mõned erilised võrgud:

0.0.0.0 - nn. default route; selle tähendus selgub ehk hiljem
127.0.0.0 - on nn. loopback; selle alamvõrgu esimene host (127.0.0.1) on vaatamata võrgukaardi olemasolule alati olemas.

kokkuleppeliselt 'päris Internetis' mittekasutatavad aadressid. Seega sobivad naad maskeraadi taga olevatese lokaalvõrkudesse ja Intranetti.

   10.0.0.0 -  10.255.255.255  A klassi võrk
 172.16.0 0 -  172.31.255.255  B klassi võrk
192.168.0.0 - 192.168.255.255  C klassi võrgud

IP aadressidest rääkides kasutatakse ka mõistet netmask. Kui kõik võrgud oleksid rangelt A, B, või C klassi omad siis netmaski järele polekski vajasust. Aga alati see nii ei ole.

Ütleme esimese hooga ära lootes lugeja intuatsioonile, et

IP                   broadcast        netmask
67.19.24.67         67.255.255.255   255.0.0.0
145.19.24.67        154.19.255.255   255.255.0.0
199.19.24.67         199.19.24.255   255.255.255.0

Niisiis, nende kolme põhilise klassi puhul on asi selge: teades IP aadressi võib üheselt arvutada broadcast'i ja netmask'i.

Klassideks jaotamisega on määratletud mitu kohta IP numbrist käivad hosti ja mitu networki kohta. Formaalselt võttes on antud klassi broadcast võrdne suvalise selle klassi IP numbriga millel on hostname osa pandud 255'ks. Vaadake ülaltoodud näidet ja veenduge selles.

Netmask on aga enamsti tagurpidi broadcast:

- network'i osad on 255'd - hosti osad on 0'd

Tegelikult tuleks IP'st broadcasti ja netmaski arvutamisel kasutada kahendarve (binaararve) mida hiljem ka tehakse. Siin on sisu ilmekam. Nendega ka jätkame. Räägitakse arvuti võrkudest ja alamvõrkudest.(net ja subnet), aga toodud joonis on esitatud ebareaalsena ja kasutades ainut nn. puhtaid võrke.

Subnetworking

Nagu varem kirjeldatud on olemas kolme sorti ehk nn. klassi kuuluvaid võrke. Kujutage ette, et on haigla ja sinna pannakse gateway paika ja üteldakse: vot see võrgukaart läheb katuserle antenni külge aga siia teise külge ühendage mis te tahate kusjuures kasutage vaid IP võrgu 210.56.99.0 võrgu aadresse. Mida siis teha.

Kõigepealt on näha, et haiglale anti C klassi võrk mille netmask on 255.255.255.0

Nad saavad maksimaalselt kasutada 254 erinevat IP numbrit ja seega ka hosti. (0 ja 255 on reserveeritud). Aga kas neil on tark teha kogu ettevõtet haarav üks suur võrk. Peale selle, et see oleks administratiivselt mitteotstarbekas oleks see ka tehniliselt ebaökonoomne. Kas või sellel põhjusel, et oletame, et silmaarstid trükivad midagi, ja üks suur traat on koormatud - st. samal ajal ei saa hambaarstid suur midagi trükkida või faile kopeerida.

Aga kavalad ameeriklased on välja mõtelnud võimaluse kuidas jagada C klassi puhas võrk omakorda väiksemateks nö. segmentideks ehk alamvõrkudeks (subnet). Ja selle jagamise juures on määrav koht netmaskil - kui soovite subnetmaskil.

Niisiis, haiglale anti 210.59.99.0 alamvõrk. Nad otsustasid, et kõige lihtsam ja ka kõige sobivam administratiiv-funktsionaalselt oleks omada 16'st alamvõrku:

- silmaarstidele
- ninaarstidele
- naisteartsile
- sisehaiguste arstile

jne.

Et C klassi võrgus on 254 hosti siis jääb igasse moodustatud alamvõrku ca 16 hosti (tegelikult küll 14)

Ilukirjanduslik pilt võiks olla selline:

(hiljem :)

ja tehniline pilt selline:

Haigla.jpg

Niisiis, gateway majapoolse kaardi küljes on alamvõrk neljateistkümne arvutiga ja nood neliteist arvutit on omakorda gateway'd igaüks 14 alamvõrgu arvutile. Toodud joonisel on ruumi puudusel või oskamatul kasutusul mahtunud vaid neli alamvõrku 16 'st võimalikust :) Ülejäänud 8 võrku võib ühendada paigutades nn- gateway arvuti ükskõik millisesse toodud võrku. Et süsteem tööle läheks tuleb korda seada iga hosti kerneli routingu tabelid!

Selge on see, et kui soovida süsteemi funktsioneerima panna tuleb iga kliendi peal paika saada võrguseadme IP aadress ja routing. Programmide ifconfig ja route abil. Enne aga tuleb jõuda selgusele millised on:

- hosti võrgukaardi IP aadress, netmask, broadcast ja - milline on network'i number kuhu host kuulub.

1. C- klassi võrgu numbri saab C klassi IP aadressist kätte nii:

210.56.99.56 kasutades netmaski: 255.255.255.0: kirjutame mõlemad arvud välja binaaaarkujul:

IP : 1101 0010 . 0011 1000 . 0110 0011 . 1101 0010
NM : 1111 1111 . 1111 1111 . 1111 1111 . 0000 0000

Kui nende kahe arvuga teha AND tehe siis, ongi vastuseks võrgu aadress.

NW : 1101 0010 . 0011 1000 . 0110 0011 . 0000 0000 = 210.56.99.0

Seda and'i tehakse ka siis kui kernel peab vaatama kuhu võrgukaardile IP datagramm saata:

kõigepealt vaadatakse, kas mõni host kirje klapib, kui ei siis:

kernel AND'ib datagrammi otsa ees oleva sihtpunkti IP aadressi routingu tabeli esimese kirje netmaskiga. Kui tulemuseks on tolle routingu tabeli sama kirje destinatsiooni tulebas oleva võrgu number, siis saadetakse datagramm tolle võrguga ühenduses oleva võrgu device (nt. eth0 ) peale. Ja nii tehakse kui leitakse sobiv routingu tabeli rida. Kui aga ei leita, siis visatakse datagramm minema (mälu vabastatakse). Muide, default kirje netmask on 0.0.0.0 ja destination on tal kah 0.0.0.0: seega vaatamata datagrammi IP'le on AND tulemus 0.0.0.0 mis klapib destinatsiooniga ja saadetakse sinna kuhu default gateway näitab. Niisiis, default gatewayd on igati korrektne nt. nii seada:

bash# route add -net 0.0.0.0 gw 192.40.0.12 netmask 0.0.0.0

Tuleme oma probleemi juurde subnettingust tagasi.

Aga tegelikult võib vaid kohalikku mõju omavalt kasutada ka muid netmaske kui nende kolme puhta klassi omasid; ja just see pakubki võimaluse lokaalses mõttes omada alamvõrke. Rõhutame, et muu maailma jaoks on tegu ikka ühe C klassi võrguga ainult mis võrku jäävate masinate endi suhtes toimub on midagi peenemat.

C klassi puhul on viimane oktett või bait või 8 bitti, kuidas soovite nn. hosti number. See võimaldab luua 255 erinevat numbrit. Meid rahuldaks pigem aga võimalust luua 16 numbrilisi gruppi 16 korda. Netmaski mõttes tähendab, et me käsitleme kaheksast hosti bitist nelja vasakpoolset kui neworki numbri jätku ja nelja parempoolset kui hosti numbrit. Binaararvudega tegeledes pole see midagi mõistusevastast. Tõsi, kümnendarvudega on algul see veidi ebatavaline.

Niisiis:

| xxxx xxxx . xxxx xxxx . xxxx xxxx . nnnn hhhh |

x - C klassi network n - lokaalses tähenduses kah network h - lokaalses tähenduses host

ja netmask'i kirjutame järelikult sellise

NM : 1111 1111 . 1111 1111 . 1111 1111 . 1111 0000 b = 255.255.255.240 d

nt. host

210.56.99.56 ehk

IP : 1101 0010 . 0011 1000 . 0110 0011 . 1101 0010
NM : 1111 1111 . 1111 1111 . 1111 1111 . 1111 hhhh

kuulub lokaalses mõttes

1. networki nr.

1101 b = 13 d kusjuures networki pikk number on 210.56.99. 1101 0000 b = 210.56.99.208 (imelik, eks ?) (b- binary, d- decimal)

2. tolle networki broadcast on aga :

1111 b = 15 d ehk pikalt 210.56.99.1101 1111 b = 210.56.99.223

3. ja ta on tolle võrgu host nr.

0010 b =  2 d ehk pikalt 210.56.99.1101 0010 b = 210.56.99.210

globaalses mõttes st. muude maailma arvutite jaoks mis ei asi võrgus 210.56.99.0 on ta ikka tavalse C klassi masin. Ning ilmselt hostname peab olema sama nii kohalikus kui globaalses mõttes. Kui vahepeal tekkis kellelgi küsimus, et miks selle netmaskiga üldse jamaga, miks ei võiks teha lihtsalt subnetid ära ja kõik. Kirjutame igasse subnetti 16 hosti sisse ja valmis. Nii saab küll aga efekt on suurem kui iga 16 hosti ksitlevad end kuuluvane subnetti. Ja subnetiks teeb nad just subnet mask.

Nagu näha määrab asja see milline (sub)netmask valida!


Ma toon siia alla veel ühe tabeli kus on kirjas kõikide hostide parameetrid

(NM: 1111 1111 . 1111 1111 . 1111 1111 . 1111 0000) :
(C klassi subnet: 210.56.99.0)

|--- NM ---------| ---- NW -------  |       -- HOSTS --    |   Broadcast  |
|NET  HOST  dec  | bin       |  dec |  bin       | dec     |  bin  | dec  |

|1111 0000  240  | 0000 0000 | 0    | 0001..1110 |  1..14  | 1111  | 15   |
|1111 0000  240  | 0001 0000 |16    | 0001..1110 | 17..30  | 1111  | 31   |
|1111 0000  240  | 0010 0000 |32    | 0001..1110 | 33..46  | 1111  | 47   |
|1111 0000  240  | 0011 0000 |48    | 0001..1110 | 49..62  | 1111  | 63   |
|1111 0000  240  | 0100 0000 |64    | 0001..1110 | 65..78  | 1111  | 79   |
|1111 0000  240  | 0101 0000 |80    | 0001..1110 | 81..94  | 1111  | 95   |
|1111 0000  240  | 0110 0000 |96    | 0001..1110 | 97..110 | 1111  | 111  |
|1111 0000  240  | 0111 0000 |112   | 0001..1110 |113..126 | 1111  | 127  |

|1111 0000  240  | 1000 0000 |128   | 0001..1110 |129..142 | 1111  | 143  |
|1111 0000  240  | 1001 0000 |144   | 0001..1110 |145..158 | 1111  | 159  |
|1111 0000  240  | 1010 0000 |160   | 0001..1110 |159..174 | 1111  | 175  |
|1111 0000  240  | 1011 0000 |176   | 0001..1110 |175..190 | 1111  | 191  |
|1111 0000  240  | 1100 0000 |192   | 0001..1110 |191..206 | 1111  | 207  |
|1111 0000  240  | 1101 0000 |208   | 0001..1110 |207..222 | 1111  | 223  |
|1111 0000  240  | 1110 0000 |224   | 0001..1110 |225..238 | 1111  | 239  |
|1111 0000  240  | 1111 0000 |240   | 0001..1110 |241..254 | 1111  | 255  |

See tabel peaks rääkima enda eest aga siiski:

1. Kummaline küll aga mida rohkem subnette teha seda enam peab loovutama IP numbreid networki ja broadcasti jaoks: igast komplektist kak tükki:

kui esialgu oleks meil olnu 256 - 2 = 254 IP aadressi siis nüüd on neid 256 - 16*2 = 224. 32 'st nö potensiaalsest IP aadressist on saanud nö. IP numbrid :) Aga ilma poleks kah saanud.

2. Ja tähelepanuväärne on see, et neid 16 'st alamvõrku võib omavahel ühendada mitmel viisil. Joonistel toodi vaid üks võimalus. Samuti ei keela keegi teil mingit osa neid numbreid kasutamata jätta.

3. Lõpuks, võimalik, et teie jaoks gw pakkuja ei tule teile andma tervet C klassi alavõrku vaid ta annabki teile juba ühe toodud moel jupitataud subneti. Mispuhul keegi ei keela seda teil veel omakorda subnettideks teha. Aga iga astmega jääb loomulikult IP numbreid vähemaks. See subnettimine väljendabki Interneti struktuuri: tervik koosneb paljudest ümberpaikneda võivatest osadest.

4. mina jagasin C klassi alamvõrgu 16 kaupa 16'ks tükiks; oleks võinud jagada ka nt kaheks või neljaks või mingiks muuks arvuks ja isegi ebavõrdseteks osadeks. (päris suvalisteks ei saa). Ja samuti netmaskis mis subnettimise aluseks võetakse ei pruugi olla 1 ja 0'd järjest. Võiks kasutada ka netmaski 1010 0101: ma pole küll proovinud aga see peaks andma kah 16 korda 16 ainult ühe subneti numbrid pole siis vist järjest :)


Kokkuvõtteks: me pole siiani kasutanud mõistet domain - pole vajadust olnud. See mõiste tuleb kasutusele alles siin kui hakata masinate IP aadressidega seostama nimesid nagu www.ee. esialgu piisas sõnadest: võrk (net) ja alamvõrk (subnet).