Ders 05 / 17
Bağlantı Toplama
Akış başına dağıtım hiçbir akışı bölmez ve sırayı bozmaz ama bacak yükünü 0 ile 19 arasına dağıtır; çerçeve başına dağıtım yükü eşitler, 8 akışın 7'sini böler. Bir bacak düştüğünde modülüs yeniden eşlemesi 8 akışın 7'sini taşır, yerinde eşleme yalnız 3'ünü.
İçindekiler
Önceki ders yedekliliğe verilen ilk yanıtı ölçtü: fazladan bağ çekilir, protokol onu engeller, ve engellenen bağ kopma anına kadar bekler. Ölçümde dokuz bağın ikisi hiç veri taşımadı. Kapasitesi vardır, kablosu takılıdır, ve boştur.
Buradan doğal bir soru çıkar: iki bağ aynı anda kullanılamaz mı? Çevrim yasağı bunu yasaklıyor gibi görünür — iki bağ iki yol demektir, iki yol taşırılan çerçeveyi geri getirir ve döngü doğar. Bu dersin sorusu, yasağın nasıl aşıldığı ve aşmanın hangi yeni kararı gerektirdiğidir.
Tek Mantıksal Bağ
Bağlantı toplama (link aggregation), iki anahtar arasındaki birden çok fiziksel bacağı tek bir mantıksal bağ olarak sunmaktır. Kapsayan ağaç protokolü topolojiyi bu mantıksal bağlar üzerinden görür: dört bacak dört bağ değil, bir bağdır.
Bunun sonucu doğrudandır. Önceki dersin ölçümünde çevrim, iki anahtar arasındaki iki ayrı bağdan doğuyordu; toplama bu iki bağı bire indirdiği için ağaç bir çevrim görmez ve hiçbirini engellemez. Yasağı çiğneyen bir düzenek değildir; yasağın konusu olan çevrimi ortadan kaldıran bir düzenektir.
Taşırma da aynı görüntüye uyar. Yayın çerçevesi mantıksal bağa verilir ve yalnız bir bacaktan çıkar; karşı anahtar onu tek bir kopya olarak alır. Toplamanın en önemli kuralı burada belirir: gelen bir çerçeve, aynı toplamanın başka bir bacağından geri gönderilmez. Bu kural olmasaydı toplama, önceki dersin ölçtüğü çoğalmayı kendi içinde yeniden üretirdi.
Toplamanın kurulduğunun iki uçta da bilinmesi gerekir. Bacaklar bir uçta toplanmış, öbür uçta ayrı ayrı sayılmışsa, bir yanın tek bağ gördüğü yerde öbür yan birden çok bağ görür ve ağacın engelleme kararı iki uçta ayrı çıkar. Bu yüzden toplama, iki uç arasında bir denetim iletisiyle anlaşılarak kurulur; anlaşma sağlanamayan bacak toplamaya alınmaz ve ayrı bir bağ olarak bırakılır.
Dağıtım Kararı Akışa Bakar
Toplanmış bir bağa verilen her çerçeve için bir karar gerekir: hangi bacaktan çıkacak? En basit yanıt sırayla dağıtmaktır ve yükü en iyi dengeleyen yanıt da budur. Ama bir sorun vardır.
Bacaklar aynı kabloda değildir. Her birinin kendi kuyruğu, kendi uzunluğu, kendi anlık doluluğu vardır; iki bacak arasındaki gecikme farkı sıfır değildir. Aynı akışa ait iki çerçeve iki ayrı bacaktan gönderilirse, ikincisi birincisinden önce varabilir.
Bağlantı katmanı bunu düzeltemez. Önceki derste görüldüğü gibi Ethernet çerçevesinde atlama sayacı yoktur; sıra numarası da yoktur. Alıcı anahtar, elindeki iki çerçevenin hangisinin önce gönderildiğini bilemez ve onları yeniden sıralayamaz. Sırayı bozmamak, gönderen tarafın kararına kalır.
Sırasız teslimin bedeli üst katmanda ödenir. Ağ Modelleri kursundaki TCP dersinde kurulan düzenek sırasız gelen segmentleri yeniden sıralar, ama bunu tampon tutarak ve kimi durumda gereksiz yeniden iletim yaparak yapar; sıralamayı hiç beklemeyen bir uygulama ise veriyi bozulmuş sayar. Bu yüzden yaygın kural şudur: dağıtım kararı çerçeveye değil akışa bakar. Aynı akışın bütün çerçeveleri aynı bacaktan çıkar.
Akışın ne olduğu bir seçimdir. Yalnız donanım adresi çiftine bakan bir özet, iki anahtar arasındaki bütün trafiği tek bir akış sayar ve toplamayı hükümsüz bırakır; adres çiftine bağlantı noktalarını da katan bir özet akışı inceltir ve dengeyi iyileştirir. Ölçüm en kaba biçimi kullanır, çünkü ölçülen şey özetin inceliği değil kararın neye baktığıdır.
# ogretilen dokum, calistirilmamistir
toplama yapilandirmasi (anahtar 1 <-> anahtar 2)
mantiksal bag: t1
bacak 0 anlasti
bacak 1 anlasti
bacak 2 anlasti
bacak 3 anlasti
agacin gordugu: TEK bag
dagitim karari
akis basina : bacak = ozet(kaynak, hedef) mod bacak_sayisi
cerceve basina: bacak = sira_no mod bacak_sayisi
kural: bir toplamadan gelen cerceve ayni toplamanin
baska bir bacagindan geri gonderilmez.
Ölçümün Varsayımları
- AC30 — Dört bacaklı tek bir toplama vardır. Sekiz akış, ortak topolojinin düğüm adlarından tek bir üreteçle, tek modülüsle çekilir; kırk çerçevenin her biri ayrı bir üreteçle bu sekiz akıştan birine atanır. Kâhin akış–çerçeve eşlemesini biz kurduğumuz için bilinir.
- AC31 — Akış özeti, akışı tanımlayan adların karakter değerlerinin toplamıdır ve bacak numarası bu özetin bacak sayısına göre kalanıdır. Özetin inceliği ölçümün konusu değildir.
- AC32 — Bacak gecikmeleri eşit değildir ve sırasıyla 1, 2, 1, 3 birimdir. Her bacak birim zamanda bir çerçeve işler; bir çerçevenin varış anı, bacağın boşalma anına gecikmenin eklenmesiyle bulunur.
- AC33 — Bir çerçeve, aynı akışın kendisinden sonra gönderilmiş bir çerçevesinden sonra varıyorsa sırasız sayılır. Sıralama bağlantı katmanında düzeltilemez, çünkü çerçevede sıra numarası yoktur.
- AC34 — İki dağıtım şeması karşılaştırılır: akış başına ve çerçeve başına. Aynı kırk çerçeve ikisinde de kullanılır.
- AC35 — Kopma rejiminde 1 numaralı bacak düşer. Yeniden eşleme iki kuralla denenir: modülüs, bacak sayısı azaldığı için bütün akışları yeniden hesaplar; yerinde, yalnız düşen bacaktaki akışları taşır ve ötekilere dokunmaz.
- AC36 — Kopma 20. çerçevede olur ve dağıtım eşlemesi beş çerçeve sonra güncellenir. Bu pencerede düşen bacağa yazılmış çerçeveler kara delik sayılır: bacak yoktur, çerçeve bir yere varmaz ve kimse bildirmez.
- AC37 — Kümenin çözünürlüğü kırk çerçeve ve sekiz akıştır; çerçeve kümesinde ölçülebilen en küçük fark , akış kümesinde ’tir.
Ölçüm
"""Baglanti toplama: dagitim akisi bolmez, dusen bacak akis tasir.""" TOHUM = 20260810 DUGUMLER = ["a", "b", "c", "d", "e", "f", "g", "h"] BACAK, GECIKME = 4, (1, 2, 1, 3) DUSEN, KOPMA_ANI, PENCERE = 1, 20, 5 def uretec(tohum): d = tohum % 2147483646 + 1 def r(n): nonlocal d d = (d * 48271) % 2147483647 return d % n return r def akislar(sayi=8): r, liste = uretec(TOHUM), [] while len(liste) < sayi: x, y = DUGUMLER[r(8)], DUGUMLER[r(8)] if x != y and (x, y) not in liste: liste.append((x, y)) return liste def cerceveler(A, sayi=40): r = uretec(TOHUM + 1) return [{"no": i, "akis": A[r(8)]} for i in range(sayi)] def ozet(akis): return sum(ord(c) for c in akis[0] + akis[1]) def bacak(c, sema, bacaklar): n = len(bacaklar) return bacaklar[ozet(c["akis"]) % n if sema == "akış" else c["no"] % n] def varis(C): """Her bacak birim zamanda bir cerceve isler; gecikmeler esit degil.""" bos = {} for c in C: basla = max(c["no"], bos.get(c["bacak"], 0)) bos[c["bacak"]] = basla + 1 c["varis"] = basla + 1 + GECIKME[c["bacak"]] return C def sirasiz(C): enson, sayi = {}, 0 for c in sorted(C, key=lambda c: (c["varis"], c["no"])): if c["akis"] in enson and enson[c["akis"]] > c["no"]: sayi += 1 enson[c["akis"]] = max(enson.get(c["akis"], -1), c["no"]) return sayi A, TUM = akislar(), list(range(BACAK)) print(f"akış {len(A)} | çerçeve 40 | bacak {BACAK} | düşen bacak {DUSEN}") print() print(f"{'dağıtım':<8s} {'bacak yükü':>18s} {'en az':>5s} {'en çok':>6s} " f"{'bölünen akış':>12s} {'sırasız':>7s}") for sema in ("akış", "çerçeve"): C = cerceveler(A) for c in C: c["bacak"] = bacak(c, sema, TUM) varis(C) yuk = [sum(1 for c in C if c["bacak"] == b) for b in TUM] bolunen = sum(1 for a in A if len({c["bacak"] for c in C if c["akis"] == a}) > 1) print(f"{sema:<8s} {str(yuk):>18s} {min(yuk):5d} {max(yuk):6d} " f"{bolunen:12d} {sirasiz(C):7d}") print() KALAN = [b for b in TUM if b != DUSEN] C = cerceveler(A) eski = {a: bacak({"akis": a, "no": 0}, "akış", TUM) for a in A} mod = {a: bacak({"akis": a, "no": 0}, "akış", KALAN) for a in A} yerinde = {a: (KALAN[ozet(a) % len(KALAN)] if eski[a] == DUSEN else eski[a]) for a in A} olen = sum(1 for c in C if KOPMA_ANI <= c["no"] < KOPMA_ANI + PENCERE and eski[c["akis"]] == DUSEN) print(f"düşen bacaktaki akış {sum(1 for a in A if eski[a] == DUSEN)} | " f"{PENCERE} çerçevelik pencerede ölen çerçeve {olen}") print() print(f"{'yeniden eşleme':<16s} {'taşınan akış':>12s} {'yerinde kalan':>13s} " f"{'yeni yük':>14s}") for ad, yeni in (("modülüs", mod), ("yerinde", yerinde)): tasinan = sum(1 for a in A if yeni[a] != eski[a]) yuk = [sum(1 for c in C if yeni[c["akis"]] == b) for b in KALAN] print(f"{ad:<16s} {tasinan:12d} {len(A) - tasinan:13d} {str(yuk):>14s}")
akış 8 | çerçeve 40 | bacak 4 | düşen bacak 1 dağıtım bacak yükü en az en çok bölünen akış sırasız akış [0, 19, 5, 16] 0 19 0 0 çerçeve [10, 10, 10, 10] 10 10 7 2 düşen bacaktaki akış 3 | 5 çerçevelik pencerede ölen çerçeve 2 yeniden eşleme taşınan akış yerinde kalan yeni yük modülüs 7 1 [26, 14, 0] yerinde 3 5 [13, 11, 16]
Sıra ile Denge Arasında
Üst tablo iki dağıtım şemasını yan yana koyuyor ve ikisi de birer şey kazanıp birer şey kaybediyor.
Akış başına dağıtım vaadini tam olarak tutuyor: bölünen akış 0, sırasız varan çerçeve 0. Sekiz akışın hiçbiri iki bacağa yayılmıyor, bu yüzden bacak gecikmeleri eşit olmasa da sıra hiç bozulmuyor. Sırayı korumak için fazladan hiçbir düzenek gerekmiyor — karar zaten sırayı koruyor.
Bedeli yük sütununda duruyor ve küçük değil: bacaklar sırasıyla 0, 19, 5 ve 16 çerçeve taşıyor. Dört bacaklı bir toplamada bir bacak hiç kullanılmıyor, bir başkası kırk çerçevenin 19’unu tek başına çekiyor. Toplamanın vaat ettiği kapasite dörde katlanma değil, akışların özet değerlerinin nereye düştüğüne bağlı bir dağılımdır.
Çerçeve başına dağıtım yükü tam olarak eşitliyor: her bacak 10 çerçeve. Karşılığında sekiz akışın 7’si bölünüyor — sekizincisi bölünmüyor çünkü o akışın çerçeveleri zaten tek bir bacağa denk gelmiş. Bölünmenin bedeli 2 sırasız çerçevedir. Bu sayı kırk çerçevelik kümede 0,050’dir ve çözünürlüğün iki katıdır; ölçüm bandının içindedir ama küçüktür, çünkü bacak gecikmeleri arasındaki en büyük fark iki birimdir. Gecikme farkı büyüdükçe bu sayının büyüyeceği kurgudan okunur, ölçümden değil.
Örüntü şudur: dağıtım kararı ne kadar ince olursa denge o kadar iyi, sıra o kadar kırılgandır. İkisini birden veren bir kural yoktur, çünkü sırayı koruyan şey akışı bölmemektir ve dengeyi kuran şey bölmektir.
Kapasite Kimin
Yük sütununun okunmasının pratik bir sonucu vardır ve toplama hakkındaki en yaygın yanılgıyı kapatır. Dört bacaklı bir toplamanın toplam kapasitesi dört bacağın toplamıdır, ama tek bir akışın kapasitesi bir bacaktır. Akış bölünmediği için bölünemez; özet değeri onu hangi bacağa düşürmüşse, o akışın taşıyabileceği en çok veri o bacağın kapasitesidir.
Ölçüm bunu doğrudan gösteriyor: 19 çerçeve taşıyan bacak, tek başına o akışların tavanıdır ve boş duran bacak onlara hiçbir şey katmaz. Toplama, çok sayıda akışı olan bir bağı büyütür; tek bir büyük akışı olan bir bağı büyütmez. İki anahtar arasındaki trafik tek bir yedekleme aktarımından ibaretse, dört bacak çekmek bir bacak çekmekle aynı sonucu verir.
Bunun ikinci yüzü yedekliliktir. Aynı düzenek, aynı kablolarla iki ayrı şey satın alır: akışlar çok olduğunda kapasite, bir bacak düştüğünde ayakta kalma. Hangisinin ağır bastığı akış sayısına bağlıdır ve bu, ölçülebilen bir şeydir.
Bacakların hepsinin aynı anda taşıması zorunlu da değildir. Etkin–bekleyen düzenlemede bir bacak bütün trafiği taşır, ötekiler yalnız o düştüğünde devreye girer. Bu, dağıtım kararını tümüyle ortadan kaldırır: bölünen akış olmaz, sırasız çerçeve olmaz, denge sorunu olmaz. Karşılığında beklenen bacakların kapasitesi hiç kullanılmaz — önceki dersin engellenmiş bağıyla aynı durum, bu kez ağacın değil toplamanın kararıyla.
Bir Bacak Düştüğünde
Alt bölüm toplamanın asıl gerekçesine bakıyor. Bir bacak düştüğünde mantıksal bağ ayakta kalır; kapsayan ağaç bunu bir topoloji değişimi olarak görmez ve yeniden hesap yapmaz. Önceki derste ölçülen turlar burada hiç harcanmaz.
Harcanmayan tur, bedava bir devralma anlamına gelmez. Düşen bacakta 3 akış vardır ve dağıtım eşlemesi güncellenene kadar geçen beş çerçevelik pencerede 2 çerçeve kara deliğe düşer. Bacak yoktur, çerçeve bir yere varmaz, kimse bir hata bildirmez. Pencere uzadıkça bu sayı doğrusal büyür.
Asıl fark yeniden eşleme kuralında ortaya çıkıyor. Modülüs kuralı bacak sayısını dörtten üçe indirip bütün özetleri yeniden hesaplıyor ve sekiz akışın 7’sini taşıyor. Oysa taşınması gereken akış yalnız 3 tanedir; kalan dördü sağlam bacaklarda duruyordu ve hiçbir gerekçe olmadan yer değiştirdi. Her yer değiştiren akış, karşı taraftaki eşleştirme tablosunda yeni bir bacak demektir ve o tablonun tazelenmesini bekler.
Yerinde kural yalnız düşen bacaktaki 3 akışı taşıyor, beşini yerinde bırakıyor. Ve sonuç yalnız daha az iş değil, daha iyi bir dağılım: modülüs kuralı yükü 26, 14, 0 diye bölerken yerinde kural 13, 11, 16 veriyor. Bütün akışları yeniden hesaplamak dengeyi iyileştirmedi, bozdu — çünkü özet değerleri bacak sayısına göre kalan alındığında yeni bir kalıba düşer ve o kalıbın dengeli olacağının hiçbir güvencesi yoktur.
Sekiz akışlık kümede 7 ile 3 arasındaki fark 0,500’dür ve akış kümesinin çözünürlüğü olan 0,125’in dört katıdır. Sonuç genel bir kurala varır: bir kaynağın düşmesi, ona bağlı olmayan eşlemeleri değiştirmemelidir. Değiştirdiğinde ödenen bedel, arıza ile hiç ilgisi olmayan akışların da yeniden yerleşmesidir.
Özet
- Bağlantı toplama, birden çok bacağı tek bir mantıksal bağ yapar; kapsayan ağaç bir çevrim görmediği için hiçbir bacağı engellemez ve toplamanın kendi kuralı, gelen çerçevenin aynı toplamadan geri gönderilmesini yasaklar.
- Çerçevede sıra numarası yoktur; alıcı sıralayamaz, bu yüzden sırayı koruma yükümlülüğü dağıtım kararına düşer.
- Akış başına dağıtım 0 akış böler ve 0 sırasız çerçeve verir, ama yükü 0, 19, 5, 16 diye dağıtır; çerçeve başına dağıtım yükü 10’a eşitler, 7 akışı böler ve 2 sırasız çerçeve üretir.
- Bir bacak düştüğünde ağaç yeniden hesap yapmaz, ama eşleme güncellenene kadar geçen beş çerçevelik pencerede 2 çerçeve kara deliğe düşer.
- Modülüs yeniden eşlemesi taşınması gereken 3 akış yerine 7 akışı taşır ve yükü 26, 14, 0 yapar; yerinde eşleme 3 akış taşır ve 13, 11, 16 verir.
Sonraki Adım
Bu konudaki beş dersin ölçtüğü bütün kararlar tek bir ortak varsayımı paylaşıyordu: kaynak ile hedef aynı yerel ağın içindeydi. Anahtar hedefi kendi tablosunda arıyordu çünkü hedefin kendi bacaklarından birinde olması bekleniyordu; taşırma bir işe yarıyordu çünkü taşırılan çerçevenin hedefe ulaşma ihtimali vardı; bölütleme kara delik üretiyordu çünkü hedef başka bir alandaydı ve oraya giden bir yol tanımlanmamıştı. Her durumda hedef, ya doğrudan komşuydu ya da hiç yoktu.
Sonraki konu bu varsayımı kaldırır. Hedef başka bir ağdaysa, cihazın tablosunda o hedefin adresi hiçbir zaman bulunmayacaktır — çünkü hedef hiçbir bacağın arkasında değildir. Karar o zaman neye bakar, ve bakılan şey hangi tabloda durur?
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.