İçeriğe geç
academia.sh

Ders 04 / 18

Bağlantı Noktası Tarama

Tarama türlerini iz ekseninde karşılaştırmak: 96 noktalık uzayda 23 açık noktanın türlere göre %78,3 ile %0 arasında kesinlikle ayrılması, tek yönlü sondanın 21 belirsiz aday ve 3 yanlış pozitif üretmesi, kanıt başına izin 3,13 ile 8,00 kayıt arasında değişmesi, aynı türün yavaşlatıldığında aynı 18 kanıtı aynı 72 kayıtla ama 2 yerine 0 uyarıyla üretmesi ve %91,3 kapsamanın iki türün birleşimini gerektirmesi.

İçindekiler

Üç ders sonunda dışarıdan görünen ad listesi hazırdır, ama bir ad bir varlık değildir. Bir kayıt bir hedefe çözümlenir; o hedefte hiçbir bağlantı kabul edilmiyor da olabilir, üç servis birden sunuluyor da. İkisi kayıt düzeyinde aynı görünür. Bu ders farkı sınayan adımı ele alır ve önceki üçünden ayrıldığı nokta şudur: hedefe doğrudan ve çok sayıda istek gider.

Bu yüzden ölçünün ağırlığı da değişir. Buraya kadar biriken iz 136 kayıt ve 5 uyarıydı. Bu derste tek bir tarama türü tek başına o sayının yarısını aşabilir. Karşılaştırma bu eksende yapılır: her tür kaç açık noktayı kesin ayırıyor, kaçını belirsiz bırakıyor, kaçını kaçırıyor ve savunmada kaç kayıt ile kaç uyarı üretiyor. Bu adım yalnız yazılı yetkinin ve kapsam tanımının kapsadığı uçlarda yapılabilir; kapsam dışı bir uca gönderilen tek bir istek bile yetkiyi geçersiz kılar.

Türü Tanımlayan Şey Ayırdığı Durumdur

Tarama türleri burada araç, komut ya da seçenek olarak değil, ayırma gücü olarak anılır. Bir türü belirleyen şey hangi nokta durumunu kesin ayırdığı, hangisini belirsiz bıraktığıdır.

KS10: tarama uzayı uç başına 9 bağlantılı ve 3 bağlantısız noktadır; yaygın nokta listesi uç başına 4 noktadır. Bir nokta acik, suzulmus ya da kapali durumundadır. KS11: bir tür, uzayının hangi durumunu kesin ayırdığı ve hangisini belirsiz bıraktığıyla tanımlanır; belirsiz kalan noktalardan gerçekte açık olmayanlar yanlış pozitiftir. KS12: iz üç kalemdir — her deneme bir ağ kaydı, bağlantısı tamamlanan her açık nokta bir uygulama kaydı, uyarı ise hız eşiğinden ve uygulama kaydının varlığından çıkar.

// kesif/nokta.mjs — kurgu sekiz ucun baglanti noktasi durumu ve bes tarama turu (model): gercek
// ana makine, gercek adres ve gercek servis yok. Arac adi, komut ve bayrak dizisi de yok:
// tarama turleri yalniz "hangi durumu kesin ayirir, hangisini belirsiz birakir" ile tanimlanir.

// KS10: tarama uzayi uc basina 9 baglantili (bl) ve 3 baglantisiz (bz) noktadir; yaygin nokta
// listesi uc basina 4 noktadir. Asagida yalniz kapali olmayan noktalar yazilir, gerisi kapalidir.
// "yanit", baglantisiz noktanin sondaya karsilik verip vermedigini soyler.
export const UC = ["abone", "saha", "vpn", "toplayici", "rapor", "ortak", "izleme", "gunluk"];
export const UZAY = { bl: UC.length * 9, bz: UC.length * 3, yaygin: UC.length * 4 };

export const NOKTA = `
  abone      n1 bl acik      1 -
  abone      n2 bl acik      1 -
  abone      n3 bl acik      0 -
  abone      n4 bl suzulmus  1 -
  saha       n1 bl acik      1 -
  saha       n5 bl acik      0 -
  saha       n6 bl acik      1 -
  saha       b1 bz acik      1 evet
  vpn        n1 bl suzulmus  1 -
  vpn        n6 bl acik      1 -
  vpn        b2 bz acik      0 hayir
  toplayici  n6 bl acik      1 -
  toplayici  n7 bl acik      0 -
  toplayici  n8 bl acik      0 -
  toplayici  b1 bz acik      1 evet
  rapor      n1 bl acik      1 -
  rapor      n6 bl acik      1 -
  rapor      n9 bl suzulmus  0 -
  ortak      n1 bl acik      1 -
  ortak      n3 bl acik      0 -
  izleme     n1 bl acik      1 -
  izleme     n7 bl acik      0 -
  izleme     b1 bz acik      1 evet
  gunluk     n1 bl acik      1 -
  gunluk     n5 bl acik      0 -
  gunluk     b3 bz acik      1 hayir`
  .trim().split("\n").map((r) => {
    const [uc, no, prot, durum, yaygin, yanit] = r.trim().split(/\s+/);
    return { uc, no, prot, durum, yaygin: +yaygin, yanit };
  });

export const ACIK = NOKTA.filter((n) => n.durum === "acik");
const acik = (n) => n.durum === "acik";
const yanitli = (n) => n.durum === "acik" && n.yanit === "evet";

// KS11: bir tarama turu, uzayinin hangi durumunu kesin ayirdigi ve hangisini belirsiz biraktigi
// ile tanimlanir. "birim" bir denemenin kurgu sure birimi, "uyg" ise baglantinin tamamlanip
// uygulama katmaninda kayit birakip birakmadigidir.
export const TUR = [
  { ad: "tam baglanti", uzay: "bl", birim: 3, uyg: 1, kesin: acik, belirsiz: () => false },
  { ad: "yarim baglanti", uzay: "bl", birim: 1, uyg: 0, kesin: acik, belirsiz: () => false },
  { ad: "tek yonlu sonda", uzay: "bl", birim: 1, uyg: 0, kesin: () => false,
    belirsiz: (n) => n.durum !== "kapali" },
  { ad: "baglantisiz protokol", uzay: "bz", birim: 5, uyg: 0, kesin: yanitli,
    belirsiz: (n) => acik(n) && !yanitli(n) },
  { ad: "sinirli liste", uzay: "yaygin", birim: 3, uyg: 1, kesin: acik,
    belirsiz: () => false },
  { ad: "yarim baglanti (yavas)", uzay: "bl", birim: 10, uyg: 0, kesin: acik,
    belirsiz: () => false },
];

export const kapsamda = (t, n) =>
  t.uzay === "yaygin" ? n.yaygin === 1 : n.prot === t.uzay;

// KS12: iz uc kalemdir — her deneme bir ag kaydi, baglantisi tamamlanan her acik nokta bir
// uygulama kaydi, uyari ise hiz esiginden ve uygulama kaydinin varligindan cikar.
export const olc = (t) => {
  const gorulen = NOKTA.filter((n) => kapsamda(t, n));
  const kesin = gorulen.filter((n) => t.kesin(n));
  const belirsiz = gorulen.filter((n) => t.belirsiz(n));
  const deneme = UZAY[t.uzay];
  const sure = deneme * t.birim;
  const hiz = deneme / sure;
  const agKayit = deneme;
  const uygKayit = t.uyg * kesin.length;
  const uyari = (hiz > 0.5 ? 2 : hiz > 0.25 ? 1 : 0) + (uygKayit > 0 ? 1 : 0);
  return { t, deneme, kesin, belirsiz, sure, hiz, agKayit, uygKayit,
    kayit: agKayit + uygKayit, uyari,
    yanlisP: belirsiz.filter((n) => n.durum !== "acik").length,
    kacirilan: ACIK.length - kesin.length - belirsiz.filter(acik).length };
};
// kesif/tarama.mjs — tarama turleri iz ekseninde: kac aday, kac kacan, kac kayit, kac uyari.
import { NOKTA, ACIK, TUR, UZAY, olc } from "./nokta.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 O = TUR.map(olc);

console.log(`${UZAY.bl} baglantili + ${UZAY.bz} baglantisiz nokta uzayi, ` +
  `${NOKTA.length} kapali olmayan nokta: ${ACIK.length} acik, ` +
  `${NOKTA.filter((n) => n.durum === "suzulmus").length} suzulmus`);

const A = [-23, 8, 8, 10, 9, 11, 10];
console.log("\n1. tur basina bulunan ve kacan");
yaz(A, "tarama turu", "deneme", "kesin", "belirsiz", "yanlisP", "kacirilan", "kapsama %");
for (const o of O)
  yaz(A, o.t.ad, o.deneme, o.kesin.length, o.belirsiz.length, o.yanlisP, o.kacirilan,
    ((o.kesin.length / ACIK.length) * 100).toFixed(1));

const B = [-23, 9, 10, 8, 8, 8, 7];
console.log("\n2. savunmada biraktigi iz");
yaz(B, "tarama turu", "ag kaydi", "uyg kaydi", "kayit", "sure", "hiz", "uyari");
for (const o of O)
  yaz(B, o.t.ad, o.agKayit, o.uygKayit, o.kayit, o.sure, o.hiz.toFixed(2), o.uyari);

const C = [-23, 12, 12, 12];
console.log("\n3. kanit basina bedel");
yaz(C, "tarama turu", "kayit/kesin", "sure/kesin", "uyari/kesin");
for (const o of O) {
  const k = o.kesin.length;
  yaz(C, o.t.ad, k ? (o.kayit / k).toFixed(2) : "-", k ? (o.sure / k).toFixed(2) : "-",
    k ? (o.uyari / k).toFixed(3) : "-");
}

const D = [-45, 8, 10, 8, 8, 8];
console.log("\n4. iki turun birlesimi");
yaz(D, "birlesim", "kesin", "kapsama %", "kayit", "sure", "uyari");
const cift = [[1, 3], [4, 3], [5, 3], [0, 3]];
for (const [i, j] of cift) {
  const k = new Set([...O[i].kesin, ...O[j].kesin]).size;
  yaz(D, `${O[i].t.ad} + ${O[j].t.ad}`, k, ((k / ACIK.length) * 100).toFixed(1),
    O[i].kayit + O[j].kayit, O[i].sure + O[j].sure, O[i].uyari + O[j].uyari);
}
const y = O[5], h = O[1];
console.log(`ayni tur yavaslatildiginda: kesin ${h.kesin.length} -> ${y.kesin.length}, ` +
  `kayit ${h.kayit} -> ${y.kayit}, sure ${h.sure} -> ${y.sure}, ` +
  `uyari ${h.uyari} -> ${y.uyari}`);
72 baglantili + 24 baglantisiz nokta uzayi, 26 kapali olmayan nokta: 23 acik, 3 suzulmus

1. tur basina bulunan ve kacan
tarama turu              deneme   kesin  belirsiz  yanlisP  kacirilan kapsama %
tam baglanti                 72      18         0        0          5      78.3
yarim baglanti               72      18         0        0          5      78.3
tek yonlu sonda              72       0        21        3          5       0.0
baglantisiz protokol         24       3         2        0         18      13.0
sinirli liste                32      15         0        0          8      65.2
yarim baglanti (yavas)       72      18         0        0          5      78.3

2. savunmada biraktigi iz
tarama turu             ag kaydi uyg kaydi   kayit    sure     hiz  uyari
tam baglanti                  72        18      90     216    0.33      2
yarim baglanti                72         0      72      72    1.00      2
tek yonlu sonda               72         0      72      72    1.00      2
baglantisiz protokol          24         0      24     120    0.20      0
sinirli liste                 32        15      47      96    0.33      2
yarim baglanti (yavas)        72         0      72     720    0.10      0

3. kanit basina bedel
tarama turu             kayit/kesin  sure/kesin uyari/kesin
tam baglanti                   5.00       12.00       0.111
yarim baglanti                 4.00        4.00       0.111
tek yonlu sonda                   -           -           -
baglantisiz protokol           8.00       40.00       0.000
sinirli liste                  3.13        6.40       0.133
yarim baglanti (yavas)         4.00       40.00       0.000

4. iki turun birlesimi
birlesim                                        kesin kapsama %   kayit    sure   uyari
yarim baglanti + baglantisiz protokol              21      91.3      96     192       2
sinirli liste + baglantisiz protokol               15      65.2      71     216       2
yarim baglanti (yavas) + baglantisiz protokol      21      91.3      96     840       0
tam baglanti + baglantisiz protokol                21      91.3     114     336       2
ayni tur yavaslatildiginda: kesin 18 -> 18, kayit 72 -> 72, sure 72 -> 720, uyari 2 -> 0

Sayılar ölçüm sınıfındadır; girdileri KS10–KS12’dir.

Sıfır Kesin, Yirmi Bir Belirsiz

Birinci tablonun en dikkat çekici satırı üçüncüsüdür. Tek yönlü sonda 72 deneme yapar ve hiçbir noktayı kesin ayıramaz: kapsaması %0’dır. Bunun yerine 21 belirsiz aday üretir. Nedeni türün tanımındadır — bu türde yanıt gelmemesi hem açık hem süzülmüş nokta için aynı sonuçtur, ikisi ayrılamaz. Üretilen 21 adayın 3’ü yanlış pozitiftir; süzülmüş üç nokta açık olanlarla aynı listede durur.

Bu satır bu kursun ölçü biriminin en yalın örneğidir. “Tarama yirmi bir açık nokta buldu” cümlesi bu türde yanlıştır: yirmi bir aday bulunmuştur, sıfır kanıt. Aradaki farkı kapatmak için her adayın ayrı bir adımla doğrulanması gerekir ve o adımların izi bu tabloda hiç yoktur.

Öteki uçta tam ve yarım bağlantı türleri 18 noktayı kesin ayırır, hiç belirsiz bırakmaz ve kapsamaları %78,3’tür. Kaçırdıkları beş nokta bağlantısız protokoldedir: bağlantılı uzayı tarayan bir tür, bağlantısız uzaydaki hiçbir noktayı göremez. Sınırlı liste 32 denemeyle 15 nokta bulur (%65,2) ve 8 nokta kaçırır — kaçırdıkları yaygın liste dışındaki noktalardır ve tam olarak onlar bir değerlendirmede en ilgi çekici olanlardır.

Aynı Kanıt, Farklı İz

İkinci tablo iz sütununu açar. Tam ve yarım bağlantı aynı 18 kanıtı üretir, ama tam bağlantı 90 kayıt, yarım bağlantı 72 kayıt bırakır. Fark uygulama kaydındadır: tam bağlantı her açık noktada bağlantıyı tamamlar ve o noktadaki uygulama bir satır yazar. Yarım bağlantı bağlantıyı tamamlamaz; ağ katmanında 72 satır kalır, uygulama katmanında hiç.

Bu ayrım mavi takım açısından iki kaydın değerini de belirler. Ağ kaydı yalnız bir denemenin yapıldığını söyler; uygulama kaydı hangi uçta hangi noktaya kimin bağlandığını, çoğu zaman bir kimlik ya da bir istek satırıyla birlikte söyler. Tarama tarafında “daha az iz” diye seçilen tür, savunma tarafında daha az bilgi taşıyan iz anlamına gelir.

Üçüncü tablo bedeli kanıt başına verir. Sınırlı liste kanıt başına 3,13 kayıt ile en ucuz türdür, ama sekiz noktayı hiç görmez. Bağlantısız protokol taraması kanıt başına 8,00 kayıt ve 40,00 süre birimi harcar; en pahalı türdür ve karşılığında yalnız 3 kanıt verir. Ucuzluk sıralaması ile kapsama sıralaması bu tabloda birbirinin tersidir.

Hız ile İz Arasındaki Denge

İkinci tablonun son satırı bu dersin ana sonucudur. Yarım bağlantı türü on kat yavaşlatıldığında kesin bulunan 18’de kalır, kayıt 72’de kalır, uyarı 2’den 0’a düşer. Süre 72’den 720’ye çıkar.

Yani hız ile iz arasındaki ilişki doğrudan değildir. Yavaşlatmak savunmanın gördüğü kayıt sayısını hiç azaltmaz; azalttığı şey o kayıtların bir eşiği aşıp uyarıya dönüşmesidir. Aynı 72 satır iki koşumda da günlüğe yazılır; birinde bir dakikaya sığdığı için hız kuralını tetikler, ötekinde on kat geniş bir aralığa yayıldığı için tetiklemez.

Savunma tarafının çıkarımı buradan doğrudan okunur: hız eşiğine dayanan bir tespit, yavaş taramayı hiçbir zaman görmez. Yavaş taramayı görmenin yolu, aynı kaynaktan gelen denemelerin geniş bir pencerede biriktirilmesi ve eşiğin hıza değil yayılıma — kaç ayrı uca ve kaç ayrı noktaya dokunulduğuna — bağlanmasıdır. Bu koşumda her iki tür de 8 uca ve 72 noktaya dokunur; yayılım her iki koşumda da aynıdır.

Üçüncü tablonun uyari/kesin sütunu aynı şeyi ters yönden yazar. Yavaş yarım bağlantı ile bağlantısız protokol taraması 0,000 uyarı üretir; tam ve yarım bağlantı 0,111, sınırlı liste 0,133. En çok uyarı üreten tür, en az deneme yapan türdür — çünkü uyarı deneme sayısına değil, denemenin yoğunluğuna ve katmanına bağlıdır.

Yirmi Üç Noktanın Yirmi Biri

Dördüncü tablo tek türle yetinilemeyeceğini gösterir. Yirmi üç açık noktanın en yüksek tek tür kapsaması %78,3’tür; %91,3’e çıkmak bağlantılı ve bağlantısız uzayı ayrı ayrı tarayan iki türün birleşimini gerektirir. Kalan iki nokta hiçbir birleşimle bulunmaz: bağlantısız uzayda sondaya karşılık vermeyen iki açık nokta, bu türlerin hiçbirinde kesin sonuca bağlanamaz.

Birleşimlerin bedeli farklıdır. Yarım bağlantı ile bağlantısız protokol 21 kanıt için 96 kayıt, 192 süre ve 2 uyarı harcar. Aynı kanıt tam bağlantıyla alındığında kayıt 114’e, süre 336’ya çıkar; uyarı yine 2’dir. Yavaş yarım bağlantıyla alındığında kayıt yine 96, süre 840 ve uyarı 0’dır. Üç seçenek aynı 21 kanıtı verir; aralarındaki fark yalnız bedelde ve izdedir.

Özet

  • Tarama türünü belirleyen şey ayırdığı durumdur: 96 noktalık uzayda 23 açık nokta için kapsamalar %78,3, %78,3, %0, %13,0 ve %65,2’dir.
  • Tek yönlü sonda hiçbir noktayı kesin ayıramaz; 21 belirsiz aday üretir ve bunların 3’ü yanlış pozitiftir — bu tür aday üretir, kanıt üretmez.
  • Aynı 18 kanıt tam bağlantıyla 90, yarım bağlantıyla 72 kayıt bırakır; fark uygulama katmanındadır ve uygulama kaydı savunma tarafında daha çok bilgi taşır.
  • Kanıt başına bedel 3,13 ile 8,00 kayıt arasında değişir; en ucuz tür 8 noktayı hiç görmez, en pahalı tür yalnız 3 kanıt verir.
  • Aynı tür on kat yavaşlatıldığında kanıt 18’de, kayıt 72’de kalır ve uyarı 2’den 0’a düşer: yavaşlamak izi silmez, izin eşiği aşmasını engeller.
  • Yirmi üç açık noktanın 21’ine (%91,3) ancak iki türün birleşimiyle ulaşılır; iki nokta hiçbir birleşimde kesin sonuca bağlanamaz.

Sonraki Adım

Bu ders bir noktanın açık olduğunu kesin olarak ayırdı: 21 nokta kanıt düzeyinde işaretlendi. Ne var ki bir noktanın açık olması, orada ne çalıştığını söylemez. Yirmi bir açık noktanın her biri şu an yalnız bir sayıdır; arkasındaki yazılımın ne olduğu, hangi sürümü taşıdığı ve o sürümün bilinen bir açıkla ilişkili olup olmadığı hiç sorulmadı.

Bu soruyu soran adım parmak izi çıkarmadır ve yeni bir ölçü getirir: kesinlik. Bir uçtan toplanan imzalar bir sürüm kümesine işaret eder; küme bazen tek elemanlıdır, bazen onlarca sürüm içerir, bazen de hedefin kasten yanıltıcı bıraktığı bir tanıtım dizesi yüzünden yanlış kümedir. Sonraki ders kaç adayın tek bir sürüme indirgenebildiğini, ek sondaların kesinliği ne kadar artırıp izi ne kadar büyüttüğünü ve yanlış sürüm bilgisinin bulgu listesine kaç yanlış pozitif taşıdığını sayar. Konunun kapanışıdı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