Ders 07 / 15
Sanal Özel Ağ
Adres alanı planlaması kalem kalem sayılır: önek uzunluğu taranınca kaç adres kullanılabilir kalıyor, kaçı ayrılmış, kaçı israf; dar seçim hangi dönemde büyümeyi durduruyor, geniş seçim hangi komşu bloklarla çakışıyor ve kurulduktan sonra değişmeyen bu kalemin bedeli kaç birim tutuyor.
İçindekiler
Makine kiralandı, imajı seçildi ve ölçeklenmesi bir gruba devredildi. Kiralanan her örneğin bir adresi var ve o adres bir yerden geliyor: örnekler açılmadan önce çizilmiş bir adres alanından. Sanal özel ağ, kiracıya ayrılan ve içinde adres dağıtımı kiracıya bırakılan alandır. Sağlayıcı iletim düzlemini, kiracılar arasındaki yalıtımı ve adres tahsis mekanizmasını üstlenir; blok, önek uzunluğu ve bloğun kurumun aralığındaki yeri yazana kalır.
Bu kalem ötekilerden bir yönüyle ayrılır. Yönlendirme kuralı yanlış yazılırsa düzeltilir, filtre kuralı gevşekse daraltılır — adres bloğu kurulduktan sonra değişmez. Sorulan üç şey var: bir blokta kaç adres gerçekten kullanılabilir, seçim hangi dönemde dar gelir ve dar geldiği gün ne kadar tutar.
- BA1. Sekiz dönemlik büyüme dizisi ve komşu blok listesi kurgusal bölgesel ölçüm ağına
aittir. Gerçek bir ağ kurulmuyor; ölçülen şey
nodeile kurulan modeldir. Adres aritmetiği gerçektir. - BA2. Bütün bloklar özel adres aralıklarından yazıldı; gerçek genel blok kullanılmıyor.
- BA3. Sağlayıcının her alt ağda beş adresi ayırdığı varsayıldı. Gerçekte bu sayı sağlayıcıya göre değişir; kullanılabilir adres sayısını kaydırır, yönünü değiştirmez.
- BA4. Büyüme dizisi elle yazıldı; rastgelelik yok, her koşum aynı sayıları üretir.
- BA5. Bedeller kurgu birim cinsindendir, para birimi değildir. Yolların birbirine oranını taşır, mutlak bir tutar bildirmez.
- BA6. Komşu blok listesi yediye indirgendi. Gerçekte bir kurumda kayıtlı blok sayısı çok daha yüksektir; çakışma sayısını büyütür, tarama mantığını değiştirmez.
Adres Alanı Modeli
Model üç şey tutuyor: bloğu adres aritmetiğiyle çözen birkaç işlev, aynı kurumda kayıtlı komşu bloklar ve ölçüm ağının sekiz dönemlik talebi. Talep satırı bir dönemde kaç alana yayıldığını, kaç katman kullandığını ve kaç örnek koştuğunu yazıyor; alt ağ sayısı bu ikisinin çarpımıdır.
// adres.mjs — adres alani plani modeli; gercek ag kurulmuyor, adres aritmetigi gercek export const toInt = (ip) => ip.split('.').reduce((a, o) => a * 256 + Number(o), 0); export const toIp = (n) => [16777216, 65536, 256, 1].map((b) => Math.floor(n / b) % 256).join('.'); export const blok = (c) => { const [ip, e] = c.split('/'); const onek = Number(e); const boyut = 2 ** (32 - onek); const bas = Math.floor(toInt(ip) / boyut) * boyut; // onek kisaldikca taban geriye kayar return { ad: `${toIp(bas)}/${onek}`, onek, boyut, bas, son: bas + boyut - 1 }; }; export const kesisir = (a, b) => a.bas <= b.son && b.bas <= a.son; // Ayni kurumun var olan bloklari (kurgu); hepsi ozel aralikta. export const KOMSU = [ ['merkez-salon', '10.0.0.0/16'], ['eski-olcum', '10.8.0.0/14'], ['laboratuvar', '10.32.0.0/16'], ['saha-gecici', '10.41.0.0/16'], ['olcut-arsivi', '10.42.128.0/17'], ['yedek-toplama', '10.44.0.0/14'], ['ortak-baglanti', '172.20.0.0/14'], ].map(([ad, c]) => ({ ...blok(c), ad })); export const CAPA = '10.42.0.0'; // planlayicinin yazdigi baslangic adresi export const KURUM = blok('10.32.0.0/12'); // kuruma ayrilan aralik; yeni ekipler buradan alir export const AYRILAN = 5; // saglayici her alt agda bes adres ayirir (BA3) // [donem, alan, katman, ornek] — kurgusal olcum aginin buyume dizisi (BA4) export const TALEP = [ [1, 2, 2, 18], [2, 2, 2, 26], [3, 3, 2, 44], [4, 3, 2, 71], [5, 3, 3, 118], [6, 3, 3, 196], [7, 4, 3, 340], [8, 4, 3, 612], ]; export const altAg = (t) => t[1] * t[2]; export const gerek = (t) => t[3] + t[1] + 2; // ornek + alan basina gecit + iki dengeleyici export const ayrilan = (t) => AYRILAN * altAg(t); export const kullanilan = (t) => gerek(t) + ayrilan(t); export const tasma = (b) => (TALEP.find((t) => kullanilan(t) > b.boyut) || [0])[0]; export const cakisan = (b) => KOMSU.filter((k) => kesisir(b, k)); export const TOPLAM_DILIM = KURUM.boyut / 4096; // kurum araliginda kac /20 dilimi var export const dilim = (b) => { // blogun tuttugu /20 dilimleri const s = new Set(); if (b.son < KURUM.bas || b.bas > KURUM.son) return s; const ilk = Math.floor((Math.max(b.bas, KURUM.bas) - KURUM.bas) / 4096); const sn = Math.floor((Math.min(b.son, KURUM.son) - KURUM.bas) / 4096); for (let i = ilk; i <= sn; i++) s.add(i); return s; }; export const KOMSU_DILIM = new Set(KOMSU.flatMap((k) => [...dilim(k)]));
blok işlevindeki taban hesabı modelin sessiz iddiasıdır: yazılan adres seçilen blok değildir.
Önek kısaldıkça taban hizalanmak için geriye kayar, yani 10.42.0.0 yazıp kısa bir önek vermek
başka bir yerden başlayan bir blok kurar. dilim ise ikinci bir eksen açıyor — bloğun kuruma
ayrılan aralıkta kaç dilim tuttuğunu sayıyor, çünkü alınan yer başka bir ekibe kalmıyor.
Önek Uzunluğu Taraması
// kosum1.mjs — onek uzunlugu taranir: kaci kullanilabilir, ne zaman tasar, kime carpar import { blok, CAPA, TALEP, altAg, gerek, ayrilan, kullanilan, tasma, cakisan, dilim, KOMSU_DILIM, TOPLAM_DILIM } from './adres.mjs'; const s = TALEP[TALEP.length - 1]; console.log(`donem-8 talebi: ${s[3]} ornek + ${s[1]} gecit + 2 dengeleyici = ${gerek(s)} adres; ` + `${altAg(s)} alt ag x 5 = ${ayrilan(s)} ayrilan; toplam ${kullanilan(s)}`); console.log(`${'blok'.padEnd(17)} ${'toplam'.padStart(8)} ${'kullanilabilir'.padStart(14)} ` + `${'tasma'.padStart(8)} ${'israf'.padStart(8)} ${'cakisan'.padStart(8)} ${'kalan /20'.padStart(10)} carptigi komsu`); for (const onek of [25, 24, 23, 22, 21, 20, 18, 16, 14, 12]) { const b = blok(`${CAPA}/${onek}`), t = tasma(b), c = cakisan(b); const yeni = new Set([...KOMSU_DILIM, ...dilim(b)]); console.log(`${b.ad.padEnd(17)} ${String(b.boyut).padStart(8)} ${String(b.boyut - ayrilan(s)).padStart(14)} ` + `${String(t ? `donem ${t}` : '-').padStart(8)} ${String(t ? '-' : b.boyut - kullanilan(s)).padStart(8)} ` + `${String(c.length).padStart(8)} ${String(TOPLAM_DILIM - yeni.size).padStart(10)} ${c.map((k) => k.ad).join(' ')}`.trimEnd()); }
donem-8 talebi: 612 ornek + 4 gecit + 2 dengeleyici = 618 adres; 12 alt ag x 5 = 60 ayrilan; toplam 678 blok toplam kullanilabilir tasma israf cakisan kalan /20 carptigi komsu 10.42.0.0/25 128 68 donem 5 - 0 151 10.42.0.0/24 256 196 donem 7 - 0 151 10.42.0.0/23 512 452 donem 8 - 0 151 10.42.0.0/22 1024 964 - 346 0 151 10.42.0.0/21 2048 1988 - 1370 0 151 10.42.0.0/20 4096 4036 - 3418 0 151 10.42.0.0/18 16384 16324 - 15706 0 148 10.42.0.0/16 65536 65476 - 64858 1 144 olcut-arsivi 10.40.0.0/14 262144 262084 - 261466 2 112 saha-gecici olcut-arsivi 10.32.0.0/12 1048576 1048516 - 1047898 4 0 laboratuvar saha-gecici olcut-arsivi yedek-toplama
Ayrılan altmış adres her satırda aynı, oranı değil: /25 bloğunda toplamın yüzde kırk yedisi
ayrılmışa gidiyor, /20 bloğunda yüzde bir buçuğu. Küçük blokta bölme düzeninin kendisi bloğun
yarısını yiyor ve bu yem hiçbir örneğe verilmiyor. Taşma sütunu dar tarafın bedelini veriyor:
/25 beşinci dönemde, /24 yedincide, /23 sekizincide duruyor. Sekizinci dönemin talebi altı
yüz yetmiş sekiz adres, /23 bloğunda beş yüz on iki adres var.
Sağ taraf ters yöndeki bedeli sayıyor. /16 bloğu tek komşuya çarpıyor ve o komşu tam olarak
10.42.128.0/17 — planlayıcının kendi ikinci sekizlisinin içinde oturan bir kalem. /14 yazmak
tabanı 10.40.0.0 adresine, /12 yazmak 10.32.0.0 adresine kaydırıyor; ikisinde de yazılan
adres kurulan bloğun başlangıcı değil. Kaydırma iki komşuyu daha içeri alıyor. Çakışan bir blok
eşlenemez: iki tarafta aynı adres iki makineye karşılık geldiği için eşleme reddedilir ve geriye
yalnız adres dönüştürme kalır.
Son sütun geniş seçimin görünmeyen bedelidir. Kuruma ayrılan aralıkta iki yüz elli altı dilim
var; komşular yüz dördünü tutuyor. /20 ve altındaki her seçim bir dilim alıp yüz elli birini
bırakıyor, /18 yüz kırk sekiz, /14 yüz on iki, /12 sıfır. Aynı gün başka bir ekip aynı
aralıktan blok isteyecek. Sıfır ile yüz elli bir arasındaki fark bugün hiçbir uyarı üretmez.
Tarama pencereyi kendisi çiziyor: /22 ile /18 arasında hem taşma yok hem çakışma yok. /20
sekizinci dönemde üç bin dört yüz on sekiz adres boş bırakıyor — bu israf bir maliyet kalemine
karşılık gelmiyor, yalnız bir dilim tutuyor. /23 ile arasındaki fark, kurulum gününde tek
karakterdir.
Dar Seçimin Bedeli
// kosum2.mjs — /23 secilmisti; tasma aninda uc cikis yolu kurgu birimle sayilir import { blok, CAPA, TALEP, altAg, kullanilan, tasma } from './adres.mjs'; const SECIM = blok(`${CAPA}/23`), GENIS = blok(`${CAPA}/20`); const t = tasma(SECIM), d = TALEP.find((x) => x[0] === t); console.log(`secilen blok ${SECIM.ad}: ${SECIM.boyut} adres, donem-1 talebi ${kullanilan(TALEP[0])} ` + `-> ${(SECIM.boyut / kullanilan(TALEP[0])).toFixed(1)}x pay, kurulum gunu hicbir sey soylemiyor`); console.log(`ayni gun ${GENIS.ad} yazmanin ek bedeli: 0 birim, 0 ek satir, 0 ek dakika`); console.log(`tasma donem ${t}: ${d[3]} ornek, ${altAg(d)} alt ag, ${kullanilan(d)} adres gerekiyor, ${SECIM.boyut} var\n`); // Bedeller kurgu "birim" (BA5); oranlari tasiyor, para birimi degil. const YOL = [ ['yeniden kurma', d[3] * 2 + altAg(d) * 15 + 5 * 40, 0, 0], ['ikinci ag + esleme', 120, 95, altAg(d)], ['adres donusturme katmani', 40, 60, 2], ]; const taban = YOL[0][1]; console.log(`${'cikis yolu'.padEnd(25)} ${'kurulum'.padStart(8)} ${'donem basi'.padStart(11)} ` + `${'kalici kalem'.padStart(13)} ${'6 donem'.padStart(8)} ${'yeniden kurmayi gectigi'.padStart(23)}`); for (const [ad, k, dn, kal] of YOL) { let n = 0; if (dn > 0) { n = 1; while (k + dn * n <= taban) n++; } console.log(`${ad.padEnd(25)} ${String(k).padStart(8)} ${String(dn).padStart(11)} ${String(kal).padStart(13)} ` + `${String(k + dn * 6).padStart(8)} ${String(n ? `donem ${n}` : '-').padStart(23)}`); }
secilen blok 10.42.0.0/23: 512 adres, donem-1 talebi 42 -> 12.2x pay, kurulum gunu hicbir sey soylemiyor ayni gun 10.42.0.0/20 yazmanin ek bedeli: 0 birim, 0 ek satir, 0 ek dakika tasma donem 8: 612 ornek, 12 alt ag, 678 adres gerekiyor, 512 var cikis yolu kurulum donem basi kalici kalem 6 donem yeniden kurmayi gectigi yeniden kurma 1604 0 0 1604 - ikinci ag + esleme 120 95 12 690 donem 16 adres donusturme katmani 40 60 2 400 donem 27
İkinci satır dersin ölçüsüdür. /23 yerine /20 yazmak kurulum gününde sıfır birim tutuyor:
aynı komut, aynı dakika, aynı satır sayısı. Birinci dönemde /23 bloğunda on iki kat pay
görünüyordu ve bu görüntü yedi dönem boyunca doğru kaldı. Sekizinci dönemde blok bitiyor ve
bitmesiyle birlikte üç yoldan biri seçilmek zorunda kalıyor.
Yeniden kurma bin altı yüz dört birim; altı yüz on iki örneği taşımak, on iki alt ağı yeniden kurmak ve kesintili bir pencere açmak. Tek seferliktir ve arkasında kalıcı kalem bırakmaz. İkinci ağ açıp eşlemek yüz yirmi birime kuruluyor ve toplantıda her seferinde bunu kazanır — altı dönem sonunda hâlâ altı yüz doksan birimde, yeniden kurmanın yarısından ucuz. Onaltıncı dönemde geçiyor. Adres dönüştürme katmanı daha da ucuz başlıyor ve yirmi yedinci dönemde geçiyor.
Kalıcı kalem sütunu asıl farkı taşıyor. İkinci ağ on iki kalıcı kalem bırakıyor: on iki yönlendirme tablosunun her birine yazılması ve bundan sonra her değişiklikte güncellenmesi gereken birer satır. Adres dönüştürme katmanının iki kalıcı kalemi satır değil özelliktir — iki taraf birbirini gerçek adresiyle göremez ve günlüklerde kaynak adres katmanın adresine dönüşür. Ertelemenin bedeli birim sayısında değil, bu iki sütunun ilerideki her derse taşınmasındadır.
Elde Kalan Karar
| Kalem | Kimde | Sonradan değişir mi |
|---|---|---|
| Adres bloğu ve önek uzunluğu | ekip | hayır |
| Bloğun kurum aralığındaki yeri | ekip | hayır |
| Alan sayısı | ekip | yalnız artar |
| Alt ağ sınırları | ekip | yalnız artar |
| Yönlendirme kuralları | ekip | evet |
| Filtre kuralları | ekip | evet |
| Ad çözümleme ve akış günlüğü | ekip | evet |
| Eşleme ve özel bağlantı | ekip | çakışma yoksa evet |
| Alt ağ başına ayrılan beş adres | sağlayıcı | — |
| Adres tahsis mekanizması | sağlayıcı | — |
| İletim düzlemi ve kiracı yalıtımı | sağlayıcı | — |
| Geçidin kendi yedekliliği | sağlayıcı | — |
On iki kalemin sekizi elde kalıyor, dördü devrediliyor. Devredilen dördü hiç sorulmuyor da
denebilir — ayrılan beş adres bir tercih değil, bir kesintidir ve /25 bloğunda toplamın yarısına
yaklaşır. Elde kalan sekizin dördü serbestçe değişiyor, ikisi yalnız büyüyebiliyor, ikisi
kurulduktan sonra hiç değişmiyor.
“Değişmez” burada bir yasak değil, bir bağımlılık yığınıdır. Blok yazıldığı andan sonra ona
dayanan üç kalem doğuyor: dağıtılmış adresler, o adreslere göre yazılmış yönlendirme kuralları ve
aynı adreslere göre yazılmış filtre kuralları. Bloğu genişletmek üçünü birden geçersiz kılar,
çünkü genişleme tabanı kaydırır — 10.42.0.0/23 bloğunu /20 yapmak yeni bir bloktur, aynı
bloğun büyümüş hâli değil. Kurumun kaydında da yer değiştirir ve o sırada komşuların hangisine
çarpacağı yeniden sorulmak zorunda kalır.
Geri alınamayan kalem bu iki satırdır: bloğun kendisi ve bloğun kurum aralığındaki yeri. Bu kursun öteki kalemleri yanlış yazıldığında bir kural düzeltilir; burada yanlış yazıldığında bin altı yüz dört birimlik bir taşıma ya da her yönlendirme tablosuna dokunan kalıcı bir ek yapı doğar. Kararın alındığı an, elde en az bilginin olduğu andır — birinci dönemde on sekiz örnek koşuyordu ve sekizinci dönemin altı yüz on iki örneği hiçbir yerde yazılı değildi.
Özet
- Sekizinci dönem talebi 618 adres artı 12 alt ağ için 60 ayrılmış adres. Aynı 60 adres
/25bloğunun yüzde 47’sini,/20bloğunun yüzde 1,5’ini yiyor; bölme düzeninin kesintisi küçük blokta blok kadar belirleyici. - Dar tarafın bedeli taşma dönemidir:
/25dönem 5’te,/24dönem 7’de,/23dönem 8’de duruyor. Geniş tarafın bedeli çakışmadır:/16bir,/14iki,/12dört komşu bloğa çarpıyor ve çakışan blok eşlenemez. - Kısa önek tabanı hizalamak için geriye kaydırıyor;
10.42.0.0yazıp/12vermek10.32.0.0adresinden başlayan bir blok kuruyor ve kuruma ayrılan 256 dilimin tamamını tutuyor./20bir dilim tutup 151 dilim bırakıyor. - Geri alınamayan kalem adres bloğu ve önek uzunluğudur. Kurulum gününde
/23yerine/20yazmak 0 birim tutuyor; sekizinci dönemde aynı fark yeniden kurmada 1.604 birim, ikinci ağda 120 birim artı dönem başına 95 birim ve 12 kalıcı yönlendirme satırı. - Ucuz görünen çıkış yolu kalıcı olanıdır: ikinci ağ 16. dönemde, adres dönüştürme katmanı 27. dönemde yeniden kurmanın toplamını geçiyor ve o zamana kadar doğrudan adreslemenin bitmiş olması geri alınmıyor.
Sonraki Adım
Blok seçildi ve içinde altı yüz yetmiş sekiz adreslik bir talep var — ama blok henüz tek parça. Adresler kullanılabilmek için bölünmek zorunda ve bölme düzeni yeni bir soru açıyor: her örnek dışarıdan doğrudan erişilebilir olmalı mı. Sonraki dersin sorusu bölmenin iki eksenini birden sayar: aynı blok az sayıda büyük parçaya ve çok sayıda küçük parçaya bölündüğünde kaç adres kullanılabilir kalıyor, alt ağ başına kesilen beş adres kaç parçada kaç yüz adres tutuyor ve bir alanın kaybı hangi düzende kaç örneği götürüyor — ve parçaların bir bölümünü dışarıya kapatmak doğrudan erişilebilir örnek sayısını kaça indirirken karşılığında hangi ek bileşeni zorunlu kılıyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.