Maršrutēšana

**Maršrutēšana** ir trafika ceļa izvēles process vienā vai vairākos tīklos, kā arī starp tiem. Parasti maršrutēšana notiek daudzos tīklos, tostarp ķēžu komutācijas tīklos, piemēram, publiskajā komutācijas telefonu tīklā (angl. public switched telephone network jeb PSTN), un datortīklos, piemēram, Internetā.

Pakešu komutācijas tīklos maršrutēšana ir augstāka līmeņa lēmumu pieņemšana, kas novirza tīkla paketes no to avota uz galamērķi caur starpposma tīkla mezgliem, izmantojot īpašus pakešu pārsūtīšanas mehānismus. Pakešu pārsūtīšana ir tīkla pakešu pārsūtīšana no viena tīkla interfeisa uz citu. Starpmezgli parasti ir tīkla aparatūras ierīces, piemēram, maršrutētāji, vārtejas, ugunsmūri vai tīkla komutatori. Universālie datori  arī pārsūta paketes un veic maršrutēšanu, lai gan tiem nav šim uzdevumam īpaši optimizētas aparatūras.

Maršrutēšanas process parasti virza pārsūtīšanu, pamatojoties uz maršrutēšanas tabulām. Maršrutēšanas tabulas saglabā ierakstu par maršrutiem uz dažādiem tīkla galamērķiem. Maršrutēšanas tabulas var norādīt administrators, tās var apgūt, novērojot tīkla trafiku, vai tās var izveidot ar maršrutēšanas protokolu  palīdzību.

Maršrutēšana šī jēdziena šaurākā nozīmē bieži attiecas uz IP maršrutēšanu un tiek pretstatīta tiltam. IP maršrutēšana pieņem, ka tīkla adreses ir strukturētas un līdzīgas adreses nozīmē tuvumu tīklā. Strukturētas adreses ļauj ar vienu maršrutēšanas tabulas ierakstu attēlot maršrutu uz ierīču grupu. Lielos tīklos strukturētā adresēšana (maršrutēšana šaurā nozīmē) pārspēj nestrukturētu adresēšanu (tiltošanu). Maršrutēšana ir kļuvusi par dominējošo adresācijas veidu internetā. Tiltu veidošana joprojām tiek plaši izmantota lokālajos tīklos.

## Piegādes shēmas
Atkarībā no ziņojumu piegādes veida, maršrutēšanas shēmas iedala:

* **Unicast     (vienraide)**     piegādā ziņojumu vienam noteiktam mezglam, izmantojot asociāciju viens     pret vienu starp sūtītāju un galamērķi: katra galamērķa adrese unikāli     identificē vienu saņēmēja galapunktu.
* **Broadcast (apraide)** piegādā     ziņojumu visiem tīkla mezgliem, izmantojot asociāciju viens pret visiem;     viena datagramma (vai pakete) no viena sūtītāja tiek maršrutēta uz visiem     iespējamiem vairākiem galapunktiem, kas saistīti ar apraides adresi. Tīkls     pēc vajadzības automātiski replicē datagrammas, lai sasniegtu visus     adresātus apraides ietvaros, kas parasti ir viss tīkla apakštīkls.
* **Multicast (multiraide)** piegādā ziņojumu mezglu grupai, kas ir izteikuši     interesi saņemt ziņojumu, izmantojot asociāciju viens pret daudziem no     daudziem vai daudzi pret daudziem; Datagrammas tiek maršrutētas vienlaikus     vienā pārraidē daudziem adresātiem. Multiraide atšķiras no apraides ar to,     ka mērķa adrese apzīmē pieejamo mezglu apakškopu, ne vienmēr visus.
* **Anycast** piegādā     ziņojumu jebkuram no mezglu grupas, parasti tam, kas ir vistuvāk avotam,     izmantojot asociāciju viens pret vienu no daudziem, kur datagrammas tiek     maršrutētas uz jebkuru atsevišķu potenciālo uztvērēju grupas dalībnieku, kur     visi tiek identificēti ar vienu un to pašu galamērķa adresi. Maršrutēšanas     algoritms atlasa vienu uztvērēju no grupas, pamatojoties uz to, kurš ir     tuvākais balstoties uz ar attāluma vai izmaksu parametriem.

Unicast ir dominējošais ziņojumu piegādes veids internetā. Šajā rakstā galvenā uzmanība ir pievērsta unicast maršrutēšanas algoritmiem.

## Topoloģijas sadalījums
Izmantojot statisko maršrutēšanu, mazos tīklos var izmantot manuāli konfigurētas maršrutēšanas tabulas. Lielākiem tīkliem ir sarežģītas topoloģijas, kas var strauji mainīties, padarot maršrutēšanas tabulu manuālu konstruēšanu neiespējamu. Tomēr lielākā daļa publisko komutācijas telefonu tīkla (PSTN) izmanto iepriekš aprēķinātas maršrutēšanas tabulas ar rezerves maršrutiem, ja tiek bloķēts vistiešākais maršruts.

Dinamiskā maršrutēšana mēģina atrisināt šo problēmu, automātiski izveidojot maršrutēšanas tabulas, pamatojoties uz informāciju, ko pārnēsā maršrutēšanas protokoli, ļaujot tīklam darboties gandrīz autonomi, lai izvairītos no tīkla kļūmēm un bloķēšanas. Internetā dominē dinamiskā maršrutēšana. Dinamiskās maršrutēšanas protokolu un algoritmu piemēri ir maršrutēšanas informācijas protokols (angļu: *Routing Information Protocol* (RIP)), OSPF (*Open Shortest Path First*) un EIGRP (*Enhanced Interior Gateway Routing Protocol*).

### Attāluma vektoru algoritmi
Attāluma vektoru algoritmi izmanto Belmana-Forda algoritmu. Šī pieeja piešķir izmaksu numuru katrai saitei starp katru tīkla mezglu. Mezgli nosūta informāciju no punkta A uz punktu B, izmantojot ceļu, kas rada viszemākās kopējās izmaksas (t.i., izmantoto mezglu saišu izmaksu summu).

Kad mezgls pirmo reizi tiek palaists, tam ir zināmi tikai tam tuvākie kaimiņu mezgli un tiešās izmaksas, kas saistītas ar to sasniegšanu. (Šī informācija — galamērķu saraksts, katra galamērķa sasniegšanani nepieciešamās kopējās izmaksas un nākamais datu nosūtīšanas lēciens, lai nokļūtu uz konkrēto galamērķi — veido maršrutēšanas tabulu vai attāluma tabulu.) Katrs mezgls regulāri nosūtīta katram blakus esošajam (kaimiņu) mezglam. savu pašreizējo novērtējumu par kopējām izmaksām, lai nokļūtu visos tam zināmajos galamērķos. Blakus esošie mezgli pārbauda šo informāciju un salīdzina to ar viņu rīcībā jau esošo informāciju. Visa informācija, kas tiek klasificēta kā uzlabojums salīdzinājumā ar jau esošo, tiek pievienota attiecīgo mezglu tabulām. Laika gaitā visi tīkla mezgli spēj atrast labāko nākamo lēciena ceļu un kopējās izmaksas visiem galamērķiem.

Kad tīkla mezgls pazūd, visi mezgli, kas to izmantoja kā nākamo lēcienu, atmet ierakstu un nosūta atjaunināto maršrutēšanas informāciju visiem blakus esošajiem mezgliem, kas savukārt atkārto procesu. Galu galā visi tīkla mezgli saņem atjauninājumus un atklāj jaunus ceļus uz visiem galamērķiem, kas neietver konkrēto mezglu.

### Saišu stāvokļa algoritmi
Lietojot saišu stāvokļa algoritmus, tīkla grafiskās kartes dati tiek izmantoti katram mezglam kā pamatdati. Lai izveidotu savu karti, katrs mezgls pārpludina visu tīklu ar informāciju par citiem mezgliem, ar kuriem tas var izveidot savienojumu. Katrs mezgls pēc tam neatkarīgi apkopo šo informāciju kartē. Izmantojot šo karti, katrs maršrutētājs neatkarīgi nosaka viszemāko izmaksu ceļu no sevis uz jebkuru citu mezglu, izmantojot standarta īsāko ceļu algoritmu, piemēram, Deikstras algoritmu. Rezultāts ir datu koks, kas sakņojas pašreizējā mezglā, tā, ka ceļš caur koku no tā saknes uz jebkuru citu mezglu ir viszemāko izmaksu ceļš uz šo mezglu. Pēc tam šis koks kalpo, lai izveidotu maršrutēšanas tabulu, kas norāda labāko nākamo lēcienu, lai nokļūtu no pašreizējā mezgla uz jebkuru citu mezglu.

### Optimizēts saites stāvokļa maršrutēšanas algoritms
Saites stāvokļa maršrutēšanas algoritms, kas optimizēts mobilajiem ad hoc tīkliem, ir optimizētais saites stāvokļa maršrutēšanas protokols (Link State Routing Protocol — OLSR). OLSR ir proaktīvs; tas izmanto Hello un Topology Control (TC) ziņojumus, lai atklātu un izplatītu informāciju par saites stāvokli mobilajā ad hoc tīklā. Izmantojot Hello ziņojumus, katrs mezgls atklāj divu lēcienu kaimiņa informāciju un izvēlas daudzpunktu releju (MPR) kopu. MPR atšķir OLSR no citiem saites stāvokļa maršrutēšanas protokoliem.

### Ceļa vektora protokols
Attāluma vektors un saites stāvokļa maršrutēšana ir domēna iekšējie maršrutēšanas protokoli. Tos izmanto autonomā sistēmā, bet ne starp autonomām sistēmām. Abi šie maršrutēšanas protokoli kļūst nekontrolējami lielos tīklos, un tos nevar izmantot starpdomēnu maršrutēšanai. Attāluma vektora maršrutēšana ir nestabila, ja domēnā ir vairāk nekā daži lēcieni. Saites stāvokļa maršrutēšanai ir nepieciešami ievērojami resursi, lai aprēķinātu maršrutēšanas tabulas. Tas arī rada intensīvu trafiku datu plūdu dēļ.

Ceļa vektora maršrutēšana tiek izmantota starpdomēnu maršrutēšanai. Tā ir līdzīga attāluma vektora maršrutēšanai. Ceļa vektora maršrutēšana pieņem, ka viens mezgls (to var būt daudz) katrā autonomajā sistēmā darbojas visas autonomās sistēmas vārdā. Šo mezglu sauc par skaļruņu mezglu. Skaļruņu mezgls izveido maršrutēšanas tabulu un reklamē to blakus esošajiem skaļruņu mezgliem blakus esošajās autonomajās sistēmās. Ideja ir tāda pati kā attāluma vektora maršrutēšanai, izņemot to, ka tikai skaļruņu mezgli katrā autonomajā sistēmā var sazināties savā starpā. Skaļruņa mezgls reklamē savas autonomās sistēmas vai citu autonomu sistēmu mezglu ceļu, nevis metriku.

Ceļa vektora maršrutēšanas algoritms ir līdzīgs attāluma vektora algoritmam tādā nozīmē, ka katrs pierobežas maršrutētājs reklamē galamērķus, ko tas var sasniegt, savam blakus esošajam maršrutētājam. Tomēr tā vietā, lai reklamētu tīklus attiecībā uz galamērķi un attālumu līdz šim galamērķim, tīkli tiek reklamēti kā galamērķa adreses un ceļu apraksti, lai sasniegtu šos galamērķus. Ceļš, kas izteikts līdz šim šķērsoto domēnu (vai konfederāciju) izteiksmē, tiek pārnests īpašā ceļa atribūtā, kas reģistrē maršrutēšanas domēnu secību, caur kuriem ir izgājusi sasniedzamības informācija. Maršruts tiek definēts kā galamērķa un uz to vedošā ceļa atribūtu pārī savienošanas process. No tā arī izriet nosaukums - ceļa-vektora maršrutēšana. Maršrutētāji saņem vektoru, kas satur ceļus uz galamērķu kopu.

## Ceļa izvēle
Ceļa izvēle ietver maršrutēšanas metrikas piemērošanu vairākiem maršrutiem, lai izvēlētos (vai paredzētu) labāko maršrutu. Lielākā daļa maršrutēšanas algoritmu vienlaikus izmanto tikai vienu tīkla ceļu. Vairāku ceļu maršrutēšana, it īpaši vienādu izmaksu vairāku ceļu maršrutēšanas metodes ļauj izmantot vairākus alternatīvus ceļus.

Datortīklos metriku aprēķina, izmantojot maršrutēšanas algoritmu, un tā var aptvert tādu informāciju kā joslas platums, tīkla aizkave, lēcienu skaits, ceļa izmaksas, slodze, maksimālā pārraides vienība, uzticamība un sakaru izmaksas. Maršrutēšanas tabulā tiek glabāti tikai labākie iespējamie maršruti, savukārt saites stāvokļa vai topoloģiskās datu bāzes var saglabāt arī visu citu informāciju.

Ja maršruti pārklājas vai ir vienādi, algoritmi prioritārā secībā ņem vērā šādus elementus, lai izlemtu, kurus maršrutus instalēt maršrutēšanas tabulā:

# *Prefiksa     garums*: vienmēr     tiek dota priekšroka atbilstošam maršruta tabulas ierakstam ar garāku     apakštīkla masku, jo tas precīzāk norāda galamērķi.
# *Metrika*:     salīdzinot maršrutus, kas apgūti, izmantojot to pašu maršrutēšanas     protokolu, priekšroka tiek dota zemākai metrikai. Metrikas     nevar salīdzināt starp maršrutiem, kas iegūti no dažādiem maršrutēšanas     protokoliem.
# *Administratīvais     attālums*:     salīdzinot maršruta tabulas ierakstus no dažādiem avotiem, piemēram,     dažādiem maršrutēšanas protokoliem un statiskās konfigurācijas, mazāks     administratīvais attālums norāda uz uzticamāku avotu un tādējādi arī     vēlamo maršrutu.

Tā kā maršrutēšanas metrika ir raksturīga konkrētam maršrutēšanas protokolam, vairāku protokolu maršrutētājiem ir jāizmanto kāda ārēja heiristika, lai atlasītu maršrutus, kas iegūti no dažādiem maršrutēšanas protokoliem. Piemēram, Cisco maršrutētāji katram maršrutam piešķir vērtību, kas pazīstama kā administratīvais attālums, kur mazāki administratīvie attālumi norāda maršrutus, kas apgūti no protokola, kas pieņemts kā uzticamāks.

Vietējais administrators var iestatīt resursdatoram raksturīgus maršrutus, kas nodrošina lielāku tīkla lietojuma kontroli, ļauj veikt testēšanu un labāku vispārējo drošību. Tas ir noderīgi tīkla savienojumu vai maršrutēšanas tabulu atkļūdošanai.

Dažās mazās sistēmās viena centrālā ierīce pirms laika izlemj visu katras paketes ceļu. Dažās citās mazās sistēmās tā malas ierīce, kura ievada paketi tīklā, pirms laika izlemj šīs konkrētās paketes pilnu ceļu. Jebkurā gadījumā maršruta plānošanas ierīcei ir jāzina daudz informācijas par to, kuras ierīces ir savienotas ar tīklu un kā tās ir savienotas savā starpā. Kad ierīcei ir šī informācija, tā var izmantot algoritmu, piemēram, A* meklēšanas algoritmu, lai atrastu labāko ceļu.

Ātrgaitas sistēmās katru sekundi tiek pārsūtīts tik daudz pakešu, ka vienai ierīcei nav iespējams aprēķināt visu ceļu katrai paketei. Agrīnās ātrgaitas sistēmas to risināja ar ķēžu pārslēgšanu, vienreiz izveidojot ceļu pirmajai paketei starp kādu avotu un kādu galamērķi; vēlākas paketes starp to pašu avotu un to pašu galamērķi turpināja iet pa to pašu ceļu, neveicot pārrēķinus līdz ķēdes nojaukšanai. Vēlāk ātrgaitas sistēmas sāka ievadīt paketes tīklā tā, ka nevienai ierīcei vairs nekad nevajadzēja aprēķināt pilnīgu pakešu ceļu.

Lielās sistēmās starp ierīcēm ir tik daudz savienojumu, un šie savienojumi mainās tik bieži, ka nevienai ierīcei pat nav iespējams zināt, kā visas ierīces ir savienotas viena ar otru, un vēl jo mazāk, aprēķināt pilnīgu ceļu caur tām. Šādas sistēmas parasti izmanto nākamā lēciena maršrutēšanu.

Lielākā daļa sistēmu izmanto deterministisku dinamisko maršrutēšanas algoritmu. Kad ierīce izvēlas ceļu uz konkrētu galamērķi, šī ierīce vienmēr izvēlas to pašu ceļu uz šo galamērķi, līdz tā saņem informāciju, kas liek tai domāt, ka kāds cits ceļš ir labāks.

Dažos maršrutēšanas algoritmos netiek izmantots deterministisks algoritms, lai atrastu vislabāko saiti paketes nokļūšanai no sākotnējā avota līdz galamērķim. Tā vietā, lai izvairītos no sastrēgumu karstajiem punktiem pakešu sistēmās, daži algoritmi izmanto randomizētu algoritmu — Valianta paradigmu —, kas maršrutē ceļu uz nejauši izvēlētu starpposma galamērķi un no turienes līdz tā patiesajam galamērķim**.** Daudzos agrīnajos tālruņu slēdžos nejaušinātājs bieži tika izmantots, lai izvēlētos ceļa sākumu caur daudzpakāpju komutācijas sistēmu.

Atkarībā no lietojumprogrammas, kurai tiek veikta ceļa atlase, var izmantot dažādus rādītājus. Piemēram, tīmekļa pieprasījumiem var izmantot minimālā latentuma ceļus, lai samazinātu tīmekļa lapas ielādes laiku, vai lielapjoma datu pārsūtīšanai var izvēlēties vismazāk izmantoto ceļu, lai līdzsvarotu slodzi visā tīklā un palielinātu caurlaidspēju. Populārs ceļu atlases mērķis ir samazināt vidējo trafika plūsmu pabeigšanas laiku un kopējo tīkla joslas platuma patēriņu. Nesen tika ierosināta ceļa atlases metrika, kas aprēķina kopējo baitu skaitu, kas ieplānots katra ceļa malās kā atlases metrika. Šobrīd ir pieejama empīriskā analīze, kas ietver sevī augstākminēto priekšlikumu kā arī vairāku ceļu atlases metrikas.

## Vairāki aģenti
Dažos tīklos maršrutēšanu sarežģī fakts, ka neviena vienība nav atbildīga par ceļu atlasi; tā vietā ceļu vai pat viena ceļa daļu atlasē ir iesaistītas vairākas entītijas. Ja šīs entītijas izvēlas ceļus savu mērķu optimizēšanai, var rasties sarežģījumi vai neefektivitāte, kas var būt pretrunā ar citu dalībnieku mērķiem.

Klasisks piemērs ir satiksme ceļu sistēmā, kurā katrs autovadītājs izvēlas ceļu, kas samazina brauciena laiku. Izmantojot šādu maršrutēšanu, līdzsvara maršruti var būt garāki par optimālo visiem vadītājiem. Jo īpaši Braesa paradokss parāda, ka jauna ceļa pievienošana var pagarināt braukšanas laiku visiem autovadītājiem.

Viena aģenta modelī, ko izmanto, piemēram, automatizētu vadāmu transportlīdzekļu (AGV) maršrutēšanai terminālī, rezervācijas tiek veiktas katram transportlīdzeklim, lai novērstu vienas un tās pašas infrastruktūras daļas vienlaicīgu izmantošanu. Šo pieeju dēvē arī par kontekstu apzinātu maršrutēšanu.

Internets ir sadalīts autonomās sistēmās (AS), piemēram, interneta pakalpojumu sniedzējos (no angl. *Internet service provider*, ISP), kur katrs kontrolē maršrutus, kas saistīti ar tā tīklu. Maršrutēšana notiek vairākos līmeņos. Pirmkārt, AS līmeņa ceļi tiek atlasīti, izmantojot BGP (*Border Gateway Protocol*) protokolu, kas rada AS secību, caur kurām plūst paketes. Katrai AS var būt vairāki ceļi, ko piedāvā blakus esošās AS, no kuriem izvēlēties. Šie maršrutēšanas lēmumi bieži ir saistīti ar biznesa attiecībām ar blakus esošajām AS, kas var nebūt saistītas ar ceļa kvalitāti vai latentumu. Otrkārt, kad ir atlasīts AS līmeņa ceļš, bieži vien ir vairāki atbilstoši maršrutētāja līmeņa ceļi, no kuriem izvēlēties. Daļēji tas ir tāpēc, ka divi interneta pakalpojumu sniedzēji var būt savienoti, izmantojot vairākus savienojumus. Izvēloties vienu maršrutētāja līmeņa ceļu, ir ierasta prakse, ka katrs interneta pakalpojumu sniedzējs izmanto “karsto kartupeļu” maršrutēšanu: trafiku nosūta pa ceļu, kas samazina attālumu caur paša ISP tīklu, pat ja šis ceļš pagarina kopējo attālumu līdz galamērķim.

Piemēram, apsveriet divus interneta pakalpojumu sniedzējus — A un B. Katrs no tiem atrodas Ņujorkā, un tos savieno ātra saite ar latentumu 5 ms, un katrs no tiem darbojas arī Londonā, izmantojot 5 ms saiti. Pieņemsim, ka abiem interneta pakalpojumu sniedzējiem ir transatlantiskās saites, kas savieno abus tīklus, kur A saites latentums ir 100 ms, bet B saites latentums ir 120 ms. Maršrutējot ziņojumu no avota A Londonas tīklā uz galamērķi B Ņujorkas tīklā, A var izvēlēties nekavējoties nosūtīt ziņojumu uz B Londonā. Tas ietaupa A darbu, kas būtu jāiegulda nosūtot ziņojumu pa dārgo transatlantisko saiti, taču palielina ziņojuma latentumu, kas gala rezultātā sastāda 125 ms. Otrs maršruts dotajā gadījumā būtu bijis par 20 ms ātrāks.

2003. gadā veiktajā interneta maršrutu mērījumu pētījumā konstatēts, ka vairāk nekā 30% ceļu starp blakus esošu interneta pakalpojumu sniedzēju pāriem ir palielināts latentums “karsto kartupeļu” maršrutēšanas dēļ, un 5% ceļu kavējas vismaz par 12 ms. Lai gan inflācija AS līmeņa ceļu izvēles dēļ bija ievērojama, tā galvenokārt tika skaidrota ar to, ka BGP nebija mehānisma, kas tieši optimizētu latentumu, nevis ar savtīgu maršrutēšanas politiku. Tika arī ierosināts, ka, ja būtu ieviests atbilstošs mehānisms, interneta pakalpojumu sniedzēji būtu gatavi sadarboties, lai samazinātu latentumu, nevis izmantotu “karsto kartupeļu” maršrutēšanu. Šādu mehānismu vēlāk publicēja tie paši autori, vispirms attiecībā uz diviem interneta pakalpojumu sniedzējiem un pēc tam globālā mērogā.

## Maršruta analīze
Tā kā internets un IP tīkli ir kļuvuši par svarīgākajiem biznesa rīkiem, ir pieaugusi interese par paņēmieniem un metodēm, lai uzraudzītu tīklu maršrutēšanas stāvokli. Nepareiza maršrutēšana vai maršrutēšanas problēmas izraisa nevēlamu veiktspējas pasliktināšanos, vilcināšanās vai dīkstāves. Maršrutēšanas uzraudzība tīklā tiek panākta, izmantojot maršruta analīzes rīkus un metodes.

## Centralizēta maršrutēšana
Tīklos, kur ir pieejama loģiski centralizēta pārsūtīšanas stāvokļa vadība, piemēram, izmantojot programmatūras definētu tīklu, var izmantot maršrutēšanas metodes, kuru mērķis ir optimizēt globālās un tīkla mēroga veiktspējas metriku. To ir izmantojuši lieli interneta uzņēmumi, kas pārvalda daudzus datu centrus dažādās ģeogrāfiskās vietās, kas pievienoti, izmantojot privātas optiskās saites, piemēram, Microsoft Global WAN, Facebook Express Backbone un Google B4.

Optimizējamie globālie veiktspējas rādītāji ietver tīkla izmantošanas maksimālu palielināšanu, satiksmes plūsmas pabeigšanas laika samazināšanu, datplūsmas maksimizāciju pirms noteiktiem termiņiem un plūsmu pabeigšanas laika samazināšanu.

## Atsauces

## Papildu informācijas resursi

* *Ash, Gerald (1997). Dynamic Routing in     Telecommunication Networks. McGraw–Hill. .*
* *Doyle, Jeff & Carroll, Jennifer (2005). Routing     TCP/IP, Volume I, Second Ed. Cisco Press. .*Ciscopress 
* *Doyle, Jeff & Carroll, Jennifer (2001). Routing TCP/IP, Volume II. Cisco Press. .*Ciscopress 
* *Huitema, Christian (2000). Routing in the Internet,     Second Ed. Prentice–Hall. .*
* *Kurose, James E. & Ross, Keith W. (2004). Computer     Networking, Third Ed. Benjamin/Cummings. .*
* *Medhi, Deepankar & Ramasamy, Karthikeyan (2007).     Network Routing: Algorithms, Protocols, and Architectures. Morgan     Kaufmann. .*