Ders 07 / 17
Statik ve Dinamik Yönlendirme
Statik tablo kopmayı hiç duymaz ve kara delik sayısı altı tur boyunca 14'te kalır; haberin yayıldığı dinamik rejimde kayıp iki turda biter, ama haberi yalnız iki düğüm duyduğunda kara delik sıfırlanırken 6 paket döngüye girer ve adım 61'den 94'e çıkar.
İçindekiler
Önceki ölçümde iki tablo kuşağı vardı ve ikincisi hazır verildi: kopmadan sonraki gerçek hesaplandı, tablolara yazıldı ve paketler öyle yürütüldü. Aradaki geçişi kimse yapmadı.
Gerçek bir ağda o geçişi birinin yapması gerekir ve yalnız iki yol vardır. Ya satırları bir yönetici elle yazar — buna statik yönlendirme denir — ya da cihazlar bağlarının durumunu birbirine anlatır ve tablolarını kendileri kurar; buna dinamik yönlendirme denir. Bu dersin sorusu hangisinin daha iyi olduğu değildir. Soru şudur: kopma olduğunda kaç tur sonra doğru tabloya varılır, ve varılmıyorsa kayıp zamanla ne yapar?
Yazmak ve Anlatmak
Statik yönlendirmede tablo bir yapılandırma metnidir. Yönetici her düğüm için her hedefin bir sonraki düğümünü yazar; cihaz bu satırları okur ve hiç sorgulamaz. Satırın doğru olup olmadığını denetleyen bir düzenek yoktur, çünkü cihazın karşılaştırabileceği ikinci bir kaynak yoktur.
# ogretilen dokum, calistirilmamistir düğüm b için elle yazılmış satırlar hedef bir sonraki düğüm a a c c d c e f f f g f h a
Sekiz düğümlü ağda her düğüm için yedi satır yazılır ve e, f, g satırları kirişten
geçer. Kiriş koptuğunda bu metin değişmez — dosyada yazan neyse cihaz onu okumaya devam eder.
Dinamik yönlendirmede tablo bir yapılandırma değil, bir anlaşmanın çıktısıdır. Cihazlar düzenli aralıklarla komşularına bildirimde bulunur, gelen bildirimlerden kendi satırlarını üretir ve bir bağ düştüğünde bunu komşularına söyler. Yöneticinin yazdığı şey satırlar değil, protokolün hangi bağlarda konuşacağıdır.
İki rejimin maliyeti farklı yerlere düşer. Statik rejimde maliyet yazma anındadır: sekiz düğümlü bir ağda her düğümün yedi hedefi vardır, toplam elli altı satır. Düğüm sayısı ise satır sayısı ile büyür — otuz düğümde sekiz yüz yetmiş satır. Dinamik rejimde maliyet çalışma anındadır: cihazlar bildirim gönderir, gelen bildirimleri işler ve yakınsama boyunca tablolar bir süre yanlış kalır.
Yazma maliyetinin bir kısmı önceki dersteki varsayılan yolla kısaltılabilir. Bir düğüm komşularından biri dışındaki her hedefi tek bir boş önek satırına yığabilir; o zaman elle yazılan satır sayısı yediden ikiye iner. Ölçümde bu kısaltma kullanılmaz, çünkü ölçülen şey yazma emeği değil kararın doğruluğudur: varsayılan yol satır sayısını azaltır, kopmayı duyma yeteneğini değiştirmez. Kısaltılmış bir tablo da kopan bağı gösteriyorsa paketi yine oraya gönderir.
Statik Tablonun Kör Noktası
Statik bir tablo bir bağın koptuğunu hiçbir zaman öğrenmez. Bu bir gecikme değil, bir yokluktur: haberin ulaşacağı bir kanal tanımlanmamıştır. Cihaz kendi bağının düştüğünü görebilir, ama iki adım ötedeki bir bağın düştüğünü göremez ve satırı o bağı gösteriyorsa paketi oraya göndermeye devam eder.
Bunun ölçüme yansıyan sonucu şudur: statik rejimde kara delik sayısı zamanın işlevi değildir. Birinci turda kaç paket ölüyorsa yüzüncü turda da o kadarı ölür. Kayıp durmaz, birikir. Durması için ölçümün dışından bir olay gerekir: bir yöneticinin arızayı fark edip satırları yeniden yazması.
Dinamik rejimde ise haberin bir kanalı vardır. Kopan bağın iki ucu bunu doğrudan görür, komşularına söyler, onlar kendi komşularına söyler. Haber ağda bir dalga gibi yayılır ve her tur bir komşuluk adımı ilerler. Aşağıdaki ölçüm tam olarak bu dalgayı modeller.
Ölçümün varsayımları:
- YL8 — Ağ, kâhin ve kırk çift önceki derstekiyle aynıdır: sekiz düğüm, dokuz bağ, halkayı kesen kiriş. Ölçülen kopma yine o kirişin kaybıdır.
- YL9 — Statik rejimde tablo ölçüm boyunca hiç değişmez. Yöneticinin arızayı fark edip müdahale etmesi ölçümün dışındadır; ölçülen şey müdahaleye kadar geçen süredir.
- YL10 — Dinamik rejimde haber kopan bağın iki ucundan başlar ve her turda bir komşuluk adımı ilerler. Haberi duyan düğüm tablosunu doğru hâline getirir; duymayan düğüm eski tablosunu olduğu gibi sürdürür.
- YL11 — Tur, bir düğümün komşularından bildirim alıp tablosunu güncellemesidir. Tur bir saat birimi değildir; karşılığı protokolün bildirim aralığıdır ve saniye cinsinden değişir.
- YL12 — Aynı kırk çift her turda yeniden yürütülür ve ölçüm turlar arasında bellek tutmaz; her tur o turun tablolarıyla bağımsız ölçülür.
- YL13 — Atlama sınırı 12’dir; sınırı yakan paket döngü sayılır.
- YL14 — Kümenin çözünürlüğü kırk paket üzerinden 1/40 = 0,025’tir; bundan küçük bir fark iddia edilmez.
Ölçüm
"""Statik ve dinamik: kopmayi duymayan tablo ile duyan tablo. Statik rejimde tablo hic degismez. Dinamik rejimde haber kopan bagin iki ucundan baslar ve her turda bir komsuluk adimi ilerler. """ TOHUM = 20260810 DUGUMLER = ["a", "b", "c", "d", "e", "f", "g", "h"] BAGLAR = [("a", "b"), ("b", "c"), ("c", "d"), ("d", "e"), ("e", "f"), ("f", "g"), ("g", "h"), ("h", "a"), ("b", "f")] KOPUK = [b for b in BAGLAR if b != ("b", "f")] ATLAMA_SINIRI = 12 def uretec(tohum): d = tohum % 2147483646 + 1 def r(n): nonlocal d d = (d * 48271) % 2147483647 return d % n return r def komsuluk(baglar): k = {u: set() for u in DUGUMLER} for x, y in baglar: k[x].add(y) k[y].add(x) return k def kahin(baglar): """Her dugum icin her hedefe giden en kisa yolun ilk adimi.""" k, tablo = komsuluk(baglar), {} for kaynak in DUGUMLER: onceki, sira, gorulen = {}, [kaynak], {kaynak} while sira: yeni = [] for u in sira: for v in sorted(k[u]): if v not in gorulen: gorulen.add(v) onceki[v] = u yeni.append(v) sira = yeni for hedef in DUGUMLER: if hedef == kaynak or hedef not in onceki: continue adim = hedef while onceki[adim] != kaynak: adim = onceki[adim] tablo[(kaynak, hedef)] = adim return tablo def ilet(kaynak, hedef, tablolar, baglar): k, u, gecilen, atlama = komsuluk(baglar), kaynak, [], 0 while u != hedef: if atlama >= ATLAMA_SINIRI: return "dongu", atlama sonraki = tablolar.get((u, hedef)) if sonraki is None or sonraki not in k[u]: return "kara delik", atlama if (u, sonraki) in gecilen: return "dongu", atlama gecilen.append((u, sonraki)) u, atlama = sonraki, atlama + 1 return "ulasti", atlama def ciftler(sayi=40, tohum=TOHUM): r, liste = uretec(tohum), [] while len(liste) < sayi: x, y = DUGUMLER[r(8)], DUGUMLER[r(8)] if x != y: liste.append((x, y)) return liste def olc(tablolar, baglar, sayi=40): sayim, adim = {"ulasti": 0, "dongu": 0, "kara delik": 0}, 0 for x, y in ciftler(sayi): kader, a = ilet(x, y, tablolar, baglar) sayim[kader] += 1 adim += a return sayim, adim def kismi(eski, yeni, duyan): """Kopmayi yalniz duyanlar guncelledi; otekiler eski tablosunu surduruyor.""" return {(u, h): (yeni if u in duyan else eski)[(u, h)] for (u, h) in eski} def duyanlar(tur, baglar=KOPUK, kaynak=("b", "f")): """Haber kopan bagin uclarindan baslar, turda bir komsuluk adimi ilerler.""" if tur <= 0: return set() k, kume, sinir = komsuluk(baglar), set(kaynak), set(kaynak) for _ in range(tur - 1): sinir = {v for u in sinir for v in k[u]} - kume kume |= sinir return kume eski, yeni = kahin(BAGLAR), kahin(KOPUK) degisen = [(u, h) for (u, h) in eski if eski[(u, h)] != yeni[(u, h)]] print(f"tablo satırı {len(eski)} | kopmadan sonra elle düzeltilecek satır " f"{len(degisen)} | dokunulacak düğüm {len({u for u, _ in degisen})}") print() print(f"{'tur':>3s} {'duyan':>5s} | {'statik: ulaştı':>14s} {'döngü':>5s} {'k.delik':>7s}" f" {'adım':>4s} | {'dinamik: ulaştı':>15s} {'döngü':>5s} {'k.delik':>7s} {'adım':>4s}") statik_kayip = dinamik_kayip = 0 for tur in range(6): s, sa = olc(eski, KOPUK) kume = duyanlar(tur) d, da = olc(kismi(eski, yeni, kume), KOPUK) statik_kayip += s["dongu"] + s["kara delik"] dinamik_kayip += d["dongu"] + d["kara delik"] print(f"{tur:3d} {len(kume):5d} | {s['ulasti']:14d} {s['dongu']:5d} " f"{s['kara delik']:7d} {sa:4d} | {d['ulasti']:15d} {d['dongu']:5d} " f"{d['kara delik']:7d} {da:4d}") print(f"altı turda hedefine varmayan paket: statik {statik_kayip}, " f"dinamik {dinamik_kayip}") print() print(f"{'duyan küme':<22s} {'ulaştı':>7s} {'döngü':>6s} {'kara delik':>11s} " f"{'adım':>5s} {'tablosu doğruyken ölen':>23s}") for ad, kume in (("kimse", set()), ("yalnız b ve f", {"b", "f"}), ("b, f ve komşuları", duyanlar(2)), ("d dışında herkes", set(DUGUMLER) - {"d"}), ("herkes", set(DUGUMLER))): tab = kismi(eski, yeni, kume) s, a = olc(tab, KOPUK) dogruyken = sum(1 for x, y in ciftler() if ilet(x, y, tab, KOPUK)[0] != "ulasti" and x in kume) print(f"{ad:<22s} {s['ulasti']:7d} {s['dongu']:6d} {s['kara delik']:11d} " f"{a:5d} {dogruyken:23d}")
tablo satırı 56 | kopmadan sonra elle düzeltilecek satır 11 | dokunulacak düğüm 6 tur duyan | statik: ulaştı döngü k.delik adım | dinamik: ulaştı döngü k.delik adım 0 0 | 26 0 14 61 | 26 0 14 61 1 2 | 26 0 14 61 | 34 6 0 94 2 6 | 26 0 14 61 | 40 0 0 99 3 8 | 26 0 14 61 | 40 0 0 99 4 8 | 26 0 14 61 | 40 0 0 99 5 8 | 26 0 14 61 | 40 0 0 99 altı turda hedefine varmayan paket: statik 84, dinamik 20 duyan küme ulaştı döngü kara delik adım tablosu doğruyken ölen kimse 26 0 14 61 0 yalnız b ve f 34 6 0 94 1 b, f ve komşuları 40 0 0 99 0 d dışında herkes 40 0 0 99 0 herkes 40 0 0 99 0
Düz Çizgi ile İnen Çizgi
Statik sütunu altı turun altısında da aynıdır: 26 ulaştı, 14 kara delik, 61 adım. Bu sabitlik ölçümün en önemli bulgusudur. Kayıp azalmıyor çünkü azalmasını sağlayacak bir olay yok; tablo kopmayı duymadı, duyacağı bir kanal da yok. Altı turda hedefine varmayan paket 84’e ulaşıyor ve bu sayı turla doğrusal büyümeye devam eder.
Dinamik sütunu iki turda kapanıyor: ikinci turda ulaşan 40’a çıkıyor ve orada kalıyor. Altı turdaki toplam kayıp 20. Aynı kopma, aynı topoloji, aynı kırk paket — fark yalnız haberin bir kanalı olup olmamasıdır.
Elle düzeltme maliyeti üst satırda duruyor. Elli altı satırın 11’i yanlış hâle geliyor ve bu on bir satır 6 ayrı düğüme dağılmış. Yönetici bir bağın koptuğunu öğrense bile düzeltmesi gereken şey tek bir satır değildir; altı cihaza dokunması, her birinde hangi satırların değişmesi gerektiğini yeniden hesaplaması gerekir. Sekiz düğümlük bir ağda bu iş bir oturumdur, otuz düğümlük bir ağda başka bir şeydir.
Kısmî Bilginin Bedeli
Alt tablo dinamik rejimin içine bakıyor ve orada beklenmedik bir şey var.
Kimse duymadığında 14 paket kara deliğe düşüyor, toplam 61 adım harcanıyor. Kopmayı yalnız b ve f duyduğunda kara delik sıfıra iniyor — ilk bakışta düzelme. Ama ulaşan sayısı 40 değil 34; kalan 6 paket döngüye giriyor ve toplam adım 61’den 94’e çıkıyor.
Bu satır kursun ikinci iddiasını ödüyor: kısmî bilgi, hiç bilgiden daha pahalı bir arıza üretir. Gerekçe kaderlerin doğasındadır. Kara deliğe düşen paket hemen ölür: bir düğüme varır, orada karşılığı olmayan bir komşu görülür ve paket atılır. Harcadığı kaynak yolun o noktasına kadar attığı adımlardır. Döngüye giren paket ise ölmez; atlama sınırını yakana kadar ağda dolaşır, her turda bağ kapasitesi ve işleme kapasitesi tüketir.
Ölçüm bunu adım sayısıyla söylüyor. Kayıp paket sayısı 14’ten 6’ya, yani yarıdan fazla inerken harcanan adım 61’den 94’e çıkıyor. Az sayıda paket, çok sayıda adım. Arızanın görünümü de değişiyor: kara delik bir kayıp gibi görünür ve bulunması görece kolaydır; döngü tıkanıklık gibi görünür, çünkü bağlar doludur ve paketler akmaktadır — yalnızca hiçbiri varmamaktadır.
Sağdaki son sütun bunun neden kaçınılmaz olduğunu söylüyor. yalnız b ve f satırında
tablosu doğru olan bir düğümden çıkıp ölen 1 paket var. O düğüm kopmayı duymuştur,
satırı gerçeğe uygundur, kararı kusursuzdur — ve paketi yine de kaybeder, çünkü paketi
verdiği komşu duymamıştır. Buradan yapısal bir sonuç çıkar: hiçbir cihaz tek başına bir
paketi döngüye sokamaz. İki tablonun paketi birbirine geri gönderdiği bu duruma
yönlendirme döngüsü (routing loop) denir; ölçümdeki kader adı kısaca döngüdür. Bir
cihazın kararının doğruluğu kendi tablosuna değil, komşusununkine bağlıdır.
Son iki satır bir başka şeyi gösteriyor. d dışında herkes duyduğunda sonuç 40/40 —
hiç duymayan bir düğüm kaldığı hâlde. Sebep, ölçülen kırk çiftin hiçbirinin d’nin değişen
satırlarına uğramaması. Kısmî bilgi her zaman arıza üretmez; arıza, eksik kalan bilginin
paketin yoluna düşmesiyle doğar.
Ölçütle Seçim
İki rejim arasındaki seçim bu ölçümden okunabilir bir ölçüte dayanır ve ölçüt “hangisi daha gelişkin” değildir.
Statik yönlendirme, hedefe giden yol tekse doğru seçimdir. Tek çıkışı olan bir uç ağda alternatif yol yoktur; bir dinamik protokol koşsa bile keşfedeceği ikinci bir yol bulunmadığından kopma anında yapabileceği hiçbir şey yoktur. Böyle bir yerde protokolün bildirim trafiği ve durum tutması karşılıksız bir maliyettir.
Dinamik yönlendirme, yol sayısı birden çoksa karşılığını verir. Ölçümdeki halka tam da budur: kiriş koptuğunda her hedefe hâlâ bir yol vardır ve dinamik rejim onu iki turda bulur. Statik rejimin bulamamasının nedeni yolun yokluğu değil, yolu arayan bir düzeneğin yokluğudur.
İkisinin karışımı da bir seçenektir ve yaygındır: uç ağlara statik satır, çekirdeğe dinamik protokol. Ölçüt her iki durumda da aynıdır — bir bağ koptuğunda kaç turda doğru tabloya varıldığı ve o turlarda kaç paketin hedefine varmadığı.
Bu ölçüt statik rejim için de tanımlıdır, ama karşılığı protokolde değil insandadır. Statik bir ağın yakınsama süresi, arızanın fark edilmesiyle satırların yeniden yazılması arasında geçen süredir; ölçüm bunu YL9 ile dışarıda bıraktı. Dışarıda bırakılmasının nedeni, sürenin protokolden okunamamasıdır: bir bildirim aralığı gibi bir üst sınırı yoktur ve arızanın ne kadar sonra görüleceğine bağlıdır. Ölçümdeki düz çizgi tam olarak bu belirsizliği temsil eder — o çizgi kendiliğinden inmez.
Özet
- Statik tabloyu yönetici yazar ve maliyeti yazma anındadır; satır sayısı ile büyür ve sekiz düğümde elli altı satırdır.
- Statik tablo kopmayı hiç duymaz: kara delik sayısı altı turun altısında da 14’te kalır ve altı turdaki toplam kayıp 84 pakete ulaşır, dinamik rejimde 20.
- Elle düzeltme tek satırlık bir iş değildir; elli altı satırın 11’i 6 ayrı düğümde yanlış hâle gelir.
- Kopmayı yalnız iki düğüm duyduğunda kara delik 0’a iner ama 6 paket döngüye girer ve adım 61’den 94’e çıkar: kısmî bilgi, hiç bilgiden daha pahalı ve daha zor görülen bir arıza üretir.
- Tablosu doğru olan bir düğümden çıkan 1 paket bile ölür; hiçbir cihaz tek başına bir paketi döngüye sokamaz, döngü en az iki tablonun anlaşmazlığıdır.
- Seçim ölçütü yol sayısıdır: tek yollu uç ağda statik satır yeterlidir, birden çok yollu ağda dinamik protokolün bulduğu turlar karşılığını verir.
Sonraki Adım
Bu ölçümde haberin taşınması modellenmedi. Duyan küme dışarıdan verildi ve duyan her düğüm doğru tabloya bir anda vardı; sanki bağ koptuğu an gerçeğin tamamı elindeymiş gibi. Gerçekte bir düğümün komşusundan duyacağı şey topolojinin tamamı değildir. En yalın protokol ailesi komşudan yalnız tek bir şey duyar: komşunun her hedefe kaç adım uzakta olduğunu. Sonraki ders bu tek sayının nasıl yayıldığını, doğru tabloya kaç turda vardığını ve bu yalınlığın hangi kusuru getirdiğini ölçer.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.