1 SMĚROVÁNÍ (ROUTING) V kompletním grafu nenastává problém. Každý uzel je soused se zbytkem vrcholů a může s nimi kdykoliv komunikovat. Problém nastává u ostatních grafů: Kritéria dobrého směrování: a) Corectnost - správný paket musí být doručen správnému adresátovi b) Složitost - algoritmus musí použí co nejmíň směrovacích tabulek, zpráv, času atd. c) Efektivnost - všechny pakety by měli být posílané po co nejkratších cestách. Pokud je toto splněno, algoritmus se nazývá optimální. d) Robustnost - V případě topologické změny sítě, by měl algoritmus tyto změny zaznamenat a změnit směrování. e) Adoptivnost - Můžeme zkoumat zatíženost cesty(hrany) a požadujeme rovnoměrné zatížení cest(hran). f) Spravedlnost - Úměrné cesty mají zajištěn úměrný čas přenosu. Nemůžeme požadovat, aby po kratší cestě putoval paket déle než po delší cestě. Směrování pomocí směrovacích tabulek Předpokládáme, že máme vrchol u a pole table u, které obsahuje určité informace. Základní algoritmus: receive m, d ; if d = u then OK else s m, d to table u [d];
2 Sestrojení směrovací tabulky: index 1 2 3 4 5 6 7 1-2 3 3* 5 3 5 2 1-3 3 1 3 1 3 1 2-4 1* 4 1* 4 3 3 3-5 6 5* 5 1 1 4* 4-4* 7 6 4* 4 4 4 4* - 7 7 5 5 5* 5* 5 6 - Naše směrovací tabulka má vlastnost nejkratších cest. Pokud požadujeme jinou vlastnost dostaneme i jinou tabulku. - existuje více možností Kolik bitů je potřeba na uchování celé směrovací tabulky? Θ(n 2 log n) pro n vrcholů Celkový počet údajů v tabulce: Θ(n 2 ) Věta : Optimální směrovací schéma pro daný graf vyžaduje Θ(n 2 log n) bitů, které jsou uchovávané ve směrovací tabulce. Náhodný graf - definuje se podle teorie pravděpodobnosti nebo pomocí Kolmogorovské složitosti. Mějme n prázdných vrcholů. Postupně přidáváme hrany. V nějakém okamžiku tento proces zastavíme. Tedy po q - krocích budeme mít q hran. Počet všech vrcholů, které se takto dají vygenerovat je 2 (n 2). Pokud náhodně vybereme z této množiny některé grafy, tyto grafy mají určité vlastnosti. Definice : Říkáme, že téměř všechny grafy mají vlastnost Q, pokud platí, že
3 lim n P [G má vlastnost Q] = 1. G je graf, který je prvkem nějakého pravděpodobnostního prostoru. Příklady vlastností: 1. Témeř všechny grafy jsou souvislé 2. Téměř všechny grafy mají průměr 2 3. Téměř všechny grafy nejsou planární Graf je reprezentován binárním řetězcem, tedy nad abecedou {0,1} délky ( ) n 2. Každý graf je reprezentován binárním řetězcem. Pokud náhodně vygenerujeme náhodný binární řetězec dostaneme i náhodný graf. Kolmogorovský náhodný graf je reprezentován nestlačitelným(málo stlačitelným) řetězcem. Málo stlačitelný řetězec je náhodně generovaný řetězec, tedy řetězec bez často se opakujících stejných podřetězců. Věta : (Horní odhad pro rozsah směrovacích tabulek v Kolmogorovských náhodných grafech) Směrovač pro optimální směrovací schéma na Kolmogorovských O( log n ) - náhodných grafech řádu n, potřebuje uchovávat nanejvýš 6n bitů směrovací informace. maximálně o tolik je řetězec stlačitelný. Celkově směrovací tabulka vyžaduje 6n 2 bitů. Věta : (Dolní odhad) Každý směrovač pro optimální směrovací schéma na Kolmogorovských o(n) - náhodných grafech potřebuje uchovávat alespoň n/2 - o(n) bitů směrovací informace. Celkové pamět ové nároky vyžadují n 2 /2 - o(n 2 ) bitů informace.
4 NETCHANGE ALGORITMUS Popis algoritmu Tajibnapis Netchange algoritmus je dán jako algoritmus 4.8 a 4.9. Postupy algoritmu budou nejdříve podloženy neformálním popisem operací algoritmu, a následně bude formálně dokázána správnost algoritmu. Výběr souseda, kterému budou doručeny balíky pro určení v, je založen na odhadech vzdálenosti každého uzlu k v. Preferovaný soused je vždy sousedem s nejnižším odhadem této vzdálenosti. var Neigh u : set of nodes ; (* sousedé u *) D u : array of 0..N ; (* D u [v] odhaduje d(u, v) *) Nb u : array of nodes ; (* Nb u [v] je soused preferovaný před v *) ndis u : array of 0..N ; (* ndis u [w, v] odhaduje d(w, v) *) Inicializace: begin forall w Neigh u, v V do ndis u [w, v] := N ; forall v V do begin D u [v] := N ; Nb u [v] := udef ; D u [u] := 0 ; Nb u [u] := local ; forall w Neigh u do s mydist, u, 0 to w Postup náhrady(v): begin if v = u then begin D u [v] := 0 ; Nb u [v] := local else begin (* Odhadnout vzdálenost k v *) d := 1 + min{ndis u [w, v] : w Neigh u } ; if d < N then begin D u [v] := d ; Nb u [v] := w with 1 + ndis u [w, v] = d else begin D u [v] := N ; Nb u [v] := udef ; if D u [v] se změní then forall x Neigh u do s mydist, v, D u [v] to x Algoritmus 4.8 NETCHANGE ALGORITMUS (Část první, pro uzel u). Uzel provádí odhad D u [v] of d(u, v) a odhaduje ndis u [w, v] of d(w, v) pro každého souseda w of u. Odhad D u [v] je vypočítán z odhadů ndis u [w, v], a odhady
5 ndis u [w, v] obdržíme přes komunikaci se sousedy. Výpočet odhadů D u [v] pokračuje následovně. Jestliže u = v potom d(u, v) = 0 takže D u [v] je v tomto případě nastaven na 0. Jestliže u v, nejkratší cesta z u do v (pokud taková cesta existuje ) se skládá z průchodu od u k sousedovi, sloučenému s nejkratší cestou od tohoto souseda k v a tedy d(u, v) = 1 + min w Neigh u d(w, v). Z předcházející rovnice, uzel u v odhaduje d(u, v) aplikováním této definice na odhadované hodnoty d(w, v), nalezených v tabulkách jako ndis u [w, v]. Když existuje N uzlů, minimálně se měnící cesta má délku nejvýše N 1. Uzel může tušit, že neexistuje žádná cesta, pokud je vypočítaná vzdálenost N a víc; hodnota N je užita v tabulce. Algoritmus vyžaduje uzel, aby měl odhad vzdálenosti svých sousedů k v. Ty jsou obdrřeny od těchto uzlů, protože je přenášejí ve zprávách typu mydist,... Pokud uzel u počítá hodnotu d jako odhad své vzdálenosti k v(d u [v] = d), je poslána tato informace všem sousedům ve zprávě mydist, v, d. Po obdržení zprávy mydist, v, d od souseda w, u přiděluje ndis u [w, v] hodnotu d.jako výsledek změny v ndis u [w, v] se odhad d(u, v) může změnit a proto je odhad nahrazen pokaždé, když se tabulka změní. Pokud se odhad opravdu změní k d je samozřejmě přenesen k sousedům, kteří užívají zprávy mydist, v, d. Zpracování zprávy mydist, v, d od souseda w: { mydist, v, d stojí v čele Q wv } begin receive mydist, v, d from w ndis u [w, v] := d ; Recompute(v) Při výpadku průchodu uw: begin receive fail, w ; Neigh u := Neigh u \{w} ; forall v V do Recompute (v) Při oparavě průchodu uw: begin receive repair, w ; Neigh u := Neigh u {w} ; forall v V do begin ndis u [w, v] := N ; s mydist, v, D u [v] to w Algoritmus 4.9 NETCHANGE ALGORITMUS (Část 2, pro uzel u).
6 Algoritmus reaguje na na výpadky a opravy průchodů tím, že pozmění místní tabulky a pošle zprávu mydist,.. pokud se odhady vzdálenosti změní. Předpokládáme, že oznámení o tom, že uzly se dostávají nad průchodem nahoru a dolů, je ve formě zpráv fail,. a repair,.. Průchod mezi uzly u 1 a u 2 je modelován dvěmi řadami Q u1,u 2 pro zprávy od u 1 k u 2 a Q u2,u 1 pro zprávy od u 2 k u 1. Když průchod vypadne, jsou tyto řady přestěhovány z konfigurace a uzly na obou koncích průchodu obdrží zprávu fail,.. Jestliže průchod mezi u 1 a u 2 vypadne, u 1 obdrží zprávu fail, u 2 a u 2 získá zprávu fail, u 1. Když je průchod opravován (nebo je k síti přidán nový) jsou ke konfiguraci přidány dvě prázdné řady a dva uzly spojené průchodem obdrží zprávu fail,.. Jestliže průchod mezi u 1 a u 2 nastane, u 1 obdrží repair, u 2 a u 2 obdrží repair, u 1. Reakce algoritmu na výpadky a opravy je následuící. Když vypadne průchod mezi u a w, w se přemístí z Neigh u a naopak. Odhad vzdálenosti pro každé určení je nahrazen, a samozřejmě, poslán všem zbývajícím sousedům, pokud byl změněn. Je to tento případ, pokud předtím vedla nejlepší cesta přes vypadený průchod a neexistuje žádný jiný soused w s ndis u [w, v] = ndis u [w, v]. Když je průchod opravován (nebo je přidán nový), w se přidá k Neigh u, ale u nemá dosud žádný odhad vzdálenosti d(w, v) (a naopak). Nový soused w je ihned informován o D u [v] pro všechna určení v (posláním zprávy mydist, v, D u [v] ). Dokud u neobdrží podobné zprávy z w, u používá N jako odhad pro d(w, v), tzn., nastavuje ndis u [w, v] na N. Věta : Pokud po končném kroku topologických změn, topologie sítě zůstává konstantní(neměnná) algorimus NETCHANGE dosáhne stabilní konfiguraci po konečném počtu kroků.
7 Problém dohody na nespolehlivých sítích V sítích budeme uvažovat 2 typy chyb: a) CRASH b) BYZANTINE FAILURE (Byzantské chyby) ad a) Budeme uvažovat, že chybný je procesor. Zastaví svou aktivitu a bude se chovat jako nepřítomný v dané síti. ad b) Bude se chovat libovolně. Může se jevit jako protihráč, nepřítel. Je daný jeden generál a několik důstojníků. Všichni si můžou posílat zprávy mezi sebou. Komunikační sítí je kompletní graf. Generál nebo důstojníci můžou být loajální nebo byzantinští (crash nebo posílají zprávy, aby škodili loajálním důstojníkům). Cílem je, aby se v konečném čase loajální shodli na stejné hodnotě. Používají se dva algoritmy podle typu zpráv: a) podepsané zprávy b) anonymní zprávy Mějme kompletní graf K n, p 0 necht je generál p 1,.., p n 1 - jsou důstojníci. Věta : Existuje algoritmus odolný vůči t byzantským chybám, který používá podepsané zprávy a řeší úlohu o shodě. Přičemž musí platit, že t n 2. ALGORITMUS SM(t ) Pozn. V i = i množina zpráv, které si pamatuje i -tý procesor v {0,1} zpráva m : p zpráva m z podpisem p 1. Generál v 0 pošle zprávu v : 0 všen důstojníkům. 2. Pro i if (p i přijme zprávu v : 0) then v i = {v}; s v : 0 : i to ostatním důstojníkům if (p i přijme zprávu v : 0 : j 1..j k ) then v i = {v} V i ; if (k < t) then s v : 0 : j 1 :.. : j k : i to ostatním důstojníkům různým od j 1..j k 3. if (V i obsahuje jedinou hodnotu) then pak tuto hodnotu vrat na výstup else vrat NIL Algoritmus je synchronní a k označuje počet kol. Věta : Algoritmus končí výpočet po t + 1 kolech a používá (n 1)(n 2)..(n t 1) zpráv.