Ders 05 / 20
Adres Dağıtımı Riskleri
Adres dağıtımının iddia cinsinden ölçülmesi: 14 ucun yanıt başına 5 iddia ile 70 iddiayı doğrulamadan kabul etmesi, ilk yanıt kuralının 7 ucu kanıtı olmayan bir kaynağa bağlaması, bağlantı noktası güveninin yanlış yapılandırmayı sıfırlayıp 2 ucu yapılandırmasız bırakması, havuz denetimi ile sabit ayırmanın aynı 12 ucu 3 elle kalemle doğru yapılandırıp 2 ucu yanlış bırakması.
İçindekiler
Önceki iki dersin ortak varsayımı, önbelleğe soru soran ucun kime soracağını zaten bildiğiydi. Ad çözümleyicinin adresi, ağ geçidinin adresi ve ucun kendi adresi verilmiş kabul edildi. Oysa bir uç ağa bağlandığında bunların hiçbirini bilmez.
Bilmediği için sorar, ve sorduğu anda elinde hiçbir ölçüt yoktur: hangi yanıtın yetkili bir kaynaktan geldiğini ayıramaz, çünkü ayırmasını sağlayacak yapılandırma tam da o yanıtla gelecektir. Kabul kuralı bu yüzden çok yalındır — ilk gelen yanıt kazanır. Bu kuralı kullanarak yetkili olmayan bir kaynağın yapılandırma dağıtmasına sahte adres dağıtım sunucusu (rogue DHCP server) denir. Bu ders o kuralı bir veri yapısı üzerinde koşturur ve tek bir yanıtın kaç iddiayı birden bağladığını sayar.
Bir Yanıt, Beş İddia
PG13: adres dağıtım yanıtı tek bir mesajda beş iddia taşır — adres, ağ geçidi, ad çözümleyici, kira süresi ve alan soneki — ve uç bunların hiçbirini sınamadan kabul eder. PG14: ucun kabul kuralı “ilk yanıt kazanır”dır; kaynağın kim olduğu kurala girmez. PG15: bir savunma yanıtı yalnız geliş yolundan ve içeriğinden süzebilir; kaynağın yetkili olup olmadığını gösteren bir kanıt mesajda yoktur.
PG13 bu dersi önceki ikisinden ayırır. Adres çözümlemede bozulan şey tek bir eşlemeydi, ad çözümlemede bir ad ve ona bağlı servislerdi. Burada tek bir kabul, ucun ağ üzerindeki bütün davranışını belirler: hangi adresi kullanacağını, çıkışını nereye vereceğini ve adları kime soracağını. Üçüncü iddia doğrudan bir önceki derse bağlanır — ad çözümleyici iddiası yanlış kabul edildiğinde, o ucun bütün ad kayıtları imzalı doğrulama olmadan yeniden sınanmamış olur.
Dört adımlı kiralama, kira süresi ve yenileme eşikleri ile aktarım aracısının rolü Ağ Modelleri ve Protokoller kursunda ölçüldü; burada tekrarlanmaz. Aşağıdaki dağıtım kümesi bir modeldir: kurgu bir şube bölütündeki uçlar ve yanıt gecikmeleri veri olarak yazılır, gerçek bir ağ ya da gerçek bir aygıt yoktur. Kümede hiçbir sahte dağıtım adımı bulunmaz; koşan kod ucun kabul kuralı ile bölüt savunmalarıdır. Kendi yönetimindeki bir bölütün dışında böyle bir ölçüm yapmak yazılı yetki ve tanımlı kapsam olmadan hem yasadışı hem meslek dışıdır.
// aglar/dagitim.mjs — kurgu bolgesel olcum agindaki bir sube bolutunde adres dagitimi // (model): gercek bir ag ve gercek bir aygit yok, adresler ozel bloktandir. Rastgelelik yok. // PG13: adres dagitim yaniti tek bir mesajda bes iddia tasir ve uc bunlarin hicbirini // sinamadan kabul eder. export const IDDIA = ["adres", "ag gecidi", "ad cozumleyici", "kira suresi", "alan soneki"]; // PG14: ucun kabul kurali "ilk yanit kazanir"dir; kaynagin kim oldugu kurala girmez. // Sutunlar: uc, a kaynagindan yanit gecikmesi (ms), b kaynagindan, c kaynagindan, // b yanitinin adresi yetkili havuzun icinde mi (e/h). "-" o kaynaktan yanit gelmedigidir. // a = bolutun yetkili dagiticisi (guvenilir baglanti noktasi), c = yedek yetkili dagitici // (guvenilmeyen baglanti noktasi), b = kaniti olmayan kaynak. export const UC = ` u01 40 12 - e u02 38 55 - e u03 45 20 - h u04 30 70 - e u05 50 18 - e u06 42 90 - h u07 36 22 - h u08 48 14 - e u09 33 60 - e u10 44 25 - e u11 39 80 - h u12 41 28 - h u13 - 95 30 e u14 - 45 26 e` .trim().split(/\s+/).reduce((l, _, i, a) => (i % 5 ? l : [...l, { uc: a[i], g: { a: a[i + 1], b: a[i + 2], c: a[i + 3] }, havuzda: a[i + 4] === "e", }]), []); // PG15: bir savunma yaniti yalnizca gelis yolundan ve iceriginden suzebilir; kaynagin // yetkili olup olmadigini gosteren bir kanit mesajda yoktur. export const SABIT = ["u05", "u08"]; export const PORT = 24; // bolut anahtarinda guven ayari yazilan baglanti noktasi sayisi export const YETKILI = ["a", "c"]; export function dagit(savunma = []) { const sonuc = UC.map((u) => { if (savunma.includes("sabit") && SABIT.includes(u.uc)) return { uc: u.uc, kaynak: "sabit", dogru: true }; const aday = Object.entries(u.g) .filter(([k, v]) => v !== "-" && !(savunma.includes("port") && k !== "a") && !(savunma.includes("havuz") && k === "b" && !u.havuzda)) .sort((x, y) => +x[1] - +y[1])[0]; return aday ? { uc: u.uc, kaynak: aday[0], dogru: YETKILI.includes(aday[0]) } : { uc: u.uc, kaynak: "-", dogru: false }; }); return { sonuc, yanlis: sonuc.filter((s) => s.kaynak === "b"), bos: sonuc.filter((s) => s.kaynak === "-"), redMesru: UC.filter((u) => u.g.c !== "-" && savunma.includes("port")).length, }; }
// aglar/dagitim-denetimi.mjs — bir dagitim yaniti kac iddia tasiyor, ilk yanitin kazanmasi // kac ucu hangi kaynaga bagliyor, savunma kacini kurtariyor ve bedeli ne. import { UC, IDDIA, SABIT, PORT, dagit } from "./dagitim.mjs"; const yaz = (g, ...s) => console.log(s.map((v, i) => (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join("")); const taban = dagit(), N = UC.length, I = IDDIA.length; console.log(`${N} uc, yanit basina ${I} iddia, toplam ${N * I} dogrulanmadan kabul edilen ` + `iddia; kaniti olmayan kaynagi secen uc ${taban.yanlis.length}, ` + `boyle kabul edilen iddia ${taban.yanlis.length * I}`); const A = [-6, 8, 8, 8, 11, 10]; console.log("\n1. ilk yanit kazanir: hangi kaynak kac ms ile kazandi"); yaz(A, "uc", "a (ms)", "b (ms)", "c (ms)", "b havuzda", "kazanan"); for (const u of UC) yaz(A, u.uc, u.g.a, u.g.b, u.g.c, u.havuzda ? "evet" : "hayir", taban.sonuc.find((s) => s.uc === u.uc).kaynak); const B = [-22, 10, 12, 17]; console.log("\n2. savunmalar: kurtarilan uc ve bedeli"); yaz(B, "savunma", "dogru uc", "yanlis uc", "yapilandirmasiz"); const C = [-22, 13, 11, 8]; const kur = [[], ["port"], ["havuz"], ["sabit"], ["havuz", "sabit"], ["port", "havuz", "sabit"]]; for (const s of kur) { const r = dagit(s); yaz(B, s.join(" + ") || "hicbiri", r.sonuc.filter((x) => x.dogru).length, r.yanlis.length, r.bos.length); } console.log("\n3. ayni savunmalarin bedeli"); yaz(C, "savunma", "yanlis iddia", "red mesru", "elle"); for (const s of kur) { const r = dagit(s); yaz(C, s.join(" + ") || "hicbiri", r.yanlis.length * I, r.redMesru, (s.includes("port") ? PORT : 0) + (s.includes("havuz") ? 1 : 0) + (s.includes("sabit") ? SABIT.length : 0)); } const D = [-22, -30, -1]; console.log("\n4. hangi uc kaliyor"); yaz(D, "savunma", "kaniti olmayan kaynagi secen", "yapilandirma alamayan"); for (const s of kur.slice(1)) { const r = dagit(s); yaz(D, s.join(" + "), r.yanlis.map((x) => x.uc).join(" ") || "yok", r.bos.map((x) => x.uc).join(" ") || "yok"); }
14 uc, yanit basina 5 iddia, toplam 70 dogrulanmadan kabul edilen iddia; kaniti olmayan kaynagi secen uc 7, boyle kabul edilen iddia 35 1. ilk yanit kazanir: hangi kaynak kac ms ile kazandi uc a (ms) b (ms) c (ms) b havuzda kazanan u01 40 12 - evet b u02 38 55 - evet a u03 45 20 - hayir b u04 30 70 - evet a u05 50 18 - evet b u06 42 90 - hayir a u07 36 22 - hayir b u08 48 14 - evet b u09 33 60 - evet a u10 44 25 - evet b u11 39 80 - hayir a u12 41 28 - hayir b u13 - 95 30 evet c u14 - 45 26 evet c 2. savunmalar: kurtarilan uc ve bedeli savunma dogru uc yanlis uc yapilandirmasiz hicbiri 7 7 0 port 12 0 2 havuz 10 4 0 sabit 9 5 0 havuz + sabit 12 2 0 port + havuz + sabit 12 0 2 3. ayni savunmalarin bedeli savunma yanlis iddia red mesru elle hicbiri 35 0 0 port 0 2 24 havuz 20 0 1 sabit 25 0 2 havuz + sabit 10 0 3 port + havuz + sabit 0 2 27 4. hangi uc kaliyor savunma kaniti olmayan kaynagi secen yapilandirma alamayan port yok u13 u14 havuz u01 u05 u08 u10 yok sabit u01 u03 u07 u10 u12 yok havuz + sabit u01 u10 yok port + havuz + sabit yok u13 u14
Sayılar ölçüm sınıfındadır; girdileri PG13–PG15’tir.
Yedi Uç, Otuz Beş İddia
On dört uç yanıt başına beş iddia kabul eder: toplam 70 iddia, hiçbirinin kanıtı yok. Savunma yokken bu uçların yedisi kanıtı olmayan bir kaynağın yanıtını alır ve o yanıtın beş iddiası da kabul edilir — 35 iddia. Yarısı.
Birinci tablo kazananı ms cinsinden verir ve kuralın ne kadar dar bir farkla işlediğini
gösterir. Yetkili dağıtıcının gecikmesi 30 ile 50 ms arasındadır; kanıtı olmayan kaynağınki 12
ile 90 ms arasında dağılır. Kazanma ölçütü kaynağın kim olduğu değil, yalnız bu iki sayının
hangisinin küçük olduğudur. u02 yetkili kaynağı 38 ms ile alır, u12 kanıtsız kaynağı 28 ms
ile alır ve ikisi arasındaki tek fark on milisaniyedir.
İki uç — u13 ve u14 — yetkili dağıtıcıdan hiç yanıt almaz ve yedek yetkili dağıtıcıyı
seçer. Bu iki satır sonraki bölümde savunmanın bedelini belirleyecek olan kalemdir: yedek
dağıtıcı meşrudur, ama güvenilmeyen bir bağlantı noktasındadır.
Tablonun üçüncü sütunu savunma tarafının görebileceği tek belirtiyi de taşır. Kanıtı olmayan kaynağı seçen yedi ucun gecikmeleri 12 ile 28 ms arasındadır; onu seçmeyen beş ucunki 55 ile 90 ms arasındadır. İki küme arasında hiçbir örtüşme yoktur ve aradaki boşluk 27 ms’dir. Yanıt gecikmelerinin tek tepeli değil iki tepeli dağılması, bölütte iki ayrı kaynağın yanıt verdiğinin sayılabilir işaretidir. Belirti kaynağın kim olduğunu söylemez; yalnız iki farklı yerden yanıt geldiğini söyler ve bu, dağıtım kayıtlarında aranabilecek somut bir niceliktir.
Üç Savunma, İki Farklı Sonuç
İkinci tablo üç savunmayı ayrı ayrı ve birlikte koşturur. Bağlantı noktası güveni yalnız
güvenilir bağlantı noktasından gelen yanıtları geçirir: yanlış yapılandırılan uç sayısı yediden
sıfıra iner. Doğru yapılandırılan uç sayısı ise on dörde değil on ikiye çıkar. Aradaki
iki uç, yedek yetkili dağıtıcıya bağlı olan u13 ve u14tür ve hiçbir yapılandırma alamaz.
Havuz denetimi yanıtın içeriğine bakar: yetkili havuzun dışında bir adres öneren yanıtı reddeder. Yedi yanlış ucun üçünü kurtarır, dördünü bırakır. Bırakılan dördü, havuzun içinden adres öneren yanıtlardır ve içerik denetimiyle ayırt edilemez. Sabit ayırma iki kritik ucu listeye alır ve o ikisini her koşulda kurtarır; kalan beşi bırakır. Sabit ayırmanın kapsamı, üçüncü dersteki sabit kayıt gibi, tam olarak listenin uzunluğu kadardır: iki kalem yazılır, iki uç kurtulur. Listeyi on dört uca genişletmek yanlış yapılandırmayı sıfırlar, ama o noktada dağıtım düzeneğinin kendisi kullanılmıyor demektir ve ağa eklenen her yeni uç bir elle kalem ister.
Beşinci satır bu dersin karşılaştırma noktasıdır. Havuz denetimi ile sabit ayırma birlikte on iki ucu doğru yapılandırır — bağlantı noktası güveninin tek başına ulaştığı sayının aynısı. Aynı sonuca iki ayrı yoldan varılır ve iki yolun bıraktığı artık birbirinden tümüyle farklıdır: biri iki ucu yanlış yapılandırır, öteki iki ucu hiç yapılandırmaz.
İki Artığın Bedeli
Üçüncü tablo bu iki yolun bedelini yan yana koyar. Bağlantı noktası güveni 24 elle kalem ister — bölüt anahtarındaki her bağlantı noktası için bir güven ayarı — ve iki meşru yanıtı reddeder. Havuz denetimi ile sabit ayırma birlikte üç elle kalem ister ve hiçbir meşru yanıtı reddetmez; karşılığında on iddia doğrulanmadan kabul edilmiş olarak kalır.
Yirmi dört kalem ile üç kalem arasındaki fark, ölçek büyüdükçe artan bir farktır: her yeni bağlantı noktası birinci yolda bir kalem ekler, ikinci yolda hiçbir şey eklemez. Buna karşılık ikinci yolun bıraktığı iki uç, ölçek büyüdükçe sayıca artar ve her biri beş iddia taşır.
Artıkların niteliği de farklıdır. Yapılandırma alamayan bir uç sessiz kalmaz: ağa hiç katılmaz, bu görülür ve giderilir. Yanlış yapılandırılan bir uç ise çalışır — trafiği akar, görevini yerine getirir ve beş iddiasının hiçbiri sınanmadığı için hiçbir kayıt bırakmaz. Bir savunmanın bıraktığı artığın görünür olup olmaması, sayısı kadar belirleyicidir.
Son satır üçünü birden açar ve yanlış yapılandırmayı sıfırlar. Bedeli 27 elle kalem ve iki reddedilen meşru yanıttır; iki uç yine yapılandırmasız kalır. Sabit ayırma bu birleşimde hiçbir şey eklemez, çünkü bağlantı noktası güveni onun kurtardığı iki ucu zaten kurtarmıştır — üçüncü dersteki üst üste konan savunma örneğinin aynısı.
Yanlış kabul edilen beş iddianın ağırlığı da eşit değildir. Üçüncü iddia — ad çözümleyici — bir önceki dersin bütün ölçümünü o uç için geçersiz kılar: on altı adın on altısı artık bu ucun sınamadığı bir kaynaktan gelir ve imzalı doğrulamanın kurtardığı üç kayıt da o kaynağın verdiği yanıtla değişir. Kira süresi iddiası ise en hafifidir; yalnız yanlış yapılandırmanın ne kadar süre yenilenmeden kalacağını belirler. Bir mesajda taşınan beş iddia tek bir sayı olarak sayılır, ama bedelleri aynı büyüklükte değildir; sıralama yapılırken hangi iddianın sonraki kaç ölçümü belirlediği yazılır.
Özet
- Adres dağıtım yanıtı tek mesajda 5 iddia taşır; 14 uç toplam 70 iddiayı sınamadan kabul eder ve bir uç için bu tek kabul adresini, çıkışını ve ad çözümleyicisini birden belirler.
- Kabul kuralı “ilk yanıt kazanır”dır: 7 uç kanıtı olmayan bir kaynağı seçer ve 35 iddia o kaynaktan gelir; kazanma farkı bazı uçlarda 10 ms kadardır.
- Bağlantı noktası güveni yanlış yapılandırmayı sıfırlar ama meşru bir yedek dağıtıcıya bağlı 2 ucu yapılandırmasız bırakır ve 24 elle kalem ister.
- Havuz denetimi ile sabit ayırma birlikte aynı 12 ucu doğru yapılandırır, 3 elle kalem ister, hiçbir meşru yanıtı reddetmez ve 2 ucu yanlış yapılandırılmış bırakır.
- İki artığın niteliği farklıdır: yapılandırma alamayan uç ağa katılmadığı için görülür, yanlış yapılandırılan uç çalıştığı için hiçbir kayıt bırakmaz.
Sonraki Adım
Şimdiye kadarki dört ders bir iddianın yanlış kabul edilmesini ölçtü: bozulan kayıt, yanlış adres, yanlış kaynak. Bütün bu ölçümlerde hedef servis ayaktaydı ve isteklere yanıt veriyordu. Oysa bir iddianın doğrulanmaması yalnız yanlış yanıt üretmez; hiç yanıt üretmemeye de yol açabilir. Bir bağlantı açma isteği kaynağını kanıtlamıyorsa, hedef o isteği tutmak için ayırdığı yeri kime ayırdığını bilmez ve yer biterse meşru istek de dışarıda kalır. Sonraki ders bunu kapasite aritmetiğiyle ölçer: kaç kaynaktan gelen istek eşiği aşıyor, durum tablosu kaç saniyede doluyor, hangi savunma hangi oranı düşürüyor ve o savunma meşru trafiğin kaçını da düşürüyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.