İçeriğe geç
academia.sh

Ders 09 / 21

Aktarımda Şifreleme

Aktarım şifrelemesi zorunlu kılındığında ne oluyor sayılır: 16 bağlantı bacağının 9'u açık, 4'ünün durumu bilinmiyor. Üç aşamalı zorlama 23 yapılandırma kalemi değiştiriyor ve 79 bağlantı kırıyor; 34'ü yükseltilemiyor. Altı yolun ancak biri uçtan uca kanıtlı hale geliyor, hepsi için kendi katmanında şifreleme gerekiyor.

İçindekiler

Beklemede duran veri için soru yanıtlandı. Veri hareket ettiğinde ise ortada bir kutu değil, bir zincir var: ölçüm ağının bir kaydı kenar cihazdan alım ucuna, oradan ağ geçidine, toplayıcıya ve veritabanına gidiyor; her sıçrama ayrı bir bacak ve her bacağın kendi durumu var. Bu dersin sorusu el sıkışmanın maliyeti değil — o ölçüm daha önce yapıldı — şifrelemenin hangi noktada sonlandığı da değil; o da ölçüldü. Buranın sorusu zorunlu kılmaktır: hangi bacaklar şifreli, hangileri “iç ağ” gerekçesiyle açık bırakılmış, politikayla zorunlu kılınınca kaç bağlantı kırılıyor ve kaç kalem yapılandırma değişiyor.

Üçüncü bir durum daha var: sağlayıcının kendi ağı içindeki taşımanın şifreli olup olmadığı kiracı tarafından doğrulanamaz. O bacaklar “bilinmiyor” olarak durur, sağlayıcının varsayılanı bir varsayım olarak yazılır ve bilinmiyor olmanın kendisi bir kalem sayılır. Ölçüm bölgesel ölçüm ağı üzerindedir, kurgudur ve node ile yazılmış bir modeldir.

BG7. Veri yolu 16 bağlantı bacağına ayrılır; bacak kataloğu, istemci sayıları, yapılandırma kalemleri ve istek hacimleri kurgudur. BG8. Her bacak üç ağ türünden birindedir: genel ağ, özel hat, sağlayıcı içi ağ. BG9. Bacağın durumu üç değerlidir — şifreli, açık, bilinmiyor. Üçüncü değer yalnız sağlayıcı içi taşıma için kullanılır ve doğrulanamaz. BG10. Her açık bacakta şifrelemeyi desteklemeyen istemci sayısı ve bunların kaçının yükseltilebildiği yazılıdır; yükseltilemeyen istemci zorlamada kalıcı olarak kırılır. BG11. Zorlama üç aşamadadır: önce genel ağ, sonra özel hat, sonra sağlayıcı içi ağ. Geçiş penceresi 90 gündür (kurgu) ve uyarı modunda 61 gün geçmiştir. BG12. “Bilinmiyor” bacakların şifreli olduğu ancak kiracının kendi katmanında şifreleme yapmasıyla kanıtlanabilir; bunun yapılandırma bedeli bacak başına yazılıdır.

Bacaklar, Yollar ve Aşamalı Zorlama

// bacak.mjs — aktarim bacaklari, yollar ve asamali zorlama. MODELDIR.
// Bolgesel olcum agi KURGUDUR: bacak katalogu, istemci sayilari ve istek hacimleri uydurmadir.
// durum "bilinmiyor" = saglayici ici tasima; kiraci dogrulayamaz, VARSAYIM olarak durur.
export const BACAK = [
  // id, ad, ag, durum, istemci, destekmeyen, yapKalemi, istekBin, kanitKalemi, yukseltilebilir
  ["b1", "kenar cihaz -> alim ucu", "genel", "acik", 340, 54, 3, 4820, 0, 38],
  ["b2", "alim ucu -> ag gecidi", "saglayici-ici", "sifreli", 6, 0, 1, 4820, 0, 0],
  ["b3", "ag gecidi -> toplayici", "saglayici-ici", "bilinmiyor", 12, 0, 2, 4820, 4, 0],
  ["b4", "toplayici -> veritabani", "saglayici-ici", "acik", 12, 0, 4, 1960, 0, 0],
  ["b5", "toplayici -> kuyruk", "saglayici-ici", "acik", 12, 2, 2, 3100, 0, 2],
  ["b6", "isleyici -> kuyruk", "saglayici-ici", "acik", 9, 0, 2, 3100, 0, 0],
  ["b7", "isleyici -> nesne deposu", "saglayici-ici", "bilinmiyor", 9, 0, 1, 640, 3, 0],
  ["b8", "isleyici -> onbellek", "saglayici-ici", "acik", 9, 9, 2, 5400, 0, 0],
  ["b9", "servis -> gunluk toplayici", "saglayici-ici", "acik", 21, 0, 3, 8900, 0, 0],
  ["b10", "gunluk toplayici -> arsiv", "saglayici-ici", "bilinmiyor", 2, 0, 1, 190, 2, 0],
  ["b11", "arsiv -> ikincil bolge", "saglayici-ici", "bilinmiyor", 2, 0, 1, 190, 2, 0],
  ["b12", "fatura ihraci -> mutabakat", "genel", "sifreli", 1, 0, 1, 12, 0, 0],
  ["b13", "is ortagi beslemesi -> alim", "genel", "acik", 7, 3, 2, 260, 0, 1],
  ["b14", "operator -> yonetim ucu", "genel", "sifreli", 20, 0, 1, 45, 0, 0],
  ["b15", "yonetim ucu -> servis", "saglayici-ici", "acik", 20, 0, 3, 45, 0, 0],
  ["b16", "olcum agi bakim kanali", "ozel-hat", "acik", 28, 11, 2, 70, 0, 4],
].map(([id, ad, ag, durum, istemci, kirilan, yap, istek, kanit, yuk]) =>
  ({ id, ad, ag, durum, istemci, kirilan, yap, istek, kanit, yuk }));

export const YOL = {                                      // bir istegin gectigi bacak dizisi
  "olcum alimi": ["b1", "b2", "b3", "b4"],
  "ozet uretimi": ["b5", "b6", "b7"],
  "gunluk akisi": ["b9", "b10", "b11"],
  "fatura ihraci": ["b4", "b7", "b12"],
  "yonetim erisimi": ["b14", "b15"],
  "is ortagi alimi": ["b13", "b3", "b4"],
};
export const bul = (id) => BACAK.find((b) => b.id === id);
export const AG = ["genel", "ozel-hat", "saglayici-ici"];  // zorlama asamalarinin sirasi
export const PENCERE = 90, GECEN = 61;                     // kurgu gecis penceresi, gun

const top = (l, f) => l.reduce((a, b) => a + f(b), 0);
const B = [26, 7, 9, 10, 12, 13, 15];
export const yz = (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))
  .join("");

if (import.meta.url === `file://${process.argv[1]}`) {
  console.log(`model: ${BACAK.length} bacak, ${Object.keys(YOL).length} yol, ` +
    `${top(BACAK, (b) => b.istek)} bin istek/gun (kurgu)`);
  console.log("\n" + yz(["ag turu", "bacak", "sifreli", "acik", "bilinmiyor", "istemci",
    "istek(bin)"]));
  for (const a of AG) {
    const l = BACAK.filter((b) => b.ag === a);
    const s = (d) => l.filter((b) => b.durum === d).length;
    console.log(yz([a, l.length, s("sifreli"), s("acik"), s("bilinmiyor"),
      top(l, (b) => b.istemci), top(l, (b) => b.istek)]));
  }

  // asamali zorlama: her asamada o ag turundeki acik bacaklar sifreye cekilir.
  const durum = new Map(BACAK.map((b) => [b.id, b.durum]));
  console.log("\n" + yz(["asama", "bacak", "yap.kal.", "kirilan", "istek(bin)", "kalan acik",
    "bilinmiyor"]));
  const satir = (ad, l) => {
    for (const b of l) durum.set(b.id, "sifreli");
    console.log(yz([ad, l.length, top(l, (b) => b.yap), top(l, (b) => b.kirilan),
      top(l, (b) => b.istek), [...durum.values()].filter((d) => d === "acik").length,
      [...durum.values()].filter((d) => d === "bilinmiyor").length]));
  };
  satir("0. uyari modu", []);
  for (const a of AG) satir(`${AG.indexOf(a) + 1}. ${a}`,
    BACAK.filter((b) => b.ag === a && durum.get(b.id) === "acik"));

  // yol basina uctan uca: bir yolun her bacagi sifreliyse yol kanitli sayilir.
  const yolSatir = (ad, d) => {
    const l = YOL[ad].map(bul);
    const say = (x) => l.filter((b) => d(b) === x).length;
    console.log(yz([ad, l.length, say("sifreli"), say("acik"), say("bilinmiyor"),
      say("bilinmiyor") === 0 && say("acik") === 0 ? "kanitli" : "hayir",
      top(l.filter((b) => d(b) !== "sifreli"), (b) => b.istek)]));
  };
  console.log("\n" + yz(["yol (zorlamadan once)", "bacak", "sifreli", "acik", "bilinmiyor",
    "uctan uca", "kanitsiz(bin)"]));
  for (const ad of Object.keys(YOL)) yolSatir(ad, (b) => b.durum);
  console.log("\n" + yz(["yol (uc asama sonrasi)", "bacak", "sifreli", "acik", "bilinmiyor",
    "uctan uca", "kanitsiz(bin)"]));
  for (const ad of Object.keys(YOL)) yolSatir(ad, (b) => durum.get(b.id));
}
model: 16 bacak, 6 yol, 38372 bin istek/gun (kurgu)

ag turu                     bacak  sifreli      acik  bilinmiyor      istemci     istek(bin)
genel                           4        2         2           0          368           5137
ozel-hat                        1        0         1           0           28             70
saglayici-ici                  11        1         6           4          114          33165

asama                       bacak yap.kal.   kirilan  istek(bin)   kalan acik     bilinmiyor
0. uyari modu                   0        0         0           0            9              4
1. genel                        2        5        57        5080            7              4
2. ozel-hat                     1        2        11          70            6              4
3. saglayici-ici                6       16        11       22505            0              4

yol (zorlamadan once)       bacak  sifreli      acik  bilinmiyor    uctan uca  kanitsiz(bin)
olcum alimi                     4        1         2           1        hayir          11600
ozet uretimi                    3        0         2           1        hayir           6840
gunluk akisi                    3        0         1           2        hayir           9280
fatura ihraci                   3        1         1           1        hayir           2600
yonetim erisimi                 2        1         1           0        hayir             45
is ortagi alimi                 3        0         2           1        hayir           7040

yol (uc asama sonrasi)      bacak  sifreli      acik  bilinmiyor    uctan uca  kanitsiz(bin)
olcum alimi                     4        3         0           1        hayir           4820
ozet uretimi                    3        2         0           1        hayir            640
gunluk akisi                    3        1         0           2        hayir            380
fatura ihraci                   3        2         0           1        hayir            640
yonetim erisimi                 2        2         0           0      kanitli              0
is ortagi alimi                 3        2         0           1        hayir           4820

İlk tablo bir kalıbı hemen ele veriyor: genel ağdaki 4 bacağın 2’si şifreli, sağlayıcı içi 11 bacağın yalnız 1’i. Şifreleme dışarıya bakan yüzde uygulanmış, içeride uygulanmamıştır — gerekçe yazılıdır: “iç ağ”. O gerekçenin taşıdığı hacim sayılıdır: sağlayıcı içi bacaklardan günde 33.165 bin istek geçiyor, toplamın yüzde seksen altısı.

Aşama tablosu faturayı üçe bölüyor. Genel ağ aşaması ucuzdur — 2 bacak, 5 yapılandırma kalemi — ama 57 bağlantı kırar, çünkü kenar cihazların 54’ü ve iş ortağı beslemesinin 3 istemcisi şifreli aktarımı desteklemiyor. Özel hat aşaması 1 bacak, 2 kalem, 11 kırık. Sağlayıcı içi aşama en pahalısıdır: 6 bacak, 16 kalem ve günde 22.505 bin isteğin yolu; kırdığı bağlantı ise yalnız 11’dir. Dağılım sezgiye ters çıkıyor — en çok yapılandırma değiştiren aşama, en az bağlantı kıran aşamadır.

Yol tabloları asıl cümleyi kuruyor. Zorlamadan önce altı yolun hiçbiri uçtan uca şifreli değil. Üç aşamadan sonra da yalnız biri kanıtlı hale geliyor: yönetim erişimi, çünkü geçtiği iki bacak da doğrulanabilir. Kalan beş yol en az bir “bilinmiyor” bacak taşıdığı için kanıtlanamıyor. Kanıtsız hacim 11.600’den 4.820 bin isteğe düşüyor ama sıfırlanmıyor; sebebi tek bir bacaktır — ağ geçidiyle toplayıcı arasındaki sıçrama, ölçüm alımının ve iş ortağı alımının ortak parçası.

Zorunlu Kılmanın Defteri

// kirilan.mjs — zorunlu kilmanin defteri: kirilan baglanti, kalici kirik, istisna ve kanit bedeli.
import { BACAK, YOL, PENCERE, GECEN } from "./bacak.mjs";

const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))
  .join("");
const yz = gen([28, 9, 11, 10, 8, 10, 12]);               // kirilan baglanti tablosu
const yk = gen([27, 10, 14, 11, 13, 13, 15]);              // karar tablosu
const SINIR = 2;                                          // kurgu politika: kalici istisna tavani

const top = (l, f) => l.reduce((a, b) => a + f(b), 0);
const ACIK = BACAK.filter((b) => b.durum === "acik");
const BILINMIYOR = BACAK.filter((b) => b.durum === "bilinmiyor");
const kalici = (b) => b.kirilan - b.yuk;

console.log(yz(["kirilan bacak", "istemci", "destekmez", "yukselir", "kalici", "yap.kal.",
  "istek(bin)"]));
for (const b of ACIK.filter((x) => x.kirilan > 0))
  console.log(yz([b.ad, b.istemci, b.kirilan, b.yuk, kalici(b), b.yap, b.istek]));
console.log(yz(["toplam", top(ACIK, (b) => b.istemci), top(ACIK, (b) => b.kirilan),
  top(ACIK, (b) => b.yuk), top(ACIK, kalici), top(ACIK, (b) => b.yap), top(ACIK, (b) => b.istek)]));

// Bir karar: hangi bacaklar zorlanir, hangileri kendi katmaninda sifrelenir, vekil kurulur mu.
const degerlendir = (zorlanan, kendi, vekil) => {
  const d = new Map(BACAK.map((b) => [b.id, b.durum]));
  let kirik = 0, yap = 0;
  for (const b of BACAK) {
    if (zorlanan.has(b.id)) { d.set(b.id, "sifreli"); yap += b.yap; kirik += vekil ? 0 : kalici(b); }
    if (kendi.has(b.id)) { d.set(b.id, "sifreli"); yap += b.kanit; }
  }
  if (vekil) yap += 3 * BACAK.filter((b) => zorlanan.has(b.id) && kalici(b) > 0).length;
  const kanitli = Object.values(YOL)
    .filter((y) => y.every((id) => d.get(id) === "sifreli")).length;
  const kanitsiz = top(BACAK.filter((b) => d.get(b.id) !== "sifreli"), (b) => b.istek);
  return { kirik, yap, kanitli, kanitsiz,
    istisna: BACAK.filter((b) => b.durum === "acik" && !zorlanan.has(b.id)).length };
};

const id = (l) => new Set(l.map((b) => b.id));
const bos = new Set();
const muaf = ACIK.filter((b) => kalici(b) > 0);            // kalici kirik ureten bacaklar
const KARAR = {
  "0 uyari modu": [bos, bos, false],
  "1 zorlama, istisnasiz": [id(ACIK), bos, false],
  "2 zorlama + vekil katman": [id(ACIK), bos, true],
  "3 vekil + kendi sifrelemen": [id(ACIK), id(BILINMIYOR), true],
  "4 zorlama + istisna": [id(ACIK.filter((b) => kalici(b) === 0)), bos, false],
};
console.log("\n" + yk(["karar", "zorlanan", "kalici kirik", "muaf acik", "kanitli yol", "ek yap.kal.",
  "kanitsiz(bin)"]));
for (const [ad, [z, k, v]] of Object.entries(KARAR)) {
  const s = degerlendir(z, k, v);
  console.log(yk([ad, z.size, s.kirik, s.istisna, `${s.kanitli}/${Object.keys(YOL).length}`,
    s.yap, s.kanitsiz]));
}

const acikIstek = top(ACIK, (b) => b.istek);
console.log(`\ngecis penceresi: ${PENCERE} gun, ${GECEN} gun gecti, ${PENCERE - GECEN} gun kaldi; ` +
  `uyari modunda gecen surede ${acikIstek * GECEN} bin istek acik bacaktan gecti`);
console.log(`kalici istisna siniri ${SINIR} bacak (kurgu politika); istenen ${muaf.length}, ` +
  `${muaf.length - SINIR} bacak sinirin disinda`);
console.log(`istemci yukseltmesi: ${top(ACIK, (b) => b.yuk)} istemci, ` +
  `${ACIK.filter((b) => b.yuk > 0).length} bacakta; geri kalan ${top(ACIK, kalici)} istemci ` +
  `yukseltilemiyor`);
console.log(`\nbilinmiyor kalemi: ${BILINMIYOR.length} bacak, ` +
  `${top(BILINMIYOR, (b) => b.istek)} bin istek/gun, kanit bedeli ` +
  `${top(BILINMIYOR, (b) => b.kanit)} yapilandirma kalemi`);
for (const b of BILINMIYOR)
  console.log(`  ${b.ad.padEnd(26)} ${String(b.istek).padStart(6)} bin/gun, ` +
    `kanit ${b.kanit} kalem, varsayim: saglayici ici tasima sifreli`);
kirilan bacak                 istemci  destekmez  yukselir  kalici  yap.kal.  istek(bin)
kenar cihaz -> alim ucu           340         54        38      16         3        4820
toplayici -> kuyruk                12          2         2       0         2        3100
isleyici -> onbellek                9          9         0       9         2        5400
is ortagi beslemesi -> alim         7          3         1       2         2         260
olcum agi bakim kanali             28         11         4       7         2          70
toplam                            458         79        45      34        23       27655

karar                        zorlanan  kalici kirik  muaf acik  kanitli yol  ek yap.kal.  kanitsiz(bin)
0 uyari modu                        0             0          9          0/6            0          33495
1 zorlama, istisnasiz               9            34          0          1/6           23           5840
2 zorlama + vekil katman            9             0          0          1/6           35           5840
3 vekil + kendi sifrelemen          9             0          0          6/6           46              0
4 zorlama + istisna                 5             0          4          1/6           14          16390

gecis penceresi: 90 gun, 61 gun gecti, 29 gun kaldi; uyari modunda gecen surede 1686955 bin istek acik bacaktan gecti
kalici istisna siniri 2 bacak (kurgu politika); istenen 4, 2 bacak sinirin disinda
istemci yukseltmesi: 45 istemci, 4 bacakta; geri kalan 34 istemci yukseltilemiyor

bilinmiyor kalemi: 4 bacak, 5840 bin istek/gun, kanit bedeli 11 yapilandirma kalemi
  ag gecidi -> toplayici       4820 bin/gun, kanit 4 kalem, varsayim: saglayici ici tasima sifreli
  isleyici -> nesne deposu      640 bin/gun, kanit 3 kalem, varsayim: saglayici ici tasima sifreli
  gunluk toplayici -> arsiv     190 bin/gun, kanit 2 kalem, varsayim: saglayici ici tasima sifreli
  arsiv -> ikincil bolge        190 bin/gun, kanit 2 kalem, varsayim: saglayici ici tasima sifreli

Kırılan bağlantı tablosu tek bir sayıyı ayırıyor: 79 istemci şifreli aktarımı desteklemiyor, 45’i yükseltilebiliyor ve 34’ü yükseltilemiyor. En sert satır önbellek bacağıdır: 9 istemcinin 9’u da desteklemiyor, hiçbiri yükseltilemiyor ve o bacak günde 5.400 bin istek taşıyor. İkincisi kenar cihazlarıdır: 54 cihazın 16’sı sahada duran, yazılımı değişmeyen donanım.

Karar tablosu beş yolu yan yana koyuyor. Uyarı modu hiçbir şey kırmaz ve hiçbir şeyi kanıtlamaz; 61 günde açık bacaklardan 1.686.955 bin istek geçmiştir ve bu geriye dönük kapatılamaz. İstisnasız zorlama 23 kalem değiştirir ve 34 bağlantıyı kalıcı koparır. Vekil katman kırığı sıfırlar, 12 kalem ekler: 35. Bu üç kararın hiçbiri kanıtlı yolu 1/6’nın üstüne çıkarmaz; çıkaran tek satır dördüncüsüdür — “bilinmiyor” bacakları kendi katmanında şifrelemek 11 kalem daha ekler, toplam 46 olur ve 6/6 yol kanıtlı hale gelir.

Son karar tersini gösteriyor: kalıcı kırık üreten 4 bacağı muaf tutmak yükü 14 kaleme indirir ve hiçbir bağlantı kırmaz, ama kanıtsız hacim 16.390 bin istek/güne çıkar. Kurgu politika 2 kalıcı istisna tanıyor; istenen 4’tür ve 2 bacak sınırın dışındadır. Geçiş penceresinin 90 gününün 61’i geçti, 29 gün kaldı.

Dört “bilinmiyor” bacağın her birinin yanında aynı cümle var: varsayım, sağlayıcı içi taşımanın şifreli olduğudur. Günde 5.840 bin istek taşıyorlar ve durumları kiracının hiçbir yapılandırmasından okunmuyor. Bilinmemek, açık olmakla aynı şey değildir ama kanıtlanabilir olmakla da aynı şey değildir.

Özet

  • 16 bacağın 3’ü şifreli, 9’u açık, 4’ünün durumu bilinmiyor; sağlayıcı içi 11 bacağın yalnız 1’i şifreli ve o bacaklardan günde 33.165 bin istek geçiyor.
  • Üç aşamalı zorlama 23 kalem değiştiriyor; en pahalı aşama (sağlayıcı içi, 16 kalem) en az bağlantı kırandır (11), en ucuz aşama 57 bağlantı kırar.
  • 79 istemci şifreli aktarımı desteklemiyor; 45’i yükseltilebiliyor, 34’ü yükseltilemiyor ve vekil katman bu 34’ü kurtarırken 12 kalem ekliyor.
  • Zorlamadan önce hiçbir yol uçtan uca şifreli değil; üç aşamadan sonra 1/6, kendi katmanında şifreleme eklenince 6/6 ve kanıtsız hacim 33.495’ten sıfıra iner.
  • Muafiyet yolu yükü 14 kaleme indiriyor, kanıtsız hacmi 16.390 bin istek/güne çıkarıyor; kurgu politika 2 istisna tanıyor, 2 bacak sınırın dışında. Geçiş penceresinden 29 gün kaldı.

Sonraki Adım

Veri beklemede ve aktarımda şifreli hale getirildi. İkisi de aynı şeye dayanıyor: bir anahtar ya da kimlik bilgisi bir yerde saklanıyor ve servisler onu okuyor. Bir sonraki ders o saklama katmanına döner ve tek bir soruyu ölçer: sır döndürüldüğünde eski ile yeni değerin birlikte geçerli olduğu pencere ne kadar olmalı — kısa pencere kaç istemciyi kaçırıyor, uzun pencere sızıntı süresini ne kadar uzatıyor.

İ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