İçeriğe geç
academia.sh

Ders 10 / 17

Sınır Ağ Geçidi Protokolü

Otonom sistem sınırında karar en kısa yola değil politikaya bakar: transit yasağı kırk paketin kırkını da hedefine ulaştırır ama toplam adımı 83'ten 92'ye çıkarır, sınır duyurusu kapandığında 14 paket kara deliğe düşer, tek bir düğümün yol sızıntısı ise adımı 83'e geri indirip 7 paketi sözleşme dışı yoldan geçirir.

İçindekiler

Önceki iki ders iki yönlendirme ailesini yan yana koydu. Uzaklık vektörü komşusunun uzaklık dizisini öğreniyordu, bağlantı durumu topolojinin kendisini taşıyordu; turları farklıydı, ama ikisi de aynı şeyi arıyordu ve sonunda aynı tabloya varıyordu: her hedefe giden en kısa yolun ilk adımı.

Bu dersin sorusu tam buradan başlar. Ya en kısa yol istenmiyorsa? Bir ağ, komşusunun trafiğini taşımak zorunda değildir; taşıdığında bunun bir bedeli ve bir sözleşmesi vardır. Sınır ağ geçidi protokolünün ölçüsü bu yüzden en kısa yol değil izin verilen yoldur ve izin verilen yol çoğu zaman daha uzundur.

Sınır Bir Karar Sınırıdır

Otonom sistem kavramı İnternet Nasıl Çalışır kursunda kuruldu; tanımı burada tekrarlanmaz. Burada önemli olan şu ayrımdır: bir otonom sistemin içinde tablo bir ölçüye göre kurulur — adım sayısı, bağ maliyeti, gecikme. Sınırın ötesinde ölçünün yerini sözleşme alır.

Sınırdan geçen şey bir uzaklık değil bir duyurudur. Duyuru üç şey söyler: hangi hedefe gidildiği, o hedefe hangi otonom sistemler üzerinden gidildiği, ve bir sonraki düğümün kim olduğu. Komşu bu duyuruyu kabul edebilir, değiştirebilir ya da atabilir. Kabul ederse kendi tablosuna bir satır yazar; atarsa o hedefe giden bir yolu hiç öğrenmemiş olur.

Ve duyuruyu doğrulayan hiçbir şey yoktur. Uygulama Katmanı Protokolleri kursu bunu iletide yazan için söylemişti; sınırda aynı boşluk duyuru için geçerlidir. Komşu ne bildirirse tablo onu yazar.

Duyurunun yolu taşıması iki işi birden görür. Birincisi politikadır: alan taraf yolun ara konumuna bakarak duyuruyu kabul eder ya da atar; bu dersin ölçtüğü şey budur. İkincisi döngü saptamasıdır ve kursun üçüncü iddiasıyla doğrudan ilgilidir. Kurs boyunca döngü en az iki tablonun anlaşmazlığı olarak sayıldı; hiçbir cihaz tek başına bir paketi döngüye sokamıyordu, çünkü hiçbir cihaz kendi tablosundan öteye bakamıyordu. Sınırda durum değişir: duyuru yolun kendisini taşıdığı için bir otonom sistem, gelen duyurunun yolunda kendi adını görebilir. Gördüğü an duyuruyu atar. Döngünün tek bir tabloya bakılarak saptanabildiği yer burasıdır ve içeride karşılığı yoktur — uzaklık vektörü ailesinin sonsuza sayma kusuru tam olarak bu bilginin eksikliğinden doğar.

Kurgu: Üç Otonom Sistem

Kursun sekiz düğümlü ağı üç otonom sisteme bölünür. Bölünme fiziksel bağları değiştirmez; yalnızca hangi bağın sınır bağı olduğunu belirler.

# ogretilen dokum, calistirilmamistir

otonom sistem   düğümler    iç bağlar        sınır bağları
  kuzey         a b c d     a-b b-c c-d      d-e (orta), b-f (orta), h-a (güney)
  orta          e f         e-f              d-e (kuzey), b-f (kuzey), f-g (güney)
  güney         g h         g-h              f-g (orta), h-a (kuzey)

güney -> kuzey duyurusu           kuzey -> güney duyurusu
  hedef              g              hedef              c
  yol                güney          yol                kuzey
  bir sonraki düğüm  h              bir sonraki düğüm  a

orta -> kuzey duyurusu (güney'den öğrenilmiş, transit yasağıyla iletilmez)
  hedef              g
  yol                orta güney
  bir sonraki düğüm  f

Üçüncü duyuru dersin çekirdeğidir. Orta otonom sistemi güney’e giden bir yolu biliyor ve kuzey’e duyurabilir. Duyurursa kuzey ile güney arasındaki trafiği taşımayı üstlenmiş olur. Taşımayacaksa duyuruyu iletmez ve kuzey o yolu hiç öğrenmez.

İzin Verilen Yol

Bir yolun otonom sistem dizisi, düğüm dizisinin otonom sistemlere çevrilip yinelemelerin sıkıştırılmış hâlidir. g-f-b-c yolunun dizisi güney orta kuzey, g-h-a-b-c yolununki güney kuzey’dir.

Kural tek satırdır: bir otonom sistem transit taşımayacağını bildirdiğinde, dizinin ara konumunda onun bulunduğu her yol elenir. Baştaki ve sondaki otonom sistem ara konumda sayılmaz — kendi trafiğini taşımak transit değildir.

Sonuç g’den c’ye giden pakette görünür. En kısa yol g-f-b-c, üç adımdır ve ortadan geçer. Orta transit taşımıyorsa bu yol elenir; geriye kalan en kısa izin verilen yol g-h-a-b-c, dört adımdır. Yol bir adım uzadı, paket yine ulaştı. Ölçülen şey budur.

Ölçümün varsayımları:

  • YL61 — Sekiz düğüm, dokuz bağ: yedisi a–b–c–d–e–f–g–h–a halkasını kurar, sekizincisi halkayı kesen b–f kirişidir. Topoloji kurs boyunca aynıdır.
  • YL62 — Düğümler üç otonom sisteme bölünür: kuzey a b c d, orta e f, güney g h. Otonom sistemler numarayla değil kurgu adlarla anılır.
  • YL63 — Politika tek kuraldan ibarettir: transit yasağı. Kaynağın ve hedefin kendi otonom sistemi ara konumda sayılmaz.
  • YL64 — Kâhin değişmez; gerçek her zaman en kısa yolun ilk adımıdır. Politika tablosu ayrı bir tablodur ve ölçülen şey ikisinin farkıdır.
  • YL65 — Kırk kaynak–hedef çifti kurs çekirdeğinin üretecinden gelir. Aynı çift birden çok kez çıkabilir ve her çıkışı ayrı bir pakettir. Atlama sınırı 12.
  • YL66 — Sızıntı tek bir düğümün yasağı tutmamasıdır: f, orta otonom sisteminin transit taşımama sözüne karşın duyuruyu iletir. Öteki orta düğümü e sözü tutar.
  • YL67 — Kırk paketlik kümede ölçülebilen en küçük fark 1/40 = 0,025’tir; bundan küçük bir fark iddia edilmez.

Ölçüm

"""Politika tabanli yonlendirme: en kisa yol degil izin verilen yol."""
TOHUM = 20260810
DUGUMLER = "abcdefgh"
BAGLAR = [("a", "b"), ("b", "c"), ("c", "d"), ("d", "e"), ("e", "f"),
          ("f", "g"), ("g", "h"), ("h", "a"), ("b", "f")]
OS = {"a": "kuzey", "b": "kuzey", "c": "kuzey", "d": "kuzey",
      "e": "orta", "f": "orta", "g": "guney", "h": "guney"}
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 ciftler(sayi=40):
    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 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 tablo(tasimayan=(), kapali=(), sizdiran=()):
    """Her dugum icin her hedefe giden en kisa IZIN VERILEN yolun ilk adimi."""
    kom, t = komsuluk(BAGLAR), {}
    for u in DUGUMLER:
        for h in DUGUMLER:
            if u == h:
                continue
            yasak = {v for v in DUGUMLER if OS[v] in tasimayan
                     and OS[v] not in (OS[u], OS[h]) and v not in sizdiran}
            onceki, sira, gorulen = {}, [u], {u}
            while sira:
                yeni = []
                for x in sira:
                    for v in sorted(kom[x]):
                        if tuple(sorted((x, v))) in kapali or v in gorulen:
                            continue
                        if v in yasak and v != h:
                            continue
                        gorulen.add(v)
                        onceki[v] = x
                        yeni.append(v)
                sira = yeni
            if h not in onceki:
                continue
            adim = h
            while onceki[adim] != u:
                adim = onceki[adim]
            t[(u, h)] = adim
    return t


def ilet(kaynak, hedef, t):
    kom, u, yol, gecilen = komsuluk(BAGLAR), kaynak, [kaynak], []
    while u != hedef:
        if len(yol) > ATLAMA_SINIRI:
            return "dongu", yol
        s = t.get((u, hedef))
        if s is None or s not in kom[u]:
            return "kara delik", yol
        if (u, s) in gecilen:
            return "dongu", yol
        gecilen.append((u, s))
        u = s
        yol.append(u)
    return "ulasti", yol


def olc(t, tasimayan):
    sayim, adim, disi = {"ulasti": 0, "dongu": 0, "kara delik": 0}, 0, 0
    for x, y in ciftler():
        kader, yol = ilet(x, y, t)
        sayim[kader] += 1
        adim += len(yol) - 1
        if {OS[v] for v in yol[1:-1]} & (set(tasimayan) - {OS[x], OS[y]}):
            disi += 1
    return sayim, adim, disi


REJIM = (("politikasız", (), (), ()),
         ("orta taşımaz", ("orta",), (), ()),
         ("orta taşımaz, sınır kapalı", ("orta",), (("a", "h"),), ()),
         ("orta taşımaz, f sızdırıyor", ("orta",), (), ("f",)))
print(f"{'rejim':<28s} {'satır':>5s} {'ulaştı':>7s} {'döngü':>6s} "
      f"{'kara delik':>11s} {'adım':>5s} {'politika dışı':>14s}")
for ad, tas, kap, siz in REJIM:
    t = tablo(tas, kap, siz)
    s, a, d = olc(t, tas)
    print(f"{ad:<28s} {len(t):5d} {s['ulasti']:7d} {s['dongu']:6d} "
          f"{s['kara delik']:11d} {a:5d} {d:14d}")

temel, dar, sizan = tablo(), tablo(("orta",)), tablo(("orta",), (), ("f",))
print()
print(f"56 satırın politikayla ayrışanı "
      f"{sum(1 for k in temel if temel[k] != dar.get(k))}, "
      f"sızıntıyla ayrışanı {sum(1 for k in temel if temel[k] != sizan.get(k))}")
print(f"{'çift':>7s} {'paket':>6s} {'politikasız':>12s} {'politikalı':>11s}"
      f" {'sızıntıda':>10s}")
for x, y in sorted(set(ciftler())):
    y0, y1, y2 = (''.join(ilet(x, y, t)[1]) for t in (temel, dar, sizan))
    if y0 == y1 == y2:
        continue
    n = sum(1 for c in ciftler() if c == (x, y))
    print(f"{x+'->'+y:>7s} {n:6d} {y0:>12s} {y1:>11s} {y2:>10s}")
rejim                        satır  ulaştı  döngü  kara delik  adım  politika dışı
politikasız                     56      40      0           0    83              0
orta taşımaz                    56      40      0           0    92              0
orta taşımaz, sınır kapalı      40      26      0          14    48              0
orta taşımaz, f sızdırıyor      56      40      0           0    83              7

56 satırın politikayla ayrışanı 5, sızıntıyla ayrışanı 1
   çift  paket  politikasız  politikalı  sızıntıda
   b->g      2          bfg        bahg        bfg
   g->b      1          gfb        ghab        gfb
   g->c      2         gfbc       ghabc       gfbc
   g->d      2         gfed      ghabcd       gfed

Uzayan Yol Bir Kusur Değildir

İkinci satır dersin ana ölçüsüdür. Transit yasağı yürürlüğe girdiğinde tablo yine 56 satırdır, kırk paketin kırkı da ulaşır, döngü 0, kara delik 0. Değişen tek şey toplam adımdır: 83’ten 92’ye, dokuz adım.

Alt tablo dokuz adımın nereden geldiğini gösteriyor. Elli altı satırın yalnız 5’i ayrışıyor ve ölçülen kırk pakette bu ayrışma dört çifte, toplam yedi pakete dokunuyor. g->d yolu üç adımdan beşe çıkıyor, g->c üçten dörde, b->g ve g->b ikiden üçe. Öteki otuz üç paket politikayı hiç görmüyor, çünkü yolları zaten ara konumda ortadan geçmiyordu.

Bu ders kursun ölçü ekseniyle birlikte okunmalıdır. Ekseni belirleyen şey paketin kaderidir: ulaştı, döngü, kara delik. Politika bu üç sayının hiçbirini değiştirmedi. Kırk paketlik kümede ölçülebilen en küçük fark 0,025’tir ve buradaki kader farkı tam olarak sıfırdır. Adım, kaderin değil bedelin ölçüsüdür.

Bunun tersini söylemek de doğrudur: en kısa yol bir hedef değildir. Kiriş üzerinden geçen yol iki adım kısaydı, ama o kirişin iki ucu iki ayrı otonom sisteme aitti ve aradaki trafiği taşımanın bir bedeli vardı. Dokuz adım, o bedeli ödememenin karşılığıdır.

Politika Fazla Dar Kurulursa

Üçüncü satır ayrımı keskinleştiriyor. Bu rejimde transit yasağı duruyor ve buna ek olarak kuzey ile güney arasındaki h–a sınır bağı duyurulmuyor — iki komşu birbirine hiçbir hedef bildirmiyor.

Tablo 56 satırdan 40 satıra iniyor. Eksik kalan on altı satır için izin verilen yol yoktur: kuzey’den güney’e giden her yol ya ortadan geçer (yasak) ya da h–a’dan geçer (duyurulmuyor). Ölçümde bu 14 kara delik olarak görünüyor; kırk paketten yalnız 26’sı ulaşıyor.

Adım sayısının 92’den 48’e inmesi bir iyileşme değildir. Ölen paket adım harcamayı bırakır; düşük adım burada tam olarak kaybın göstergesidir. Aynı sayının iki rejimde iki ayrı şey söylemesi, tek bir sayaca bakmanın neden yetmediğinin de yanıtıdır.

Ayrım şudur: yolu uzatan politika bir kusur değildir; hedefi ulaşılamaz kılan politika kusurdur. İkisi de aynı dille yazılır, ikisinin de sözdizimi doğrudur, ikisi de hatasız yürürlüğe girer. Farkı yalnız ölçüm gösterir.

Yol Sızıntısı ve Daraltmalar

Dördüncü satır bir yapılandırma kusurunu ölçüyor. Yol sızıntısı, bir otonom sistemin bir komşusundan öğrendiği duyuruyu, sözleşmesi gereği iletmemesi gerekirken başka bir komşusuna iletmesidir. Burada f düğümü orta otonom sisteminin transit yasağını tutmuyor; e tutuyor. Yasağı bozan tek bir düğümdür.

Sonuç şaşırtıcı biçimde temiz görünüyor: 56 satır, 40 ulaştı, 0 döngü, 0 kara delik. Toplam adım 92’den 83’e iniyor. Elli altı satırın yalnız 1’i politikasız tablodan ayrılıyor — yani sızıntı, tabloyu bir satır kala politikasız hâline geri döndürüyor. Ve 7 paket ara konumda ortadan geçiyor: alt tablonun sağ sütunu bu yolları veriyor, bfg, gfb, gfbc, gfed.

Bu bir saldırı değil bir yapılandırma kusurudur: kural yazılmış, sözdizimi doğru, oturum ayakta, hiçbir alarm çalmıyor. Saldırı tarafı Ağ Güvenliği kursunun konusudur ve buraya taşınmaz. Sayılan yüzeyler ve her birini kapatan daraltma şunlardır.

Birinci yüzey — sözleşme dışı taşınan trafik. Yedi paket, taşınmayacağı bildirilmiş bir otonom sistemden geçiyor. Daraltma: bir komşudan öğrenilen duyurunun başka bir komşuya iletilmesi, komşu başına yazılmış bir önek süzgeciyle sınırlanır; süzgeçte olmayan önek duyurulmaz. İkinci daraltma, komşu başına duyuru sayısı üst sınırıdır — sızıntı çoğu kez duyuru sayısında ani bir artışla gelir ve sınır aşıldığında oturum kendiliğinden kapanır.

İkinci yüzey — sızıntının iyileşme gibi görünmesi. Adım 92’den 83’e indi, kaybolan paket yok, tablo satırı 56’da kaldı. Gecikmeye bakan bir sayaç iyileşme bildirir. Daraltma: izlenen şey adım değil otonom sistem dizisi olmalıdır; g->c yolunun dizisi güney kuzey beklenirken güney orta kuzey çıkıyor. Bu fark tabloda görünür, sayaçta görünmez.

Üçüncü yüzey — duyurunun doğrulanmaması. Duyuru “şu hedefe benden gidilir” der ve bunu doğrulayan bir şey yoktur. Daraltma: önekin sahibi ile duyurmaya yetkili otonom sistemi eşleştiren imzalı bir kayıt düzeni ve duyuruyu bu kayda karşı sınayan süzgeç. İkinci daraltma, kendi otonom sistemini yolunda taşıyan duyuruların reddedilmesidir — geri dönen duyuru bir döngü belirtisidir.

Dördüncü yüzey — fazla dar politika. Üçüncü rejimin 14 kara deliği bir yapılandırma kusurudur ve sızıntının tersidir. Daraltma: politika değişikliği yürürlüğe alınmadan önce her hedef için izin verilen yol sayısının sayılması; sayı sıfıra düşen hedef varsa değişiklik yayına alınmaz.

Özet

  • Otonom sistem sınırında karar ölçüden politikaya geçer; sınırdan geçen şey uzaklık değil duyurudur ve duyuruyu doğrulayan hiçbir şey yoktur.
  • Bir yol, otonom sistem dizisinin ara konumunda transit taşımayan bir otonom sistem bulunduğunda elenir; kaynağın ve hedefin kendi otonom sistemi ara konumda sayılmaz.
  • Transit yasağı kırk paketin kırkını da ulaştırır ve toplam adımı 83’ten 92’ye çıkarır; 56 satırın 5’i ayrışır, ayrışma dört çifte ve yedi pakete dokunur. Uzayan yol bir kusur değildir.
  • Sınır duyurusu kapandığında tablo 40 satıra iner ve 14 paket kara deliğe düşer; adımın 48’e inmesi kayıp göstergesidir, iyileşme değil.
  • Tek bir düğümün yol sızıntısı tabloyu politikasız hâline bir satır kala geri döndürür: adım 83’e iner, 7 paket sözleşme dışı yoldan geçer ve hiçbir sayaç bunu bildirmez.

Sonraki Adım

Bu derste politika tek bir tablonun içinde uygulandı: her düğümün bir tablosu vardı ve bir hedefin o tabloda tek bir satırı. Politika, o satırın hangi bir sonraki düğümü göstereceğini değiştirdi. Peki aynı cihazın birden çok tablosu olsaydı? Sonraki ders aynı adresin aynı cihazda iki ayrı karara gitmesini ölçer: tablo ayrıştırıldığında hangi paket hangi tabloya düşer, ayrı tablolar aynı bağları paylaştığında ne olur, ve örnek sayısı tutulan satır sayısını nasıl büyütür.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat