03.03. IP maršrutēšana
03.03. IP maršrutēšana
No mītnes viedokļa raugoties, IP maršrutēšana ir vienkārša. Ja galamērķis ir tieši piesaistīts mītnei (piemēram, ar punkta-punkta datu posmu) vai arī ir dalītā tīklā (piemēram, Ethernet'ā vai marķieru aplī), tad IP datagrammu sūta tiešu uz galapunktu. Citādi mītne sūta datagrammu uz noklusēto maršrutētāju (vārteju) kas nodrošina datagrammas nosūtīšanu uz galapunktu. Šis vienkāršais algoritms ir derīgs vairumam mītņu konfigurāciju.
Šajā nodaļā un 9.nodaļā mēs apskatīsim vispārīgāku gadījumu, kur IP slāni var konfigurēt, lai tas strādātu ne tikai kā mītnes dators, bet arī kā maršrutētājs. Vairums daudzlietotāju sistēmu, ieskaitot gandrīz jebkuru UNIX'a sistēmu, var konfigurēt kā maršrutētājus. Mēs varam norādīt vienotu maršrutēšanas algoritmu, ko var lietot gan mītnes, gan maršrutētāji. Principiālā atšķirība ir tā, ka mītne parasti nepārsūta datagrammas no viena interfeisa uz citu, turpretī maršrutētājs pārsūta. Mītne, kas satur iegultu maršrutētāju, nekad nepārsūta datagrammu, kamēr vien to speciāli nekonfigurē to darīt. Par šo konfigurēšanu vairāk sk. 09.04.nodaļā.
Mūsu vispārīgajā algoritmā IP var saņemt datagrammu no TCP, UDP, ICMP vai IGMP (t.i. lokāli ģenerētu datagrammu) ko nosūtīt, vai arī tādu, kas saņemta no tīkla interfeisa (pārsūtāmu datagrammu). IP slāņa atmiņā ir maršrutēšanas tabula, ko tas pārlūko ikreiz, kad saņem kādu datagrammu. Ja datagramma tiek saņemta no tīkla interfeisa, IP vispirms pārbauda vai galapunkta IP adrese ir viena no mūsu pašu IP adresēm vai IP apraides adresēm. Ja tā ir, tad šo datagrammu piegādā protokola modulim, kuru norāda protokola lauks IP sākumposmā. Ja datagramma nav domāta šim IP slānim, tad izpildās viens no sekojošiem gadījumiem:
- ja IP slānis ir konfigurēts kā maršrutētājs, tad paketi pārsūta (t.i. apstrādā izejošo paketi tā, kā aprakstīts turmpāk);
- ja mītne nav maršrutētājs, svešo datagrammu klusām izdzēš.
Katrs ieraksts maršrutēšanas tabulā satur šādu informāciju:
- Galamērķa IP adrese. Tā var būt vai nu pilna mītnes adrese vai tīkla adrese, kā to norāda karodziņa lauks (sk. zemāk) šim ierakstam. Mītnes adreses gadījumā ir norādīts nenulles mītnes ID (#picref("f_1_5.gif","1.5.attēls")), kas identificē vienu mītni, savukārt tīkla adreses gadījumā mītnes ID=0 un tā identificē visas mītnes dotajā tīklā (piemēram, Ethernet'ā, marķieru aplī).
- IP adrese nākamā lēkuma maršrutētājam vai IP adrese tieši pievienotam tīklam. Nākamā lēkuma maršrutētājs ir sasniedzams ar tiešu tīkla savienojumu, kuram varam sūtīt datagrammas tālākai nosūtīšanai. Nākošā lēkuma maršrutētājs nav datagrammas galamērķis, bet tas saņem datagrammas un pārsūta tās galamērķim.
- Karodziņi. Viens karodziņš norāda vai galamērķa IP adrese ir tīkla adrese vai mītnes adrese. Otrs karodziņš norāda, vai nākošā lēkuma maršrutētāja lauks tiešām ir nākamā lēkuma maršrutētājs vai arī tieši pievienota saskarne. (Katru no šiem karodziņiem aprakstīsim 09.02.nodaļā).
- Norādi, kurš no tīkla interfeisiem nodarbosies ar datagrammas pārsūtīšanu augšminētajā kārtībā. IP maršrutēšanu veic lēkumu pa lēkumam. Kā var redzēt no maršrutēšanas tabulā glabātās informācijas, IP nezina pilnu ceļu uz jebkuru galamērķi (izņemot, protams, galamērķus, kuri tieši savienoti ar sūtītāju). Viss, ko nodrošina IP maršrutēšana, tā ir nākamā lēkuma maršrutētāja IP adrese, uz kurieni sūtīt datagrammu. Pieņemam, ka nākamā lēkuma maršrutētājs ir kaut kādā nozīmē "tuvāks" galamērķim, un arī ka nākamā lēkuma maršrutētājs ir tieši savienots ar sūtītāju. IP maršrutēšana veic sekojošas darbības:
- Meklē maršrutēšanas tabulā ierakstu, kurš atbilst pilnai galamērķa IP adresei (t.i. sakrīt tīkla ID un mītnes ID). Ja tādu ierakstu atrod, tad sūta paketi uz norādīto nākamā lēkuma maršrutētāju vai uz tieši pievienotu saskarni (atkarībā no karodziņu lauka vērtības). Punkta-punkta datu posmus šeit var atrast, jo otrs datu posma gals ir otras mītnes pilna IP adrese.
- Meklē maršrutēšanas tabulā ierakstu, kurš atbilst tikai galamērķa tīkla ID. Ja to atrod, tad nosūta paketi uz norādīto nākamā lēkuma maršrutētāju vai uz tieši pievienoto saskarni (atkarībā no karodziņu lauka vērtības). Visas mītnes galamērķa tīklā var apstrādāt ar šo vienu maršrutēšanas tabulas ierakstu. Piemēram, visas mītnes vietējā Ethernet'ā tiek apstrādātas ar šāda tipa maršrutēšanas tabulas ierakstu. Tīkla pārbaudei ir jāņem vērā iespējamā apakštīkla maska, ko mēs aprakstām nākamajā nodaļā.
- Meklē maršrutēšanas tabulā ierakstu ar apzīmējumu "default" (noklusētais ieraksts). Ja tādu atrod, nosūta paketi uz šajā ierakstā norādīto nākamā lēkuma maršrutētāju. Ja neviens no šiem soļiem nenostrādā, datagramma ir nepiegādājama. Ja uz konkrētās mītnes ģenerējas nepiegādājama datagramma, tās avotam parasti nosūta kļūdu - nesasniedzama mītne vai nesasniedzams tīkls. Pilnu atbilstošās mītnes adresi meklē pirms atbilstošā tīkla ID. Tikai tad, ja abas pārbaudes neizdodas, izmanto noklusēto maršrutu. Noklusētie maršruti kopā ar ICMP pārsūtīšanas ziņojumu, ko izsūta nākamā lēkuma maršrutētājs (ja mēs izvēlamies aplamu noklusēto maršrutu konkrētai datagrammai) ir tās pamatiezīmes, kas IP maršrutēšanas efektivitāti; pie tām atgriezīsimies 09.nodaļā. Iespēja norādīt maršrutu uz visu tīklu (nevis maršrutu uz katru atsevišķo mītni) ir cita pamatīpašība IP maršrutēšanai. Tas atļauj maršrutētajiem Internetā, piemēram, izmantot maršrutēšanas tabulu ar dažiem tūkstošiem ierakstu nevis tabulu ar vairāk nekā miljonu ierakstu [t.i. atbilstoši visu datoru skaitam Internetā 90-to gadu sākumā K.A.]
Piemēri
Vispirms aplūkosim vienkāršu piemēru: mūsu mītnei Kad IP slānis saņem datagrammu no kāda no augšējiem līmeņiem, tas meklē maršrutēšanas tabulu un konstatē, ka galamērķa IP adrese ( #pic("f_3_3.gif", "400") 3.3.attēls: IP datagrammas piegāde no Aplūkosim citu piemēru: #pic("f_3_3.gif", "400") ~~3.4.attēls: Sākotnējais maršruts datagrammai no Kad KadDaži būtiski novērojumi saistībā ar šo piemēru:
- Visas mītnes un maršrutētāji šajā piemērā izmantoja noklusēto maršrutu. Tiešām, vairums mītņu un daži maršrutētāji var izmantot noklusēto maršrutu visam, kam galamērķis neatrodas viņu lokālajos tīklos.
- Galamērķa IP adrese datagrammā nekad nemainās (08.05.nodaļā redzēsim, ka tā var nebūt taisnība tad, ja lieto maršrutēšanu no avota, ko lieto reti). Visi maršrutēšanas lēmumi tiek pieņemti balstoties uz galapunkta adresi.
- Katram datu posmam izmanto citu datu posma sākumposmu, un datuposma piegādes adrese (ja tā vispār norādīta) vienmēr ietver nākamā lēkuma datuposma adresi. Mūsu piemērā abi Ethernet'i iekapsulēja datu posma sākumposmu, kurš satur nākamā lēkuma Ethernet'a adresi, bet SLIP'a datuposms to neiekapsulēja. Ethnernet'a adreses parasti iegūst ar ARP.
9.nodaļā aplūkosim IP maršrutēšanu atkal - pēc tam, kad būsim aprakstījuši ICMP. Analizēsim arī dažas maršrutēšanas tabulas un kā tās izmanto maršrutēšanas lēmumu pieņemšanā.