---
title: 'Kablosuz Ağlar ve Ağ Güvenliği'
source: 'https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik'
language: tr
updated: '2026-08-17T04:39:19+00:00'
license: 'CC BY-SA 4.0'
lessons: 14
outcomes:
    - 'Kablosuz ağ tasarımının kapsama ve girişim kısıtlarını değerlendirir'
    - 'VPN teknolojilerini tehdit modeline göre seçer'
    - 'Ağ bölütleme ve sıfır güven ilkelerini uygular'
---

# Kablosuz Ağlar ve Ağ Güvenliği

Kablosuzda sınır bir çizgi değil bir eğridir, güvenlikte sıralı bir kural dizisidir; kurs iki yarıda da tasarımın niyet ettiği sınır ile gerçekten geçenin farkını iki yönde birden sayar.

## Kablosuz Ağlar

İletimin fiziği ve girişim, erişim noktalarının merkezî yönetimi, kanal planlama ve hücre kapsaması, istemci geçişleri, şifreleme kuşakları, menzil–güç ödünleşimleri ve hücresel mimarinin ana bileşenleri.

### Kablosuz İletimin Fiziği

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/kablosuz-iletimin-fizigi

Kablosuzda bağ ikili değil kademeli bir eğridir: kırk istemcilik kurguda otuz metrelik hücrenin içindeki 27 istemciden yalnız 9'u tam hız kademesinde çalışır, 14'ü alt kademelere iner ve 4'ü hiç ilişkilenemez.

Anahtarlama ve Yönlendirme kursu on yedi ayrı anlaşmazlık saydı ve hepsinde tek bir şeyi
sormadan kabul etti: iki cihaz arasında bir kablo varsa, o kablodan çıkan çerçeve karşı uca
ulaşır. Bağ ya vardır ya yoktur. Kopma dışında üçüncü bir hâl hiç düşünülmedi; tablolar
anlaşmazsa paket yanlış yere gider, ama gitmesi gereken yere giderken **kaybolmaz**.

Kablosuzda bu kabul düşer. Ortam kimseye ait değildir, sınırı çizilmemiştir ve iletim bir
kesinlik değil bir olasılıktır. Bir istemcinin bağı "var" ya da "yok" değildir; bir
**eğridir** — uzaklıkla düşer, girişimle azalır, kademeler hâlinde iner ve bir yerde sıfıra
varır. Bu kursun sorusu tam buradan doğuyor: **tasarımın niyet ettiği sınır ile gerçekten
geçenin farkı nedir?** Bu ders farkın kablosuz yarısını kurar ve en aykırı sonucunu ölçer:
hücrenin içinde olmak çalışıyor olmak demek değildir.

#### Paylaşılan Ortam

Kablolu bir bağda iletim ortamı iki uca ayrılmıştır: kabloyu takan taraf onu kullanır.
Kablosuzda ortam **paylaşılır** ve kimin kullandığına dair bir kayıt yoktur. Aynı frekans
aralığında yayın yapan her verici, o aralığı dinleyen her alıcı için gürültüdür — vericinin
aynı ağa ait olup olmaması fark etmez.

Bu yüzden kullanılabilir frekans aralığı **bant** olarak ayrılır, bant da **kanallara**
bölünür. Aynı kanalda yayın yapan iki komşu birbirini doğrudan bozar; komşu kanallardaki iki
yayın da taşma yüzünden birbirine karışabilir. Bir kanal planının işi, birbirini duyacak
kadar yakın iki erişim noktasının aynı kanala düşmemesini sağlamaktır.

Aşağıdaki tablo bu dersin kullandığı **kurgusal** bant düzenidir. Gerçek frekans tahsisleri
ülkeden ülkeye değişir, düzenleyici kararlarla güncellenir ve bu dersin ölçtüğü hiçbir şeyi
etkilemez; buradaki sayılar yalnız kanal planlamanın biçimini göstermek için seçilmiştir.

```text
# ogretilen bant duzeni , kurgudur ve calistirilmamistir

bant D (dar)     : 8 kanal, kanal genisligi 1 birim
                   ortusmeyen kanal kumesi: 1, 4, 7  (uc kanal)
                   menzil katsayisi yuksek, kademe tavani dusuk

bant G (genis)   : 24 kanal, kanal genisligi 1 birim
                   ortusmeyen kanal kumesi: 24 kanalin tamami
                   menzil katsayisi dusuk, kademe tavani yuksek

birlestirme      : bant G'de dort kanal tek bir 4 birimlik kanala baglanabilir
                   -> 6 ortusmeyen genis kanal, kademe tavani iki kat
```

Dar bantta yalnız üç örtüşmeyen kanal vardır; dördüncü bir erişim noktası kaçınılmaz olarak
bir komşusunun kanalını yeniden kullanır. Geniş bantta kanal boldur ama menzil kısadır. Bu
ödünleşim kursun ilerleyen derslerinde ölçülecek; burada yalnız girişimin **nereden geldiği**
kuruluyor.

Kanalın ve bant genişliğinin taşıma katmanı üzerindeki etkisi Ağ Modelleri kursunda
kurulmuştu; burada tekrarlanmıyor. Paylaşılan ortamın çarpışma ürettiği de yeni değil —
Anahtarlama ve Yönlendirme kursunun ilk dersi hub üzerinde bunu saymıştı. **Bu dersin ayrıldığı
yer ölçünün kendisidir:** orada ölçülen şey çarpışan çerçeve sayısıydı, burada ölçülen şey
tasarımın verdiği sözden kaç istemcide, **hangi iki yönde** ayrıldığıdır.

#### İşaret Gücü

Alıcının gördüğü şeye **işaret gücü (signal strength)** denir ve iki şey onu düşürür:
uzaklık ve girişim. Bu ders ikisini tek bir kurgusal ölçekte toplar.

$$
\text{işaret} = \text{güç} - \text{uzaklık} - \text{girişim}
$$

Burada `güç` erişim noktasının işaret bütçesi, `uzaklık` metre, `girişim` ise o istemcinin
bulunduğu noktada aynı kanalı kullanan komşulardan gelen katkıdır. Üçü de kurgusal birimdir.

Gerçek yayılımda zayıflama uzaklığın doğrusal bir işlevi değildir; duvarlar, yansımalar ve
gövdeler ayrı ayrı pay alır. Buradaki doğrusal biçim ölçümü okunur kılmak için seçilmiş bir
**kurgudur** ve dersin bütün iddiaları bu kurgunun içindedir. Kurgunun taşıdığı tek şey
şudur: işaret gücü sürekli bir büyüklüktür ve iki bağımsız nedenle azalır.

#### Hız Kademeleri

İşaret gücü sürekli olsa da iletim sürekli değildir. Verici, ölçtüğü işaret gücüne göre bir
**hız kademesi (rate tier)** seçer: işaret yüksekse yoğun bir kiplenim, düştükçe daha
dayanıklı ama daha yavaş bir kiplenim kullanılır. Kademe geçişleri eşiklidir.

| İşaret gücü | Hız kademesi | Anlamı |
|---|---|---|
| 34 ve üstü | 6 | tam hız |
| 28 – 33 | 4 | bir alt kademe |
| 22 – 27 | 2 | iki alt kademe |
| 18 – 21 | 1 | en alt kademe |
| 18 altı | 0 | ilişkilenemez |

Son satır ayrı bir eşiktir. İşaret gücü 18'in altına düştüğünde en dayanıklı kiplenim bile
tutmaz ve istemci **ilişkilenemez (associate)**. İlişkilenme, istemci ile erişim noktası
arasında bir bağın kurulmasıdır; kurulmadığı sürece istemci için ağ yoktur.

Kademelerin varlığı kablosuzu kablolu bağdan ayıran şeydir. Kablolu bir bağ ya çalışır ya
kopar; kablosuz bir bağ **altı kat yavaş çalışabilir** ve bunu hiçbir bağlantı durumu
göstergesi bildirmez. Göstergeler ilişkilenmeyi gösterir, kademeyi değil.

#### Bakışımsız Bağ ve Paylaşılan Süre

Yukarıdaki hesap tek bir yön için yapıldı. Gerçekte her bağın iki yönü vardır ve ikisi eşit
değildir. Erişim noktası sabit beslenen bir cihazdır ve işaret bütçesi yüksektir; istemci
pille çalışır ve bütçesi düşüktür. Bunun sonucu **bakışımsız bir bağdır**: istemci erişim
noktasını duyduğu hâlde erişim noktası istemciyi duymayabilir. Kullanıcı tarafında ağ
görünür, listede durur, seçilebilir — ve ilişkilenme kurulmaz. Bu ders tek yön ölçtüğü için
bakışımsızlığı sayıya dökmez; ama "ağı görüyorum ama bağlanamıyorum" belirtisinin kaynağı
budur ve bir kapsama sorunu gibi görünmez.

İkinci fark ortamın **yarı çift yönlü** olmasıdır. Bir verici yayın yaparken kendi yayını
alıcısını doldurur; başkasının aynı anda yayın yaptığını duyamaz. Kablolu bir bağda çarpışma
**sezilir** — gönderen sinyali dinler ve bozulmayı görür. Kablosuzda sezilemez, bu yüzden
düzenek çarpışmayı sezmek yerine ondan **kaçınmak** üzerine kurulur: verici ortamı dinler,
boş bulursa rastgele bir süre daha bekler ve ancak sonra yayına başlar. Ortamı kimin
kullandığına dair bir hakem yoktur; sıra, beklemenin kendisinden doğar.

Bu iki gerçek birleştiğinde kademe düşüşünün ölçülen etkisi çoğalır. Kademe 1'deki bir
istemci, kademe 6'daki bir istemcinin taşıdığı veriyi taşımak için ortamı **altı katı** kadar
süre tutar; bu, kademe sayılarının tanımının doğrudan sonucudur. Ortam paylaşıldığı için o
süre boyunca hücredeki herkes bekler. Hücrenin kenarındaki tek bir yavaş istemci, merkezdeki
hızlı istemcilerin hepsini yavaşlatır. Ölçümde alt kademelere düşen istemciler yalnız kendi
sözlerini kaybetmiyor; başkalarınınkini de eksiltiyorlar.

#### Tasarımın Sözü

Bir kablosuz ağ tasarlanırken verilen söz bir yarıçaptır: "otuz metrelik hücrenin içindeki
istemci tam hızda çalışır." Bu söz kursun **niyeti**dir ve ölçümün kâhini odur. Kurguyu biz
yazdığımız için her istemcinin gerçek uzaklığını biliriz; niyetin ne demek istediği
tartışmasızdır.

Ortamın verdiği cevap ise ayrı bir işlevdir: istemci **ilişkilenebiliyor mu?** İkisi
karşılaştırıldığında dört sonuç çıkar ve bu kursun tamamı bu dörtlüyü sayar.

- **Doğru geçti** — niyet geçirecekti, ortam geçirdi.
- **Doğru durdu** — niyet durduracaktı, ortam durdurdu.
- **Fazla geçen (false admit)** — niyet durduracaktı, ortam geçirdi. Hücrenin dışındaki bir
  istemci ilişkilendi.
- **Fazla duran (false deny)** — niyet geçirecekti, ortam durdurdu. Hücrenin içindeki bir
  istemci ilişkilenemedi.

**İki yön ayrı sayılır.** Yalnız fazla geçeni sayan bir ölçüm, kapsamanın yetmediği yerleri
göremez; yalnız fazla duranı sayan bir ölçüm, sızan kapsamayı göremez. Kurs boyunca ikisi de
her tabloda yan yana durur.

Ölçümün varsayımları:

- **KB1** — Kırk istemcinin uzaklığı ve gördüğü girişim tek bir üreteçten gelir. Uzaklık
  5–45 m, girişim 0–12 birim aralığındadır; kâhin kurguyu biz ürettiğimiz için bilinir.
- **KB2** — İşaret gücü `güç - uzaklık - girişim` biçiminde doğrusaldır. Bu bir yayılım
  modeli değil, kademeleri okunur kılan bir kurgudur.
- **KB3** — Tek bir erişim noktası vardır ve işaret bütçesi 52'dir. Bu ders başka bir güç
  değeri kurmaz; güç taraması kanal planlama dersinin konusudur.
- **KB4** — Hücre yarıçapı 30 m'dir ve niyet yalnız uzaklığa bakar. Niyet girişimi
  görmez — tasarım sözünü verirken komşuların ne yapacağını bilmez.
- **KB5** — Kademe eşikleri 34, 28, 22 ve 18'dir; 18 aynı zamanda ilişkilenme eşiğidir.
  Ortam kararı `hız > 0` olarak okunur, yani ilişkilenmenin kendisidir.
- **KB6** — Küme 40 istemcidir; bu kümede ölçülebilen en küçük fark **1/40 = 0,025**'tir.
  Bundan küçük bir fark bu ölçümle savunulmaz.

#### Ölçüm

```python
"""Kablosuz iletimin fizigi: isaret gucu, hiz kademesi ve hucrenin sozu."""
TOHUM = 20260811
GUC = 52            # erisim noktasinin isaret butcesi, kurgusal birim
YARICAP = 30        # tasarimin sozunu verdigi hucre yaricapi, metre
KADEMELER = ((34, 6), (28, 4), (22, 2), (18, 1))   # (isaret esigi, hiz kademesi)


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def istemciler(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "uzaklik": 5 + r(41), "girisim": r(13)})
    return liste


def isaret(o, guc=GUC):
    return guc - o["uzaklik"] - o["girisim"]


def hiz(o, guc=GUC):
    for esik, kademe in KADEMELER:
        if isaret(o, guc) >= esik:
            return kademe
    return 0


def hucre_niyeti(o, yaricap=YARICAP):
    """Tasarimin sozu: hucrenin icindeki istemci tam hizda calisir."""
    return o["uzaklik"] <= yaricap


def ortam(o, guc=GUC):
    return hiz(o, guc) > 0


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


ist = istemciler()
print(f"istemci {len(ist)} | uzaklik {min(o['uzaklik'] for o in ist)}-"
      f"{max(o['uzaklik'] for o in ist)} m | girisim "
      f"{min(o['girisim'] for o in ist)}-{max(o['girisim'] for o in ist)} | "
      f"hucre ici {sum(1 for o in ist if hucre_niyeti(o))}")
print()
print(f"{'kademe':>6s} {'istemci':>8s} {'en dusuk isaret':>16s}")
for esik, kademe in KADEMELER:
    k = [o for o in ist if hiz(o) == kademe]
    print(f"{kademe:6d} {len(k):8d} {min((isaret(o) for o in k), default=0):16d}")
sifir = [o for o in ist if hiz(o) == 0]
print(f"{0:6d} {len(sifir):8d} {max(isaret(o) for o in sifir):16d}")
print()

d = fark(ist, hucre_niyeti, ortam)
print(f"{'dogru gecti':>12s} {'dogru durdu':>12s} {'fazla gecen':>12s} "
      f"{'fazla duran':>12s}")
print(f"{d['dogru_gecti']:12d} {d['dogru_durdu']:12d} {d['yanlis_gecti']:12d} "
      f"{d['yanlis_durdu']:12d}")
print()

ici = [o for o in ist if hucre_niyeti(o)]
print(f"{'hucre ici kademe':>17s} {'istemci':>8s}")
for kademe in (6, 4, 2, 1, 0):
    print(f"{kademe:17d} {sum(1 for o in ici if hiz(o) == kademe):8d}")
print()
print("fazla duran (no, uzaklik, girisim, isaret):",
      [(o["no"], o["uzaklik"], o["girisim"], isaret(o)) for o in ici if hiz(o) == 0])
```

```
istemci 40 | uzaklik 6-44 m | girisim 0-12 | hucre ici 27

kademe  istemci  en dusuk isaret
     6        9               35
     4        4               30
     2        8               22
     1        2               18
     0       17               17

 dogru gecti  dogru durdu  fazla gecen  fazla duran
          23           13            0            4

 hucre ici kademe  istemci
                6        9
                4        4
                2        8
                1        2
                0        4

fazla duran (no, uzaklik, girisim, isaret): [(4, 24, 11, 17), (12, 30, 6, 16), (25, 30, 12, 10), (32, 30, 7, 15)]
```

#### İlişkilenmek Çalışmak Demek Değildir

İkinci tablo kırk istemciyi kademelere dağıtıyor. **9** istemci tam hızda, **4**'ü bir alt
kademede, **8**'i iki alt kademede, **2**'si en alt kademede ve **17**'si hiç ilişkilenemiyor.
İlişkilenen toplam 23'tür.

Üçüncü tablo niyetle ortamı karşılaştırıyor. Hücrenin içinde **27** istemci var; bunların
**23**'ü ilişkileniyor, **4**'ü ilişkilenemiyor. Hücrenin dışındaki 13 istemcinin hiçbiri
ilişkilenemiyor: **fazla geçen 0**. Bu güçte sınır sızdırmıyor. Yalnız bu sütuna bakan bir
denetim yapılandırmayı kusursuz ilan ederdi.

Dördüncü tablo o denetimin göremediğini veriyor. Hücrenin içindeki 27 istemcinin kademe
dağılımı **9, 4, 8, 2, 4**'tür. Tasarımın sözü "hücrenin içindeki istemci **tam hızda**
çalışır" idi. Sözü gerçekten tutulan istemci sayısı **9**'dur — hücre içindekilerin üçte
biri. **14** istemci ilişkileniyor ama alt kademelerde, **4**'ü ise hiç ilişkilenemiyor.

Buradan çıkan okuma kursun dördüncü okumasıdır: **sınır ikili değildir.** "Geçti" ile
"geçmedi" arasındaki ayrım, kademeler dizisinin kabaca okunmasıdır. Bir yapılandırma bu kaba
okumada sıfır hata verirken, verdiği sözün üçte ikisini tutmuyor olabilir.

Fazla duran dört istemcinin nerede olduğu da öğreticidir. Dördü de hücrenin içinde ama
kenarına yakın: uzaklıkları 24 ile 30 m arasında ve gördükleri girişim yüksek. Uzaklık tek
başına yetmiyor — **niyet girişimi hiç görmüyor** (KB4). Tasarım hücreyi çizerken komşu
erişim noktalarının hangi kanalda yayın yapacağını bilmez; girişim, sözün verilmesinden
sonra ortaya çıkan bir büyüklüktür.

Bu, iki yönü ayrı saymanın neden zorunlu olduğunu gösteriyor. Sızıntı sıfır, eksik dört. Tek
bir sayı isteyen bir rapor bu yapılandırmayı ya kusursuz ya kusurlu diye anacak; ikisi de
yanlış olacak.

Dört istemcinin kırk istemcilik bir kümedeki payı **0,100**'dür. Bu kümede ölçülebilen en
küçük fark **1/40 = 0,025** olduğu için (KB6) dört, ölçüm bandının rahatça içindedir ve
gürültü sayılamaz. Buna karşılık bir istemcilik bir fark bu kümeyle savunulabilir olsa da
zayıftır; kurs boyunca tek istemcilik değişimler yorumlanırken bu sınır hatırlanacak.

#### Özet

- Kablosuzda ortam paylaşılır ve iletim bir kesinlik değildir; bağ ikili bir durum değil,
  uzaklıkla düşen ve girişimle azalan bir eğridir.
- İşaret gücü kademe eşiklerine çarpar: 34, 28, 22 ve 18. Son eşik aynı zamanda ilişkilenme
  eşiğidir; altına düşen istemci için ağ yoktur.
- Kırk istemcilik kurguda 52 gücünde kademe dağılımı **9, 4, 8, 2** ve ilişkilenemeyen
  **17**'dir; ilişkilenen toplam 23'tür.
- Aynı yapılandırmada **fazla geçen 0**, **fazla duran 4**'tür: sınır sızdırmıyor ama
  hücrenin içindeki dört istemciyi dışarıda bırakıyor.
- Hücre içindeki 27 istemcinin yalnız **9**'u tam hız kademesindedir. İlişkilenmek çalışmak
  demek değildir ve tek yönlü bir denetim bunu göremez.

#### Sonraki Adım

Bu ölçüm tek bir erişim noktasının kendi başına verdiği kararı sayıyor: istemciyi duyuyorsa
ilişkilendiriyor, duymuyorsa duymuyor. Bir binada ise onlarca erişim noktası vardır ve
hepsinin işaret bütçesi, kanalı ve eşiği ayrı ayrı verilmiş bir değerdir. Sonraki ders bu
kararın **nerede alındığını** ölçer: her erişim noktası kendi görüşüyle mi karar veriyor,
yoksa ortak bir denetleyici mi karar veriyor. Aynı istemci iki erişim noktasından iki farklı
cevap alabiliyorsa, kararın sahibi istemcinin durumu değil, kime denk geldiğidir.

### Erişim Noktaları ve Denetleyiciler

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/erisim-noktalari-ve-denetleyiciler

Kararın erişim noktasında mı denetleyicide mi alındığı ölçülür: ayrı ayrı verilmiş bütçelerle çalışan üç nokta 25 istemci ilişkilendirip 2 fazla geçen üretiyor, ortak politika 23 istemci ilişkilendirip sıfır sızdırıyor ve tam hızda çalışan istemci 5'ten 9'a çıkıyor.

Önceki ders tek bir erişim noktasının kendi başına verdiği kararı saydı: istemciyi eşiğin
üstünde duyuyorsa ilişkilendiriyor, duymuyorsa duymuyor. Kırk istemcinin **23**'ü
ilişkilendi, hücrenin içindeki **4**'ü ilişkilenemedi ve dışarıdan **hiç kimse** sızmadı.

Bir binada ise tek bir erişim noktası yoktur. Onlarca nokta vardır ve her birinin işaret
bütçesi, kanalı ve eşiği **verilmiş bir değerdir** — bir yerde, bir zamanda, bir kişi
tarafından. Bu dersin sorusu şudur: o değeri kim veriyor ve karar nerede alınıyor? Aynı
istemci iki erişim noktasından iki farklı cevap alabiliyorsa, cevabın sahibi istemcinin
durumu değil, **kime denk geldiğidir**.

#### İlişkilenme Bir Alışveriştir

Bir istemcinin ağı "görmesi" ile ona bağlanması ayrı işlerdir. Arada bir çerçeve alışverişi
durur ve karar o alışverişin belirli bir adımında verilir.

```text
# ogretilen yonetim cercevesi dizisi , kurgudur ve calistirilmamistir

1. erisim noktasi -> herkes     duyuru
                                  ag: olcum.ornek
                                  kanal: 4 , bant: D
                                  desteklenen kademeler: 6 4 2 1

2. istemci -> herkes            arama istegi
                                  ag: olcum.ornek

3. erisim noktasi -> istemci    arama yaniti
                                  olculen isaret gucu: 26

4. istemci -> erisim noktasi    iliskilenme istegi
                                  istenen kademe: 4

5. erisim noktasi -> istemci    iliskilenme yaniti
                                  sonuc: kabul , verilen kademe: 2
                                  <-- KARAR BU ADIMDA VERILIR
```

Beşinci adım kararın verildiği yerdir ve iki şeyi birden söyler: istemci kabul edildi mi ve
hangi hız kademesiyle. Birinci soruya "hayır" cevabı istemcinin gözünde ağın olmaması
demektir; ikinci soruya verilen cevap ise hiçbir göstergede görünmez.

Kritik nokta şudur: beşinci adımı **kim** yazıyor? Çerçeveyi gönderen erişim noktasıdır, ama
cevabın içeriğini belirleyen kural başka bir yerde tanımlanmış olabilir.

#### İki Yönetim Modeli

**Bağımsız erişim noktası** kendi yapılandırmasını taşır. Kanalı, işaret bütçesi ve eşiği
kendi belleğindedir; ilişkilenme kararını yalnız kendi ölçtüğü işaret gücüne bakarak verir.
Komşusunun hangi kanalda olduğunu, hangi bütçeyle yayın yaptığını ve hangi istemciyi
reddettiğini bilmez.

**Denetleyici tabanlı model** kararı ikiye ayırır. **Denetim düzlemi** merkezîdir: kanal
atamaları, işaret bütçeleri, eşikler ve ilkeler tek bir yerde tutulur ve noktalara dağıtılır.
**Veri düzlemi** yerelde kalabilir ya da denetleyiciye tünellenebilir; bu ayrı bir seçimdir
ve bu dersin ölçtüğü şey değildir.

Denetleyicinin taşıdığı asıl şey **ortak görüştür**. Bütün noktaların ölçümleri tek bir yerde
toplandığında, bir noktanın tek başına bilemeyeceği şeyler bilinir hâle gelir: hangi kanal
nerede yeniden kullanılıyor, hangi istemci kaç noktadan duyuluyor, bir noktanın bütçesi
komşusunun kapsamasını nereden kesiyor.

Bu, Anahtarlama ve Yönlendirme kursunun eksenine benzer ama aynısı değildir. Orada sorulan
soru paylaşılan bir gerçeğin **kopyalarının anlaşıp anlaşmadığıydı**; burada sorulan soru
kopyaların **hiç var olup olmadığıdır**. Bağımsız noktalar ortak bir gerçeğin eski
kopyalarını taşımaz — hiçbir ortak gerçek yoktur, her nokta kendi değerini tek başına
taşır.

Denetleyicinin bir cihaz olması da zorunlu değildir. Ayrı bir donanım, ağdaki bir sunucu ya
da noktalardan birinin üstlendiği bir rol olabilir; ölçüm açısından değişen bir şey yoktur.
Ölçülen şey kutunun kendisi değil, **kararın tek bir yerden mi çıktığıdır**.

#### Veri Düzlemi Nerede Akıyor

Denetim düzlemini merkezîleştirmek veri düzlemini de merkezîleştirmez; bu ikinci ve ayrı bir
seçimdir.

**Yerel anahtarlama**da istemcinin çerçevesi erişim noktasından çıkar ve doğrudan yerel ağa
girer. Denetleyici yalnız kuralı verir, trafiği görmez. Yol kısadır, denetleyici kesildiğinde
akan trafik etkilenmez, ama ilkenin uygulanması noktaların doğru yapılandırılmış olmasına
bağlıdır.

**Tünellenmiş veri düzlemi**nde çerçeve önce denetleyiciye taşınır, oradan ağa çıkar. Bunun
kazandırdığı şey tek noktadan uygulanan bir ilkedir: bütün kablosuz trafik aynı yerden geçer
ve aynı kurala çarpar. Ödediği şey ise yoldur — iki istemci yan yana dursa bile çerçeveleri
denetleyiciye kadar gidip döner — ve denetleyicinin bir darboğaz hâline gelmesidir.

Seçim ikili de değildir: kimi trafik yerelde bırakılıp kimi trafik tünellenebilir. Bu dersin
ölçümü **yalnız denetim düzlemini** değiştirir; veri düzleminin nereden aktığı ilişkilenme
kararına girmez ve ölçüme karışmaz.

#### Yapılandırma Sapması

Bağımsız modelin sayılabilir kusuru **yapılandırma sapmasıdır (configuration drift)**.
Noktalar aynı anda kurulmaz. İlk nokta bir kapsama şikâyeti üzerine yükseltilir, ikincisi
kurulduğu gibi kalır, üçüncüsü bir girişim şikâyeti üzerine kısılır. Her adım tek başına
makuldür; hiçbiri kayıt bırakmaz ve toplamı kimse görmez.

Sapmanın kaçınılmazlığı bir ölçek sorunudur. İki noktanın birbirine etkisi akılda tutulabilir;
on noktanın kırk beş ikili etkileşimi tutulamaz. Bir noktanın bütçesini yükseltmek yalnız o
noktanın kapsamasını büyütmez, komşularının kapsamasının nereden kesildiğini de değiştirir.
Kararın tek tek noktalarda alınması, bu etkileşimi görebilecek hiçbir yerin olmaması demektir.

Sonuç, aynı ağın içinde birbirinden farklı üç sınır çizilmesidir. Ölçüm bu durumu üç bütçeyle
kuruyor: bir nokta 58, biri 52, biri 46. Karşısına konan denetleyici rejimi ise üç noktaya da
tek bir değeri, 52'yi dağıtıyor. Değişen tek şey **kararın nerede alındığıdır**; istemciler,
uzaklıklar, girişim ve niyet aynı kalır.

Ölçümün varsayımları:

- **KB7** — Kırk istemci önceki dersin kurgusundan gelir; uzaklık ve girişim aynıdır. Kâhin
  yine hücre niyetidir: yarıçapı 30 m olan hücrenin içindeki istemci geçmeliydi.
- **KB8** — Hangi istemciyi hangi erişim noktasının duyduğu ayrı bir üreteçten gelir ve
  uzaklıktan bağımsızdır. `uzaklık` alanı, istemciyi duyan noktaya olan uzaklıktır.
- **KB9** — Üç nokta vardır ve bağımsız rejimdeki bütçeleri 58, 52 ve 46'dır. Bu üç değer
  yapılandırma sapmasının kurgusudur, bir güç taraması değildir; taramanın kendisi sonraki
  dersin konusudur.
- **KB10** — Denetleyici rejiminde üç noktanın da bütçesi 52'dir. İki rejim arasında
  **yalnız bu** değişir.
- **KB11** — Denetleyicinin dağıtımı anlıktır ve kayıpsızdır. Dağıtım gecikmesi ve
  denetleyicinin erişilemez olması ölçülmez; ikisi de metinde ayrıca ele alınır.
- **KB12** — Tutarlılık ölçümü aynı istemciyi üç bütçeyle ayrı ayrı değerlendirir. Bu bir
  hareket kurgusu değildir; istemci yerinde durur, yalnız değerlendiren nokta değişir.
  İstemcinin gerçekten yer değiştirmesi dolaşım dersinin konusudur.
- **KB13** — Küme 40 istemcidir; ölçülebilen en küçük fark **1/40 = 0,025**'tir.

#### Ölçüm

```python
"""Kararin yeri: bagimsiz erisim noktalari mi, ortak denetleyici mi."""
TOHUM = 20260811
YERLESIM = 20260812     # hangi istemciyi hangi erisim noktasi duyuyor
YARICAP = 30
ORTAK_GUC = 52          # denetleyicinin butun noktalara dagittigi tek deger
NOKTALAR = (("A", 58), ("B", 52), ("C", 46))    # ayri ayri verilmis butceler
KADEMELER = ((34, 6), (28, 4), (22, 2), (18, 1))


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def istemciler(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "uzaklik": 5 + r(41), "girisim": r(13)})
    y = uretec(YERLESIM)
    for o in liste:
        o["nokta"] = y(3)
    return liste


def isaret(o, guc):
    return guc - o["uzaklik"] - o["girisim"]


def hiz(o, guc):
    for esik, kademe in KADEMELER:
        if isaret(o, guc) >= esik:
            return kademe
    return 0


def hucre_niyeti(o, yaricap=YARICAP):
    return o["uzaklik"] <= yaricap


def ortam(o, guc):
    return hiz(o, guc) > 0


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def yerel(o):
    """Karar erisim noktasinda: istemciyi duyan noktanin kendi butcesi gecerli."""
    return ortam(o, NOKTALAR[o["nokta"]][1])


def merkezi(o):
    """Karar denetleyicide: butun noktalarda tek politika."""
    return ortam(o, ORTAK_GUC)


ist = istemciler()
print(f"{'nokta':>5s} {'butce':>6s} {'istemci':>8s} {'iliskilenen':>11s} "
      f"{'fazla gecen':>12s} {'fazla duran':>12s}")
for i, (ad, guc) in enumerate(NOKTALAR):
    k = [o for o in ist if o["nokta"] == i]
    d = fark(k, hucre_niyeti, lambda o, g=guc: ortam(o, g))
    print(f"{ad:>5s} {guc:6d} {len(k):8d} {d['dogru_gecti'] + d['yanlis_gecti']:11d} "
          f"{d['yanlis_gecti']:12d} {d['yanlis_durdu']:12d}")
print()

print(f"{'rejim':<12s} {'iliskilenen':>11s} {'tam hiz':>8s} {'dogru':>6s} "
      f"{'fazla gecen':>12s} {'fazla duran':>12s}")
for ad, duzenek, hizi in (("bagimsiz", yerel, lambda o: hiz(o, NOKTALAR[o["nokta"]][1])),
                          ("denetleyici", merkezi, lambda o: hiz(o, ORTAK_GUC))):
    d = fark(ist, hucre_niyeti, duzenek)
    print(f"{ad:<12s} {d['dogru_gecti'] + d['yanlis_gecti']:11d} "
          f"{sum(1 for o in ist if hizi(o) == 6):8d} "
          f"{d['dogru_gecti'] + d['dogru_durdu']:6d} "
          f"{d['yanlis_gecti']:12d} {d['yanlis_durdu']:12d}")
print()

ayrilan = [o for o in ist if len({ortam(o, g) for _, g in NOKTALAR}) > 1]
kademe_ayrilan = [o for o in ist if len({hiz(o, g) for _, g in NOKTALAR}) > 1]
print(f"iliskilenme karari noktadan noktaya degisen istemci: {len(ayrilan)}")
print(f"hiz kademesi noktadan noktaya degisen istemci: {len(kademe_ayrilan)}")
print()

print(f"{'nokta cifti':<11s} {'yalniz ilkinde':>14s} {'yalniz ikincide':>15s} "
      f"{'kademesi farkli':>15s}")
for adi, g1, g2 in (("A / B", 58, 52), ("B / C", 52, 46), ("A / C", 58, 46)):
    print(f"{adi:<11s} {sum(1 for o in ist if ortam(o, g1) and not ortam(o, g2)):14d} "
          f"{sum(1 for o in ist if ortam(o, g2) and not ortam(o, g1)):15d} "
          f"{sum(1 for o in ist if hiz(o, g2) != hiz(o, g1)):15d}")
```

```
nokta  butce  istemci iliskilenen  fazla gecen  fazla duran
    A     58       10           8            2            0
    B     52       18           9            0            2
    C     46       12           8            0            2

rejim        iliskilenen  tam hiz  dogru  fazla gecen  fazla duran
bagimsiz              25        5     34            2            4
denetleyici           23        9     36            0            4

iliskilenme karari noktadan noktaya degisen istemci: 14
hiz kademesi noktadan noktaya degisen istemci: 29

nokta cifti yalniz ilkinde yalniz ikincide kademesi farkli
A / B                    8               0              22
B / C                    6               0              21
A / C                   14               0              29
```

#### Daha Çok Bağlanan, Daha Az Çalışan

Bağımsız rejim **25** istemci ilişkilendiriyor, denetleyici rejimi **23**. Yalnız bu sütuna
bakan bir karşılaştırma bağımsız modeli kazanan ilan ederdi: iki istemci daha bağlanmış.

Yanındaki sütun bunu bozuyor. Tam hız kademesinde çalışan istemci bağımsız rejimde **5**,
denetleyici rejiminde **9**'dur. Daha çok istemci ilişkileniyor ve daha azı çalışıyor. Sebep
üst tabloda görünüyor: bütçesi 58'e çekilmiş A noktası kendi payına düşen istemcileri fazla
uzaktan topluyor, bütçesi 46'ya kısılmış C noktası ise kendi payındakileri alt kademelere
düşürüyor. Ortalaması, iki uçtan da kaybeden bir dağılımdır.

İki yön ayrı ayrı okunduğunda tablo daha da netleşiyor. **Fazla geçen** bağımsız rejimde
**2**, denetleyicide **0**. İki sızıntının ikisi de A noktasından geliyor — üst tablo bunu
doğrudan gösteriyor: A'nın fazla geçeni 2, öbür ikisininki 0. **Fazla duran** ise iki rejimde
de **4**'tür.

Bu eşitlik dersin en önemli satırıdır. Bir noktanın bütçesini yükseltmek **iki sızıntı satın
aldı ve eksiği bir istemci bile azaltmadı.** Kapsama kazancı, kazanılması gereken yere değil,
zaten kapsanmış olan yerin dışına gitti. Kursun ikinci iddiası budur: **düzeneği büyütmek
niyete yaklaştırmaz.**

#### Kararın Sahibi Kim

Alt iki tablo tutarlılığı ölçüyor. Kırk istemcinin **14**'ünde ilişkilenme kararı hangi
noktanın değerlendirdiğine göre değişiyor; **29**'unda hız kademesi değişiyor. Yani kırk
istemcinin yaklaşık üçte ikisi için "bu istemci ne alıyor" sorusunun cevabı istemcinin
durumunda değil, **kime denk geldiğinde** yazılı.

Son tablo çiftleri ayırıyor. A ile C arasında **14** istemci yalnız A'da ilişkilenebiliyor ve
**hiçbiri** yalnız C'de ilişkilenemiyor — asimetri tamdır, çünkü düşük bütçe yalnız
kaybettirir. Kademesi farklı olan istemci sayısı A ile B arasında **22**, B ile C arasında
**21**, A ile C arasında **29**'dur.

Bu sayılar bir kapsama sorunu gibi görünmez. Şikâyet eden kullanıcı "binanın şu köşesinde ağ
yavaş" der; ölçüm o köşede bir kapsama boşluğu bulmaz, çünkü boşluk yoktur. Bulunması gereken
şey, o köşeyi kapsayan noktanın **başka bir bütçeyle** çalıştığıdır.

Tutarsızlığın doğrudan bir sonucu dolaşımda ödenir. Bir istemci iki nokta arasında gezinirken
"burada duruyorum" ile "öbürüne geçiyorum" kararını **kendi ölçtüğü işaret gücüne** göre
verir; ölçtüğü işaret ise noktanın bütçesine bağlıdır. Bütçesi yüksek bir nokta istemciyi
uzaktan tutmayı sürdürür ve geçiş geç olur; bütçesi düşük bir nokta istemciyi erken bırakır.
İki bütçe aynı ağın içinde yan yana durduğunda geçiş eşiği ağın her yerinde aynı anlama
gelmez. Bu dersin ölçtüğü şey yalnız kararın **ayrılması**dır; geçişin kendisinin ne zaman
olması gerektiği ve erken ile geç geçişin iki ayrı hata olması dolaşım dersinin konusudur.

#### Denetleyicinin Kendi Kusurları

Denetleyici modelinin ölçülen üstünlüğü bedava değildir ve iki yerde ödenir.

**Birincisi tek noktadan arıza.** Denetleyici erişilemez olduğunda noktalar ne yapacak? İki
davranış vardır: ya yeni ilişkilenmeyi durdurup ilkeyi korurlar, ya da ellerindeki son
yapılandırmayla **yerel kalıp** çalışmayı sürdürürler. İkincisi seçilirse ve kesinti uzarsa
ağ yavaş yavaş bağımsız rejime döner — üstelik bu kez kimse fark etmeden. Ölçümün bağımsız
satırı, denetleyicisiz geçen uzun bir sürenin sonundaki hâldir.

**İkincisi ortak kusurdur.** Bağımsız modelde yanlış bir değer bir noktayı bozar; denetleyici
modelinde yanlış bir değer **bütün noktalara dağıtılır**. Ölçümdeki denetleyici rejimi
52'yi dağıttığı için sıfır sızdırıyor; 58'i dağıtsaydı sızıntı bütün ağa yayılacaktı. Ortak
görüş, ortak hatayı da ortaklaştırır.

Bu iki kusurun ikisi de yapılandırmanın **kaydedilmesiyle** daraltılır: dağıtılan değerin ne
olduğu, ne zaman değiştiği ve hangi noktaya ulaştığı yazılıysa, sapma bir ölçüm konusudur.
Yazılı değilse sapma yalnız kullanıcı şikâyetiyle görünür ve o şikâyet yanlış yeri gösterir.

#### Özet

- İlişkilenme bir çerçeve alışverişidir ve karar son adımda verilir; o adım hem kabulü hem
  verilen hız kademesini yazar, ikincisi hiçbir göstergede görünmez.
- Bağımsız erişim noktası kendi bütçesiyle karar verir ve komşusunu bilmez; denetleyici
  modeli denetim düzlemini merkezîleştirerek ortak bir görüş kurar.
- Yapılandırma sapması ölçülebilir bir kusurdur: üç ayrı bütçe **25** istemci ilişkilendirip
  **2** fazla geçen üretir, ortak politika **23** ilişkilendirip **0** sızdırır.
- **Fazla duran iki rejimde de 4'tür.** Bir noktanın bütçesini yükseltmek yalnız sızıntı
  satın aldı; eksiği hiç azaltmadı.
- Kırk istemcinin **14**'ünde ilişkilenme kararı, **29**'unda hız kademesi hangi noktaya denk
  geldiğine göre değişir; bu bir kapsama boşluğu olarak görünmez.

#### Sonraki Adım

Bu ölçümde bütçeler kurgudan geldi ve neden o değerlere ayarlandıkları sorulmadı. Oysa bir
kablosuz ağın tasarımı tam olarak bu sorudur: her noktaya hangi kanal, hangi bütçe verilecek
ve hücreler nerede birbirine değecek? Sonraki ders bütçeyi tek başına tarar — 58, 52, 46 ve
40 — ve her değerde iki yönü birden sayar. Orada görülecek ki bütçeyi düşürmek sızıntıyı
sıfırlar ve sıfırladığı anda hücrenin içinde bıraktığı eksik sessizce büyür.

### Kanal Planlama ve Kapsama

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/kanal-planlama-ve-kapsama

İşaret bütçesi 58, 52, 46 ve 40 iken ilişkilenen istemci 31, 23, 17 ve 13'tür; fazla geçen 5, 0, 0, 0 ve fazla duran 1, 4, 10, 14 olur — sızıntıyı sıfırlayan yapılandırma hücrenin içindeki on istemciyi dışarıda bırakır.

Önceki ders erişim noktalarının bütçelerini kurgudan aldı ve o değerlerin neden öyle
olduklarını sormadı. Ölçüm, üç ayrı bütçenin aynı istemciye üç ayrı cevap verdiğini gösterdi:
kırk istemcinin **14**'ünde ilişkilenme kararı, **29**'unda hız kademesi hangi noktaya denk
geldiğine göre değişiyordu.

Peki o bütçe kaç olmalıydı? Bir kablosuz ağın tasarımı tam olarak bu sorudur ve iki parçası
vardır: her noktaya hangi **kanal**, hangi **işaret bütçesi** verilecek. Bu dersin ölçtüğü
şey, bütçeyi tek başına değiştirmenin iki yöne birden ne yaptığıdır. Sonuç kursun en aykırı
tablosudur: sızıntıyı sıfırlayan yapılandırma, tasarımın sözünü en çok bozan yapılandırmadır.

#### Hücre, Örtüşme ve Yeniden Kullanma

Bir erişim noktasının kapsadığı alana **hücre** denir. Hücreler bir alanı döşerken iki kısıt
birden çalışır ve birbirine terstir.

Birinci kısıt **örtüşme**dir. Hücreler hiç örtüşmezse aralarında istemcinin hiçbir noktayı
duymadığı boşluklar kalır; istemci yürürken bağını kaybeder ve yeniden kurar. Bu yüzden
komşu hücrelerin kenarları bilerek üst üste bindirilir.

İkinci kısıt **yeniden kullanma mesafesi**dir. Örtüşen iki hücre aynı kanaldaysa birbirinin
girişimidir. Kanal sayısı sınırlı olduğu için aynı kanal er ya da geç yeniden kullanılır; plan
bu tekrarın **yeterince uzakta** olmasını sağlamaya çalışır.

```text
# ogretilen kanal yeniden kullanma deseni , kurgudur ve calistirilmamistir

bant D, ortusmeyen kanal kumesi: 1, 4, 7   (uc kanal)

  ust kat     [1] [4] [7] [1]
  orta kat    [7] [1] [4] [7]
  alt kat     [4] [7] [1] [4]

  ayni kanal en yakin komsusundan uc hucre uzakta
  yatay ortusme  : hucre yaricapinin ~%20'si
  dusey sizinti  : kat arasi zayiflama dusukse ust kat da girisim uretir

bant G, ortusmeyen kanal kumesi: 24 kanal
  ayni kanal desende hic tekrar etmez -> plan icinden girisim ~0
  bedeli: menzil kisadir, ayni alan icin daha cok nokta gerekir
```

Desen üç boyutludur ve bu sık atlanır. Aynı katta iyi ayrılmış iki kanal, üst kattaki
komşusuyla aynı olabilir; kat arası zayıflama düşükse dikey girişim yatay girişimden büyük
çıkar. Yukarıdaki sayılar **kurgudur**; gerçek bantların kanal sayıları ve hangi aralıkların
kullanılabildiği ülkeden ülkeye değişir ve düzenleyici kararlarla güncellenir. Bu dersin
ölçtüğü hiçbir şey o sayılara bağlı değildir.

#### Saha Araştırması Neyi Ölçer

Plan masada yapılır, doğrulaması sahada yapılır. **Saha araştırması (site survey)** binanın
içinde noktadan noktaya gezip her yerde hangi noktanın hangi işaret gücüyle duyulduğunu
kaydeder. Çıktısı bir kapsama haritasıdır.

Haritanın söylediği ve söylemediği ayrılmalıdır. Harita **ilişkilenme sınırını** iyi verir:
nerelerde hiçbir nokta eşiğin üstünde duyulmuyor. **Hız kademesini** ise ancak ölçtüğü anda
verir; girişim gün içinde değişir, komşu ağlar açılıp kapanır, insan gövdeleri işaret yolunu
keser. Ve harita **niyeti hiç bilmez** — tasarımın hangi alanda tam hız sözü verdiği haritada
yazmaz, planda yazar.

Bu ders bir saha araştırması yapmaz. Kurgusal kırk istemcinin gerçek uzaklığını ve gerçek
girişimini biliriz; kâhin budur. Ölçülen şey, verilen bütçenin bu bilinen gerçekten kaç
istemcide ayrıldığıdır.

Bir araştırmanın iki yönü sayılabilir kılması için üç şeyi birden kaydetmesi gerekir: ölçüm
noktasının **nerede** olduğu, o noktada ölçülen **işaret gücü** ve o noktanın planda hangi
hücrenin içinde sayıldığı. Üçüncüsü yazılmazsa fazla geçen ile fazla duran ayrılamaz — elde
yalnız bir güç haritası kalır ve harita hangi ölçümün niyet dışı olduğunu söyleyemez. Ölçüm
kaydı ile plan kaydı ayrı dosyalarda durduğunda bu ayrım pratikte çoğu zaman yapılmaz.

Ölçümün varsayımları:

- **KB14** — Kırk istemci, uzaklık ve girişim ilk dersin kurgusundan gelir. Hücre içinde 27,
  dışında 13 istemci vardır.
- **KB15** — Niyet değişmez: yarıçapı 30 m olan hücrenin içindeki istemci geçmeliydi. Bütçe
  taraması niyeti değil yalnız düzeneği değiştirir.
- **KB16** — Taranan bütçeler 58, 52, 46 ve 40'tır. Aralarındaki 6 birimlik adım kurgusaldır
  ve kademe eşiklerinin aralığıyla aynı büyüklük mertebesindedir.
- **KB17** — Tek bir erişim noktası ölçülür. Komşu noktalardan gelen katkı `girişim` alanında
  toplanmıştır; ayrı bir nokta olarak modellenmez.
- **KB18** — Kanal planı, girişime bir **tavan** koyan bir düzenek olarak modellenir. Plan ne
  kadar iyiyse tavan o kadar düşüktür; tavan 12 plansız duruma, tavan 0 hiç girişim
  olmamasına karşılık gelir.
- **KB19** — Girişim tavanı ölçümünde bütçe 52'de sabit tutulur. **Tek seferde tek şey**
  değişir: ya bütçe ya tavan.
- **KB20** — Tam hız sütunu kademe 6'daki istemci sayısıdır; ilişkilenen sütunu kademesi
  sıfırdan büyük olanların sayısıdır.
- **KB21** — Küme 40 istemcidir; ölçülebilen en küçük fark **1/40 = 0,025**'tir.

#### Ölçüm

```python
"""Hucre tasarimi: butce taramasi ve kanal planinin girisim tavani."""
TOHUM = 20260811
YARICAP = 30
KADEMELER = ((34, 6), (28, 4), (22, 2), (18, 1))


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def istemciler(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "uzaklik": 5 + r(41), "girisim": r(13)})
    return liste


def isaret(o, guc=52, tavan=12):
    """Kanal plani girisime bir tavan koyar; plan iyilestikce tavan duser."""
    return guc - o["uzaklik"] - min(o["girisim"], tavan)


def hiz(o, guc=52, tavan=12):
    for esik, kademe in KADEMELER:
        if isaret(o, guc, tavan) >= esik:
            return kademe
    return 0


def hucre_niyeti(o, yaricap=YARICAP):
    return o["uzaklik"] <= yaricap


def ortam(o, guc=52, tavan=12):
    return hiz(o, guc, tavan) > 0


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


ist = istemciler()
print(f"istemci {len(ist)} | hucre ici {sum(1 for o in ist if hucre_niyeti(o))} "
      f"| hucre disi {sum(1 for o in ist if not hucre_niyeti(o))}")
print()

print(f"{'guc':>4s} {'iliskilenen':>11s} {'tam hiz':>8s} {'fazla gecen':>12s} "
      f"{'fazla duran':>12s} {'toplam sapma':>13s}")
for guc in (58, 52, 46, 40):
    d = fark(ist, hucre_niyeti, lambda o, g=guc: ortam(o, g))
    print(f"{guc:4d} {d['dogru_gecti'] + d['yanlis_gecti']:11d} "
          f"{sum(1 for o in ist if hiz(o, guc) == 6):8d} {d['yanlis_gecti']:12d} "
          f"{d['yanlis_durdu']:12d} {d['yanlis_gecti'] + d['yanlis_durdu']:13d}")
print()

print(f"{'girisim tavani':>14s} {'iliskilenen':>11s} {'tam hiz':>8s} "
      f"{'fazla gecen':>12s} {'fazla duran':>12s}")
for tavan in (12, 8, 4, 0):
    d = fark(ist, hucre_niyeti, lambda o, t=tavan: ortam(o, 52, t))
    print(f"{tavan:14d} {d['dogru_gecti'] + d['yanlis_gecti']:11d} "
          f"{sum(1 for o in ist if hiz(o, 52, tavan) == 6):8d} "
          f"{d['yanlis_gecti']:12d} {d['yanlis_durdu']:12d}")
print()

print("46 gucunde disarida kalan hucre ici istemciler (no, uzaklik, girisim):")
print([(o["no"], o["uzaklik"], o["girisim"]) for o in ist
       if hucre_niyeti(o) and not ortam(o, 46)])
print()
print("58 gucunde sizan hucre disi istemciler (no, uzaklik, girisim):")
print([(o["no"], o["uzaklik"], o["girisim"]) for o in ist
       if not hucre_niyeti(o) and ortam(o, 58)])
```

```
istemci 40 | hucre ici 27 | hucre disi 13

 guc iliskilenen  tam hiz  fazla gecen  fazla duran  toplam sapma
  58          31       13            5            1             6
  52          23        9            0            4             4
  46          17        2            0           10            10
  40          13        0            0           14            14

girisim tavani iliskilenen  tam hiz  fazla gecen  fazla duran
            12          23        9            0            4
             8          24        9            0            3
             4          27        9            0            0
             0          32       13            5            0

46 gucunde disarida kalan hucre ici istemciler (no, uzaklik, girisim):
[(4, 24, 11), (8, 20, 9), (10, 29, 0), (12, 30, 6), (13, 29, 2), (20, 25, 5), (25, 30, 12), (27, 20, 10), (32, 30, 7), (34, 23, 11)]

58 gucunde sizan hucre disi istemciler (no, uzaklik, girisim):
[(6, 37, 3), (14, 32, 7), (16, 33, 5), (28, 33, 2), (31, 35, 0)]
```

#### Büyütmek Niyete Yaklaştırmaz

Üst tablo bütçeyi 58'den 40'a indiriyor ve dört sayıyı birden gösteriyor.

Bütçe **58** iken ilişkilenen istemci **31**'dir — 52'deki 23'ten sekiz fazla. Kapsama
kazancı gerçektir. Ama kazanılan sekizin **5**'i hücrenin dışındadır: son tabloda uzaklıkları
32 ile 37 m arasında, hepsi de tasarımın söz vermediği alanda. Hücrenin içindeki eksik
yalnız 4'ten **1**'e iniyor. Yani sekiz istemcilik kazancın **üçü** niyete gitti, **beşi**
dışarı sızdı.

**Kural şudur: düzeneği büyütmek niyete yaklaştırmaz.** Bütçeyi yükseltmek hücrenin sınırını
her yöne birden büyütür ve büyümenin nereye gideceğini seçemez. Kazanılan kapsama, sızan
kapsamayla ödenir.

Toplam sapma sütunu bunu tek bir sayıda topluyor: **6, 4, 10, 14**. En düşük değer 52'dedir.
Ne en yüksek bütçe ne en düşüğü niyete en yakın olanıdır; niyete en yakın olan, sözün
verildiği yarıçapa **denk düşen** bütçedir. Bir bütçe "daha çok" ya da "daha az" olarak değil,
**yarıçapa göre** doğru ya da yanlıştır.

#### Sıfır Sızıntı Neyi Gizler

Alt üç satır kursun üçüncü iddiasını ödüyor. Bütçe **46** iken fazla geçen **0**, bütçe
**40** iken yine **0**. Yalnız bu sütunu raporlayan bir denetim iki yapılandırmayı da
kusursuz bulur; hatta 52'yi de kusursuz bulur, çünkü orada da sızıntı yoktur. Üç yapılandırma
aynı görünür.

Öbür sütun üçünü birbirinden ayırıyor. Fazla duran 52'de **4**, 46'da **10**, 40'ta **14**.
46 gücünde hücrenin içindeki **on** istemci hiç ilişkilenemiyor; 40'ta **on dört**. Hücrenin
içinde 27 istemci olduğuna göre, 40 bütçesinde hücre içindekilerin yarıdan fazlası dışarıda
kalıyor. Tasarımın sözü tutulmuyor ve sızıntı sütunu bunu hiç göstermiyor.

Dışarıda kalan on istemcinin listesi ikinci bir şey daha söylüyor. Uzaklıkları 20 ile 30 m
arasında değişiyor — yani bazıları hücrenin tam ortasında. 8 ve 27 numaralı istemciler 20
m'de duruyor ve yine de ilişkilenemiyor; ikisinin de girişimi yüksek. **Bütçeyi kısmak
girişimi olan istemciyi önce vurur**, çünkü ikisi aynı hesapta toplanır.

Buradan çıkan pratik kural: bir kablosuz ağın raporu **tek sayı** ile verilemez. "Sızıntı
yok" ile "kapsama tam" ayrı iddialardır ve biri öbürünü desteklemez.

#### Kapsama İçin mi, Kapasite İçin mi

Tablodaki 46 ve 40 satırlarını "yanlış bütçe" diye okumak eksik olur. Onları eksik yapan şey
bütçenin kendisi değil, kurgunun **tek bir erişim noktası** taşımasıdır (KB17). Aynı alanı
daha çok ve daha küçük hücreyle döşemek, düşük bütçeyi doğru bütçe hâline getirir.

İki tasarım hedefi burada ayrılır. **Kapsama için tasarım** en az sayıda noktayla boşluk
bırakmamaya çalışır: hücreler büyük, bütçeler yüksek, aynı kanal daha sık yeniden kullanılır.
**Kapasite için tasarım** ise tersini yapar: hücreler küçültülür, bütçeler kısılır, nokta
sayısı artırılır. Küçük hücre daha az istemci taşır ve ortamı bekleyen sıra kısalır; ayrıca
her istemci noktaya daha yakın olduğu için **kademesi yükselir**.

Ölçümün dördüncü sütunu bu ikinci hedefin neden var olduğunu gösteriyor. 52 bütçesinde hücre
içindeki 27 istemcinin yalnız 9'u tam hızda. Bütçeyi yükseltmek bunu düzeltmiyor — 58'de tam
hız 13, ama beraberinde 5 sızıntı geliyor. Tam hızı gerçekten yükseltmenin yolu istemciyi
noktaya **yaklaştırmaktır**, yani daha çok hücre kurmaktır.

Kanal genişliği aynı ödünleşimin ikinci yüzüdür. Dört kanalı birleştirip tek bir geniş kanal
kurmak bir istemcinin alabileceği en yüksek hızı yükseltir, ama örtüşmeyen kanal sayısını
dörde böler ve yeniden kullanma mesafesini kısaltır. Yoğun bir alanda geniş kanal, kazandırdığı
hızı girişim olarak geri alır; seyrek bir alanda kazanç kalır. Kanal genişliği bu yüzden bir
başarım ayarı değil, bir **plan** kararıdır.

#### Kanal Planının Payı

Alt tablo bütçeyi 52'de sabitleyip yalnız girişim tavanını değiştiriyor — yani yalnız kanal
planını iyileştiriyor.

Plansız durumda (tavan **12**) ilişkilenen **23**, fazla duran **4**. Tavan **8**'e
indiğinde eksik **3**'e, **4**'e indiğinde **0**'a iniyor: ilişkilenen **27** oluyor ve bu
tam olarak hücrenin içindeki istemci sayısıdır. **Fazla geçen de 0.** Kanal planı, bütçeye
hiç dokunmadan niyeti **tam** karşıladı.

Son satır beklenmedik olanıdır. Girişim tamamen kaldırıldığında (tavan **0**) ilişkilenen
**32**'ye çıkıyor ve fazla geçen **0**'dan **5**'e fırlıyor. Hücre, tasarımın çizdiğinden
büyüyor. Sebep açık: sınırı çizen şey yalnız bütçe değil, bütçe **eksi** girişimdir. Niyetin
karşılığı olan yarıçap, belirli bir girişim düzeyi varsayılarak tutturulmuştu; girişim
kalkınca aynı bütçe daha uzağa erişiyor.

Bu, kanal planlamanın nasıl okunması gerektiğini değiştirir. Girişimi azaltmak tek başına bir
iyileştirme değildir; **bütçeyle birlikte ayarlanması gereken ikinci bir düğmedir.** Planı
iyileştirip bütçeyi olduğu gibi bırakmak, sızmayan bir yapılandırmayı sızan bir
yapılandırmaya çevirebilir.

Tam hız sütunu ise bütün satırlarda ısrarcı. Tavan 4'te niyet tam karşılanmışken bile tam
hızda çalışan istemci **9**'dur — hücre içindeki 27'nin üçte biri. İlişkilenmenin iki yönde
de kusursuz olması, çalışmanın kusursuz olduğu anlamına gelmiyor.

Bu tablodaki farkların ölçülebilirliği de kontrol edilmelidir. Fazla duranın 4'ten 0'a inmesi
kırk istemcilik kümede **0,100**'lük bir paydır ve ölçülebilen en küçük farkın (KB21,
**0,025**) dört katıdır. Fazla geçenin 0'dan 5'e çıkması **0,125**'tir. İkisi de bandın
rahatça içindedir. Tavan 12'den 8'e inerken eksiğin 4'ten 3'e inmesi ise tek istemciliktir ve
tam sınırda durur; o adımdan bir eğilim okunabilir, bir sonuç okunamaz.

#### Özet

- Hücre tasarımı iki ters kısıt taşır: boşluk bırakmamak için örtüşme gerekir, girişim
  üretmemek için aynı kanalın yeniden kullanma mesafesi gerekir.
- Bütçe 58, 52, 46 ve 40 iken ilişkilenen **31, 23, 17, 13**; fazla geçen **5, 0, 0, 0**;
  fazla duran **1, 4, 10, 14**'tür. Toplam sapma **6, 4, 10, 14** ile 52'de en düşüktür.
- Bütçeyi büyütmek kazancın üçte ikisini hücrenin dışına gönderir; düzeneği büyütmek niyete
  yaklaştırmaz.
- Sızıntıyı sıfırlayan üç yapılandırma tek sütunda aynı görünür; öbür sütunda eksikleri
  **4**, **10** ve **14**'tür. Tek yönü saymak öbür yönü gizler.
- Girişim tavanı 4'e indiğinde niyet **tam** karşılanır (0 fazla geçen, 0 fazla duran); tavan
  0'a indiğinde hücre büyür ve **5** istemci sızar. Girişim, sınırın bir parçasıdır.

#### Sonraki Adım

Buraya kadar her istemci tek bir noktaya ait sayıldı ve yerinden hiç kımıldamadı. Oysa
örtüşme bilerek kuruldu: kenardaki bir istemci iki noktayı birden duyar ve yürüdükçe biri
zayıflarken öbürü güçlenir. O zaman ilişkilenme kararı bir kez değil, **defalarca** verilir.
Sonraki ders geçişin ne zaman olması gerektiğini ölçer: geçiş eşiği yükseltildiğinde istemci
erken bırakılır, düşürüldüğünde zayıf noktaya yapışır. Erken geçiş ile geç geçiş aynı
düğmenin iki ucudur ve **iki ayrı hatadır**.

### Dolaşım ve Bant Yönlendirme

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/dolasim-ve-bant-yonlendirme

Geçiş eşiği 30'dan 14'e indikçe fazla geçen 8'den 0'a iner ve fazla duran 0'dan 8'e çıkar; erken geçiş ile geç geçiş aynı düğmenin iki ucudur ve tek yönü düzeltmek öbürünü büyütür.

Önceki ders hücreleri bilerek örtüştürdü: boşluk kalmasın diye komşu hücrelerin kenarları üst
üste bindirildi. Ölçüm bütçeyi taradı ve istemciler yerlerinde durdu — kırk istemcinin
hiçbiri kımıldamadı.

Örtüşme tam da kımıldayanlar için kurulmuştu. Kenardaki bir istemci iki noktayı birden duyar;
yürüdükçe biri zayıflar, öbürü güçlenir. O zaman ilişkilenme kararı bir kez değil **defalarca**
verilir ve her seferinde aynı soru sorulur: elimdekini bırakayım mı? Bu dersin ölçtüğü şey o
sorunun eşiğidir. Eşiği yükseltmek istemciyi erken bırakır, düşürmek zayıf noktaya yapıştırır.
İkisi de hatadır ve **aynı sayıda görünmezler.**

#### Geçiş Kararını Kim Verir

**Dolaşım (roaming)**, bir istemcinin bağını bir erişim noktasından ötekine taşımasıdır. İlk
söylenmesi gereken şey, kararın kimde olduğudur: karar **istemcidedir**. Ağ istemciyi bir
noktadan atabilir, ona komşularını bildirebilir, hatta belirli bir noktaya gitmesini
önerebilir; ama istemci hangi noktaya ilişkileneceğini kendi seçer.

Bu, ölçümün neden iki yönlü olduğunu doğrudan açıklar. Ağın elindeki tek şey **eşiklerdir**:
hangi işaret gücünün altında istemciye "artık seni tutmuyorum" denecek, komşu listesinde ne
bildirilecek. Eşik ağın yazdığı, karar istemcinin verdiği şeydir.

```text
# ogretilen gecis dizisi , kurgudur ve calistirilmamistir

1. nokta A -> istemci     komsu bildirimi
                            A: kanal 4 , olculen isaret 21
                            B: kanal 1 , olculen isaret 29
                            C: kanal 7 , olculen isaret 12

2. istemci                karar
                            elimdeki isaret 21 , esik 22 -> birak

3. istemci -> nokta B     iliskilenme istegi

4. nokta B -> istemci     iliskilenme yaniti
                            sonuc: kabul , verilen kademe 4

5. nokta A                eski bag dusurulur
                            <-- 2. ve 3. adim arasinda cerceve kaybi olur
```

Beşinci adımın altındaki not dolaşımın asıl maliyetidir. İki ilişkilenme arasında istemci
hiçbir noktaya bağlı değildir; o aralıkta gelen çerçeveler düşer. Aralık kısaysa üst
katmanlar bunu bir gecikme dalgalanması olarak yutar, uzunsa bağlantı kopmuş gibi görünür.
Geçiş sırasında yeniden kurulması gereken başka şeyler de vardır ve bunlardan biri sonraki
dersin konusudur.

Birinci adımın da bir bedeli vardır ve daha az görünür. İstemci komşularını bilmiyorsa onları
kendi bulmak zorundadır; bulmak için de öbür kanalları dinlemesi gerekir. Bir kanalı
dinlerken kendi kanalında değildir — yani o sırada gelen çerçeveleri kaçırır. **Tarama, geçiş
olmasa bile kayıp üretir.** Bir istemci ne kadar sık tararsa komşularını o kadar taze bilir ve
o kadar çok çerçeve kaçırır.

Komşu bildirimi tam bu ödünleşimi hafifletmek içindir: ağ, istemcinin arayacağı listeyi ona
verir. İstemci artık on kanal yerine bildirilen üçünü dinler. Ama bildirimi kim yazar sorusu
önceki dersin sorusudur — bağımsız bir erişim noktası komşularını bilmez, ortak görüş yoksa
liste de yoktur. Dolaşımın kalitesi, kararın nerede alındığına bu noktadan bağlanır.

#### Erken Geçiş ile Geç Geçiş

Ölçümün kurgusu bir **koridordur**: iki erişim noktası 50 m arayla duruyor ve her istemci bu
doğru üzerinde bir yerde. İstemcinin A'ya uzaklığı ilk dersin `uzaklık` alanıdır; B'ye
uzaklığı `50 - uzaklık`.

Niyet en yalın hâliyle şudur: **istemci hangi noktaya yakınsa ona ait olmalıdır.** Önceki
dersteki örtüşme burada bir belirsizlik yaratır — 20 ile 30 m arasındaki bir istemciyi iki
hücre de kendi içinde sayar. Kâhinin tek bir cevap vermesi için en yakın nokta kuralı
seçilir; koridorun ortası olan 25 m sınırdır.

Düzenek ise niyetin bilebildiği şeyi bilmez. İstemci kendi konumunu ölçmez; yalnız
**elindeki noktanın işaret gücünü** ölçer ve o güç eşiğin altına düştüğünde bırakır. İşaret
gücü uzaklığa **ve girişime** bağlı olduğundan, aynı uzaklıktaki iki istemci farklı zamanlarda
bırakır.

İki hata buradan doğar:

- **Erken geçiş** — istemci hâlâ A'ya yakınken bırakır. Niyet durduracaktı, düzenek geçirdi:
  **fazla geçen**.
- **Geç geçiş** — istemci çoktan B'ye yaklaşmışken A'ya yapışır. Niyet geçirecekti, düzenek
  durdurdu: **fazla duran**.

#### Bant Yönlendirme Neyi Bilmez

**Bant yönlendirme (band steering)** ikinci bir geçiş kararıdır: istemciyi menzili kısa ama
kademe tavanı yüksek olan geniş banda mı, menzili uzun ama tavanı düşük olan dar banda mı
koymalı?

Doğru cevap istemcinin geniş bantta gerçekten ne alacağına bağlıdır. Sorun şudur: **istemci
geniş bandı henüz denemedi.** Yönlendirme kararı verilirken elde yalnız dar bant okuması
vardır ve karar o okumayla verilir. Kural bir **vekil ölçümdür** — ölçmek istediği şeyi değil,
onunla ilişkili başka bir şeyi ölçer.

Ölçümün varsayımları:

- **KB22** — Kırk istemci, uzaklık ve girişim ilk dersin kurgusundan gelir. İşaret bütçesi
  dolaşım ölçümünde 52'de sabittir.
- **KB23** — Koridor kurgusu: iki nokta 50 m arayla durur, istemcinin B'ye uzaklığı
  `50 - uzaklık`tır. Niyet en yakın nokta kuralıdır; sınır 25 m'dir.
- **KB24** — Düzenek yalnız elindeki noktanın işaret gücünü görür. Konum, B'nin işareti ve
  istemcinin yönü ölçüme girmez.
- **KB25** — Taranan geçiş eşikleri 30, 26, 22, 18 ve 14'tür. Tek seferde yalnız eşik
  değişir.
- **KB26** — Kararsızlık ölçümünde işaretin kısa sürede **3 birim** oynadığı varsayılır. Bir
  istemci, oynama aralığı hem bırakma hem dönme eşiğini kesiyorsa kararsız sayılır; histerezis
  payı 0 iken iki eşik çakışıktır.
- **KB27** — Bant yönlendirmede dar bant 58, geniş bant 46 bütçesiyle modellenir; geniş bandın
  kademe tavanı iki katıdır (`2 × kademe`). Bu, menzil–hız ödünleşiminin kurgusudur.
- **KB28** — Bant niyeti kâhinden gelir: istemci geniş bantta **gerçekten daha çok
  alıyorsa** oraya aittir. Kâhin iki bandın da kademesini bilir.
- **KB29** — Yönlendirme kuralı yalnız dar bant okumasını görür. Geniş bant okuması karara
  girmez; girseydi kural değil ölçüm olurdu.
- **KB30** — Küme 40 istemcidir; ölçülebilen en küçük fark **1/40 = 0,025**'tir.

#### Ölçüm

```python
"""Dolasim ve bant yonlendirme: erken gecis ile gec gecis iki ayri hatadir."""
TOHUM = 20260811
GUC = 52
KORIDOR = 50        # iki erisim noktasi arasindaki uzaklik, metre
OYNAKLIK = 3        # isaretin kisa surede oynadigi aralik
KADEMELER = ((34, 6), (28, 4), (22, 2), (18, 1))


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def istemciler(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "uzaklik": 5 + r(41), "girisim": r(13)})
    return liste


def isaret(o, guc=GUC):
    return guc - o["uzaklik"] - o["girisim"]


def hiz(o, guc=GUC):
    for esik, kademe in KADEMELER:
        if isaret(o, guc) >= esik:
            return kademe
    return 0


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def gecis_niyeti(o):
    """Istemci hangi noktaya yakinsa ona ait olmalidir."""
    return o["uzaklik"] > KORIDOR / 2


def gecis(o, esik):
    """Duzenek: elindeki noktanin isareti esigin altina duserse birak."""
    return isaret(o) < esik


def kararsiz(o, esik, pay):
    """Isaret oynadikca karar iki esigi de kesiyorsa istemci gidip gelir."""
    return esik + pay - OYNAKLIK <= isaret(o) <= esik + OYNAKLIK


ist = istemciler()
print(f"istemci {len(ist)} | koridor {KORIDOR} m | B'ye ait olmasi gereken "
      f"{sum(1 for o in ist if gecis_niyeti(o))}")
print()

print(f"{'gecis esigi':>11s} {'gecen':>6s} {'dogru':>6s} {'fazla gecen':>12s} "
      f"{'fazla duran':>12s}")
for esik in (30, 26, 22, 18, 14):
    d = fark(ist, gecis_niyeti, lambda o, e=esik: gecis(o, e))
    print(f"{esik:11d} {d['dogru_gecti'] + d['yanlis_gecti']:6d} "
          f"{d['dogru_gecti'] + d['dogru_durdu']:6d} {d['yanlis_gecti']:12d} "
          f"{d['yanlis_durdu']:12d}")
print()

print(f"{'histerezis payi':>15s} {'kararsiz istemci':>17s}")
for pay in (0, 2, 4, 6):
    print(f"{pay:15d} {sum(1 for o in ist if kararsiz(o, 22, pay)):17d}")
print()

DAR, GENIS = 58, 46


def hiz_dar(o):
    return hiz(o, DAR)


def hiz_genis(o):
    """Genis bant: menzil kisa, kademe tavani iki kat."""
    return 2 * hiz(o, GENIS)


def bant_niyeti(o):
    return hiz_genis(o) > hiz_dar(o)


def yonlendirme(o, esik):
    """Karar yalniz dar bant okumasiyla verilir; genis bant henuz denenmedi."""
    return isaret(o, DAR) >= esik


print(f"{'yonlendirme esigi':>17s} {'genise itilen':>13s} {'dogru':>6s} "
      f"{'fazla gecen':>12s} {'fazla duran':>12s}")
for esik in (44, 40, 36, 32):
    d = fark(ist, bant_niyeti, lambda o, e=esik: yonlendirme(o, e))
    print(f"{esik:17d} {d['dogru_gecti'] + d['yanlis_gecti']:13d} "
          f"{d['dogru_gecti'] + d['dogru_durdu']:6d} {d['yanlis_gecti']:12d} "
          f"{d['yanlis_durdu']:12d}")
print()
print(f"genise ait olmasi gereken istemci: {sum(1 for o in ist if bant_niyeti(o))}")
print("fazla gecenlerin kademe kaybi (no, dar kademe, genis kademe):")
print([(o["no"], hiz_dar(o), hiz_genis(o)) for o in ist
       if yonlendirme(o, 36) and not bant_niyeti(o)])
```

```
istemci 40 | koridor 50 m | B'ye ait olmasi gereken 19

gecis esigi  gecen  dogru  fazla gecen  fazla duran
         30     27     32            8            0
         26     27     32            8            0
         22     19     36            2            2
         18     17     36            1            3
         14     11     32            0            8

histerezis payi  kararsiz istemci
              0                 9
              2                 9
              4                 6
              6                 2

yonlendirme esigi genise itilen  dogru  fazla gecen  fazla duran
               44             7     38            0            2
               40             9     40            0            0
               36            13     36            4            0
               32            13     36            4            0

genise ait olmasi gereken istemci: 9
fazla gecenlerin kademe kaybi (no, dar kademe, genis kademe):
[(1, 6, 4), (11, 6, 4), (23, 6, 4), (36, 6, 4)]
```

#### Eşik Dengeyi Kaydırır

Üst tablo tek bir düğmeyi çeviriyor ve iki sütun ters yönde hareket ediyor.

Eşik **30** iken **fazla geçen 8**, **fazla duran 0**. İstemciler A'ya yakınken bırakıyor;
sekizi hâlâ A'nın tarafındayken B'ye geçmiş. Hiç kimse geç kalmıyor, çünkü eşik o kadar
yüksek ki herkes zamanından önce gidiyor.

Eşik **14** iken tam tersi: **fazla geçen 0**, **fazla duran 8**. Kimse erken gitmiyor,
sekiz istemci B'ye çoktan yaklaşmışken A'ya yapışıyor. Yapışan istemci hem kendi kademesini
düşük tutar hem ortamı uzun tutar; ilk dersteki paylaşılan süre hesabı burada karşımıza
çıkar.

Ortadaki üç satır dengenin kaydığı yeri gösteriyor: **2/2**, **1/3** ve arada 30 ile 26'nın
aynı satırı vermesi. İkisinin aynı çıkması kurgunun çözünürlüğünden gelir — 26 ile 30
arasında hiçbir istemcinin işaret gücü yoktur, dolayısıyla o aralıkta eşiği oynatmak hiçbir
kararı değiştirmez. Ölçüm bandı (KB30, **0,025**) bu boşluğu göremez.

Okunacak kural şudur: **erken geçiş ile geç geçiş aynı düğmenin iki ucudur.** Yalnız yapışma
şikâyeti alan bir işletmeci eşiği yükseltir ve yapışmayı bitirir; bitirdiği anda erken geçiş
başlar ve o da bir şikâyettir — üstelik farklı bir şikâyet, çünkü erken geçiş kısa kesintiler
üretir, yapışma ise sürekli yavaşlık. İki yönü ayrı saymayan bir ölçüm, düğmeyi bir uçtan
öbür uca taşımaktan başka bir şey yapamaz.

#### Gidip Gelme ve Histerezis

Orta tablo başka bir kusuru sayıyor. İşaret gücü sabit değildir; kısa sürede birkaç birim
oynar (KB26). Eşiğin tam kenarında duran bir istemci, bu oynamayla bırakma kararını verir,
sonra geri döner, sonra yine bırakır. Buna **gidip gelme** denir ve her turda bir çerçeve
kaybı üretir.

Tek eşikli düzenekte (histerezis payı **0**) kırk istemcinin **9**'u bu bandın içinde. Payı
**4**'e çıkarmak kararsız istemciyi **6**'ya, **6**'ya çıkarmak **2**'ye indiriyor. Düzenek
şudur: bırakma eşiği ile dönme eşiği ayrılır; istemci ancak işaret alt eşiğin altına düşünce
bırakır, ancak üst eşiğin üstüne çıkınca döner. Aradaki pay oynamayı yutar.

Payın bedeli üst tabloda okunur. Bırakma eşiğini sabit tutup dönme eşiğini yükseltmek, geri
dönüşü zorlaştırır: yanlış noktaya gitmiş bir istemci orada daha uzun kalır. Histerezis
kararsızlığı azaltır, **yanlış kararın ömrünü uzatır.** Pay 2'nin hiçbir şeyi
değiştirmemesi de aynı çözünürlük sorunudur — 2 birimlik bir pay, 3 birimlik bir oynamanın
altındadır ve hiçbir istemciyi banttan çıkarmaz.

#### Yanlış Okumayla Verilen Karar

Alt tablo bant yönlendirmeyi ölçüyor. Kırk istemcinin **9**'u gerçekten geniş banda ait;
yönlendirme kuralı ise bunu dar bant okumasından tahmin etmeye çalışıyor.

Eşik **44** iken kural **7** istemciyi itiyor: **fazla geçen 0**, **fazla duran 2**. Kural
temkinli; kimseyi yanlış yere göndermiyor ama iki istemciyi hak ettiği bantta çalıştırmıyor.
Eşik **36** iken **13** istemci itiliyor: **fazla geçen 4**, **fazla duran 0**. Bu dördü
son satırda listeleniyor ve bedelleri belli — dar bantta kademe **6** alacaklarken geniş
bantta **4** alıyorlar. Kural onları "iyileştirmek" için ittiği yerde yavaşlatıyor.

Eşik **40** satırı **40/40** doğru veriyor: **0 fazla geçen, 0 fazla duran**. Bu satır dikkatle
okunmalıdır. Kuralın doğru olduğunu göstermez; bu kümede o kesimin niyetle çakıştığını
gösterir. Kural hâlâ ölçmek istediği şeyi ölçmüyor — geniş bandın okumasını hiç görmüyor
(KB29). Başka bir istemci dağılımında aynı eşik pekâlâ yanılabilir, çünkü vekil ölçümün
doğruluğu ölçtüğü kümeye bağlıdır.

Ve eşik 36 ile 32'nin aynı satırı vermesi, üst tablodaki 30–26 çiftinin karşılığıdır: eşiği
oynatmanın hiçbir kararı değiştirmediği aralıklar vardır. Bir eşiğin "ayarlandığı" her seferde
gerçekten bir şeyin değiştiği varsayılamaz.

#### Özet

- Dolaşım kararını istemci verir; ağın elindeki tek düzenek eşiklerdir. Bu yüzden ölçü, ağın
  niyeti ile istemcinin kararı arasındaki farktır.
- Geçiş eşiği 30'dan 14'e indikçe fazla geçen **8, 8, 2, 1, 0**, fazla duran **0, 0, 2, 3, 8**
  olur. Erken geçiş ile geç geçiş aynı düğmenin iki ucudur.
- Tek eşikli düzenekte **9** istemci gidip gelme bandındadır; histerezis payı 4 ve 6 olduğunda
  bu sayı **6** ve **2**'ye iner, ama yanlış kararın ömrü uzar.
- Bant yönlendirme kuralı geniş bandın okumasını hiç görmez; eşik 44'te **2** istemci hak
  ettiği banda gitmez, eşik 36'da **4** istemci kademe 6'dan kademe 4'e düşürülür.
- Eşiği değiştirmenin hiçbir kararı değiştirmediği aralıklar vardır (30–26 ve 36–32); bir
  ayarın etkili olduğu, ayarın yapılmış olmasından çıkarılamaz.

#### Sonraki Adım

Buraya kadar kimin geçtiğini **ortam** belirledi. Uzaklık, girişim, bütçe ve eşik — dördü de
fiziksel ya da sayısal büyüklüklerdi ve hiçbiri istemcinin **kim olduğunu** sormadı. Hücrenin
içinde duran herkes ilişkilendi, dışında duran hiç kimse ilişkilenemedi; sınırı çizen şey
mesafeydi.

Peki geçişe bir **kimlik koşulu** eklenirse ne olur? O zaman ilişkilenme iki sınavdan geçer:
istemci yeterince yakın mı ve istemci kabul edilebilir mi? Sonraki ders bu ikinci sınavı
kurar ve aynı iki yönü orada da sayar — kimlik koşulu kimi fazladan geçirir, kimi fazladan
durdurur.

### Kablosuz Güvenlik Protokolleri

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/kablosuz-guvenlik-protokolleri

Kuşak seçimi bir güvenlik ayarı gibi görünür ama kapsama ayarı gibi davranır: aynı kırk istemcide kuşak koşulu yükseldikçe fazla geçen 5'ten 2'ye iner, fazla duran 1'den 20'ye çıkar ve karma kipten tek kuşağa geçiş 13 istemci düşürür.

Önceki dersler boyunca kimin geçtiğine tek bir şey karar verdi: **ortam**. İşaret gücü
eşiğin üstündeyse istemci ilişkilenir, altındaysa ilişkilenemez. Sınırı çizen uzaklık,
girişim ve erişim noktasının gücüydü; hiçbiri istemcinin kim olduğunu sormadı.

Bu dersin sorusu şudur: geçişe bir **kimlik koşulu** eklenirse sınır ne olur? Kablosuz
güvenlik kuşakları tam olarak bunu yapar — ilişkilenmeyi ortamın yanına ikinci bir şarta
bağlarlar. Kuşakların güvenlik özellikleri, kimlik doğrulama yöntemleri ve bu düzeneklere
yönelen saldırılar **Siber Güvenlik** müfredatının **Ağ Güvenliği** kursunda ölçüldü ve
burada tekrarlanmaz. Burada ölçülen şey başkadır: kuşak koşulunun **ilişkilenmeye ve
kapsamaya** ne yaptığı.

#### İlişkilenmenin İkinci Koşulu

Bir istemcinin bir erişim noktasıyla **ilişkilenmesi (association)** iki ayrı sınavdan
geçmektir. Birincisi ortamındır ve önceki derslerde ölçüldü: işaret gücü ilişkilendirme
eşiğinin üstünde olmalıdır. İkincisi kimliğindir: istemci, erişim noktasının sunduğu
kuşaklardan **en az birini** uygulayabilmelidir.

İki koşulun mantığı **ve**dir. Ortam yeterli ama kuşak desteklenmiyorsa ilişkilenme olmaz;
kuşak destekleniyor ama işaret zayıfsa yine olmaz. Bu, sınırın ikinci kez daralması
demektir. Birinci daralma süreklidir — işaret uzaklıkla düşer. İkincisi kesiktir: istemci
ya destekler ya desteklemez, aradaki bir değer yoktur.

Bu ayrım ölçünün tamamını belirler. Ortam koşulu değiştiğinde sınır **kayar**; kuşak koşulu
değiştiğinde sınır **delinir** — hücrenin tam ortasındaki bir istemci, en güçlü işareti
almasına karşın dışarıda kalabilir.

#### Kuşağın Paketlediği Şey

Bir kuşak tek bir ayar değil, birlikte değişen bir demettir. Demetin içinde dört şey durur:
istemcinin kendini nasıl tanıttığı (**kimlik doğrulama** kipi), taşınan çerçevelerin hangi
**şifre takımıyla** korunduğu, oturum anahtarlarının nasıl türetildiği ve yönetim
çerçevelerinin bütünlük koruması alıp almadığı.

Kimlik doğrulama kipi iki sınıfa ayrılır. **Ortak anahtar kipinde** ağa girecek herkes aynı
kimlik bilgisini taşır; erişim noktası kimin geldiğini değil, doğru anahtarın geldiğini
bilir. **Kurumsal kipte** her istemcinin kendi kimlik bilgisi vardır ve doğrulama ayrı bir
kimlik doğrulama sunucusuna sorulur; erişim noktası kararı kendi vermez, taşır. İkincisi
ilişkilenmeye bir gidiş–dönüş ekler ve sunucu erişilemezse ilişkilenme hiç olmaz.

Erişim noktası neyi sunduğunu duyurur; istemci duyurudan kendine uyan kuşağı seçer.

```text
# ogretilen dokum , calistirilmamistir
# kusak numaralari, takim adlari ve alan degerleri kurgudur

erişim noktası duyurusu
  ağ adı                     : hucre-b.ornek
  sunulan kuşak              : 2, 3
  kimlik kipi                : kuşak 2 ortak anahtar, kuşak 3 kurumsal
  şifre takımı               : kuşak 2 takim-b, kuşak 3 takim-c
  yönetim çerçevesi koruması : kuşak 3 zorunlu, kuşak 2 isteğe bağlı

istemci -> erişim noktası
  ilişkilenme isteği
    seçilen kuşak            : 2
    şifre takımı             : takim-b
```

Bu döküm öğretilen bir yerleşimdir ve çalıştırılmamıştır; ölçümün sayıları buradan değil,
aşağıdaki koşumdan gelir.

#### Eskimiş Kuşak Neden Bırakıldı

Bir kuşağın bırakılması bir moda değişimi değildir. Bırakılan kuşak, **verdiği sözü
tutamadığı** için bırakılır. En eski kuşakların sözü şuydu: kablosuz ortamda taşınan
çerçeve, kabloda taşınan çerçeve kadar korunaklı olacak. Söz iki yerden çatladı. Anahtar
malzemesi kısaydı ve çerçeveden çerçeveye yeterince tazelenmiyordu, bu yüzden yeterince
trafik biriktiğinde koruma istatistiksel olarak zayıflıyordu. İkincisi, bütünlük denetimi
çerçevenin içeriğine sıkı bağlanmamıştı; değişmiş bir çerçevenin fark edilmesi
garantilenmiyordu.

Bu iki kusurun **nasıl istismar edildiği** bu kursun konusu değildir ve yazılmaz; anahtar
ele geçirme, el sıkışma yakalama ve deneme yordamları Siber Güvenlik müfredatının Ağ
Güvenliği kursunda, yetkilendirilmiş test bağlamında durur. Buradaki tek çıkarım şudur:
kuşak, sözünü tutamadığı anda bırakılır ve bırakılması **ilişkilenme koşulunu
sertleştirmek** demektir. Bu dersin ölçtüğü bedel de tam olarak budur.

#### Karma Kip

Eski istemcileri ağda tutmak isteyen kurulumlar iki kuşağı aynı anda sunar. Buna **geçiş
kipi** ya da **karma kip** denir. Sezgi şudur: yeni istemci yeni kuşağı seçer, eski istemci
eskiyi, kimse dışarıda kalmaz.

Sezginin ölçülmesi gereken yeri şurasıdır. Karma kipte ilişkilenebilen istemci kümesi,
sunulan kuşaklardan **en düşüğünün** kümesidir — çünkü en düşüğü destekleyen herkes içeri
girer. Bu, kapsamanın da en düşük kuşağın kapsaması olduğu anlamına gelir. Karma kip iki
kuşağın kapsamasını toplamaz; alt kuşağınkini verir.

Ölçümün varsayımları:

- **KB51** — Kırk istemci ortak kurgudan üretilir; uzaklık ve girişim değerleri
  değiştirilmez. Kâhin niyetin kendisidir: otuz metrelik hücrenin içindeki istemci hizmet
  almalıdır.
- **KB52** — Erişim noktasının gücü ölçüm boyunca **58**'de sabittir. Dersin değiştirdiği
  tek şey kuşak koşuludur; güç, yarıçap ve girişim sabit tutulur.
- **KB53** — Üç kuşak vardır ve kurgudur. Her istemcinin bir **tavanı** vardır: tavanı 3
  olan istemci üç kuşağı da uygular, tavanı 1 olan yalnız birinciyi. Tavanlar ayrı bir
  tohumla üretilir ve uzaklıktan bağımsızdır.
- **KB54** — İlişkilenme koşulu **ve**dir: ortam yeterli olacak **ve** istemcinin tavanı,
  sunulan kuşakların en düşüğüne yetecek.
- **KB55** — Karma kip, sunulan kuşak kümesinin birden çok üyeli olması demektir.
  İlişkilenebilmek için tavanın kümenin **en düşüğüne** yetmesi yeterlidir; ilişkilendikten
  sonra istemci tavanının yettiği **en yüksek** sunulan kuşağı kullanır.
- **KB56** — Kullanılan kuşağın sayımı ilişkilenen istemciler üzerinden yapılır;
  ilişkilenemeyen istemci hiçbir kuşağı kullanmaz ve bu sayıma girmez.
- **KB57** — Kümenin çözünürlüğü kırk istemcidir; ölçülebilen en küçük fark
  **1/40 = 0,025**'tir. Bundan küçük bir fark iddia edilmez.

#### Ölçüm

```python
"""Kusak secimi: iliskilenme ve kapsama uzerindeki etkisi.

Bolum 1 - dort kusak rejiminde iliskilenen, tam hiz, fazla gecen, fazla duran.
Bolum 2 - karma kipten tek kusaga gecince dusen istemciler iki yone ayrilir.
"""
TOHUM = 20260811
KADEMELER = ((34, 6), (28, 4), (22, 2), (18, 1))
GUC = 58
TAVANLAR = (1, 1, 1, 2, 2, 2, 2, 3, 3, 3)
REJIMLER = (("yalnız kuşak 1", (1,)), ("yalnız kuşak 2", (2,)),
            ("yalnız kuşak 3", (3,)), ("karma 2+3", (2, 3)))


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def istemciler(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "uzaklik": 5 + r(41), "girisim": r(13)})
    return liste


def isaret(o, guc=52):
    return guc - o["uzaklik"] - o["girisim"]


def hiz(o, guc=52):
    for esik, kademe in KADEMELER:
        if isaret(o, guc) >= esik:
            return kademe
    return 0


def hucre_niyeti(o, yaricap=30):
    return o["uzaklik"] <= yaricap


def ortam(o, guc=52):
    return hiz(o, guc) > 0


def yetenek(ist, tohum=TOHUM + 7):
    r = uretec(tohum)
    for o in ist:
        o["tavan"] = TAVANLAR[r(10)]
    return ist


def ilisik(o, sunulan, guc=GUC):
    return ortam(o, guc) and o["tavan"] >= min(sunulan)


def kullanilan(o, sunulan):
    """Iliskilendikten sonra tavanin yettigi en yuksek sunulan kusak."""
    return max(k for k in sunulan if k <= o["tavan"])


ist = yetenek(istemciler())
print(f"istemci {len(ist)} | hücre içi {sum(hucre_niyeti(o) for o in ist)} | "
      f"tavanı 1 olan {sum(o['tavan'] == 1 for o in ist)} | "
      f"tavanı 2 olan {sum(o['tavan'] == 2 for o in ist)} | "
      f"tavanı 3 olan {sum(o['tavan'] == 3 for o in ist)}")
print()
print(f"{'rejim':<14s} {'ilişkilenen':>11s} {'tam hız':>8s} {'fazla geçen':>12s} "
      f"{'fazla duran':>12s}")
for ad, sunulan in REJIMLER:
    d = fark(ist, hucre_niyeti, lambda o, s=sunulan: ilisik(o, s))
    tam = sum(1 for o in ist if ilisik(o, sunulan) and hiz(o, GUC) == 6)
    print(f"{ad:<14s} {d['dogru_gecti'] + d['yanlis_gecti']:11d} {tam:8d} "
          f"{d['yanlis_gecti']:12d} {d['yanlis_durdu']:12d}")
print()
dusen = [o for o in ist if ilisik(o, (2, 3)) and not ilisik(o, (3,))]
print(f"karma 2+3 -> yalnız kuşak 3: düşen {len(dusen)}, "
      f"hücre içinde {sum(hucre_niyeti(o) for o in dusen)}, "
      f"hücre dışında {sum(not hucre_niyeti(o) for o in dusen)}")
ilisen = [o for o in ist if ilisik(o, (2, 3))]
print("karma 2+3 rejiminde fiilen kullanılan kuşak: " + ", ".join(
    f"kuşak {k}: {sum(1 for o in ilisen if kullanilan(o, (2, 3)) == k)}"
    for k in (2, 3)))
```

```
istemci 40 | hücre içi 27 | tavanı 1 olan 12 | tavanı 2 olan 17 | tavanı 3 olan 11

rejim          ilişkilenen  tam hız  fazla geçen  fazla duran
yalnız kuşak 1          31       13            5            1
yalnız kuşak 2          22        8            4            9
yalnız kuşak 3           9        3            2           20
karma 2+3               22        8            4            9

karma 2+3 -> yalnız kuşak 3: düşen 13, hücre içinde 11, hücre dışında 2
karma 2+3 rejiminde fiilen kullanılan kuşak: kuşak 2: 13, kuşak 3: 9
```

#### Kuşağı Yükseltmenin İki Yönü

İlk satır bir denetim noktasıdır: kuşak 1 herkesin tavanının altında kaldığı için kimlik
koşulu hiç kimseyi elemez ve tablo ortak kurgunun 58 gücündeki satırını birebir üretir —
**31** ilişkilenen, **13** tam hız, **5** fazla geçen, **1** fazla duran. Kuşak koşulu
eklenmemiş hâl budur.

Koşul sertleştikçe iki sütun ters yönlere gider. **Fazla geçen** 5'ten 4'e, oradan 2'ye
iner: hücrenin dışında kalıp da ilişkilenen istemcilerin bir bölümü yeni kuşağı
uygulayamadığı için düşer. **Fazla duran** ise 1'den 9'a, oradan 20'ye çıkar. Üç adımda
kazanılan toplam **3** birim sızıntıya karşılık, kaybedilen **19** birim hizmet vardır.
Her iki fark da 0,025'lik çözünürlüğün çok üstündedir.

Bu, ikinci iddianın kablosuz tarafta ikinci kez ödenmesidir. Kuşak koşulunu sertleştirmek
bir güvenlik kararı gibi alınır ama sonucu bir **kapsama** kararıdır: yirmi yedi kişilik
hücre içi nüfusun yirmisi kuşak 3 rejiminde hiç ilişkilenemez. Yalnız fazla geçeni sayan
bir denetim bu rejimi bir iyileşme olarak raporlar ve öbür yönü hiç görmez.

Üçüncü sütun ayrı bir uyarı taşır. Kuşak 3 rejiminde ilişkilenen dokuz istemcinin yalnız
**3**'ü tam hız kademesindedir. İlişkilenmek çalışmak demek değildir; kuşak koşulu
ilişkilenme kapısını daraltırken hız kademelerine hiç dokunmaz, çünkü kademeyi belirleyen
şey hâlâ işaret gücüdür.

Son iki satır karma kipin ölçüsüdür. **Karma 2+3** rejiminin dört sütunu da **yalnız kuşak
2** ile aynıdır: 22, 8, 4, 9. Karma kip kapsamayı üst kuşağa değil, sunulan en düşük kuşağa
bağlar. Karma kipi kapatıp yalnız kuşak 3'e geçmenin bedeli **13** istemcidir ve bu on üç
iki yöne ayrılır: **11**'i hücrenin içindedir ve fazla durana eklenir, **2**'si dışındadır
ve fazla geçenden düşer. Tek bir sayı olarak "13 istemci düştü" demek, bu iki yönü tek
kefeye koymak olurdu.

#### Karma Kipte Fiilen Kullanılan Kuşak

İlişkilenme koşulu kümenin en düşüğüne bakar; kullanılan kuşak ise en yükseğine. İki soru
ayrı olduğu için ayrı sayılır. Son satır bunu veriyor: karma rejimde ilişkilenen **22**
istemcinin **13**'ü kuşak 2 üzerinden, **9**'u kuşak 3 üzerinden çalışıyor. İlişkilenen
nüfusun yarıdan fazlası alt kuşaktadır ve bu sayı, karma kipi kapatınca düşecek olan on üç
istemciyle aynı kümedir — aynı istemcileri iki farklı sorunun yanıtı olarak sayıyoruz.

Bu satırın önemi şudur: bir ağın "kuşak 3 destekliyor" olması, o ağdaki trafiğin kuşak 3
korumasında olduğunu göstermez. Duyuruda iki kuşak birden varsa, hangi istemcinin hangisini
kullandığı tavan dağılımının sonucudur ve yalnız ilişkilenme kayıtlarından okunabilir.
Ölçümde bu dağılım kendiliğinden çıkıyor: tavanı 2 olan 17 istemcinin ilişkilenebilen 13'ü
alt kuşakta kalıyor, tavanı 3 olan 11 istemcinin ilişkilenebilen 9'u üst kuşağa çıkıyor.

Kimlik doğrulama kipinin turu da bu satırın arkasında durur. Ortak anahtar kipinde karar
erişim noktasında biter. Kurumsal kipte erişim noktası kararı taşır ve bir kimlik doğrulama
sunucusuna sorar; ilişkilenmeye fazladan bir gidiş–dönüş eklenir ve sunucu erişilemezse
ilişkilenme hiç tamamlanmaz. Ortam koşulunun sağlanması bu durumda hiçbir şey kurtarmaz —
işaret gücü tamdır, istemci içeridedir, ilişkilenme yine olmaz. Kuşak koşulunun sınırı
"delmesi" bu demektir.

#### Yüzeyler ve Daraltmalar

Kuşak seçiminin açtığı yüzeyler bir saldırı anlatısı değil, birer **yapılandırma
sonucudur**. Sayılan her yüzeyin yanında onu daraltan ayar durur.

**Birinci yüzey — karma kipin taban etkisi.** Karma kipte ağın kapsaması alt kuşağınkidir;
alt kuşağın taşıdığı koruma da ağda fiilen kullanılan korumadır. Ölçümde bu, karma satırının
kuşak 2 satırıyla birebir aynı çıkması olarak görünür. **Daraltma:** iki kuşak aynı ağ
adında sunulmaz; alt kuşağı gerektiren istemciler ayrı bir ağ adına ve ayrı bir bölüte
alınır, böylece taban etkisi ağın tamamına değil o bölüte kalır. İkinci daraltma alt kuşağı
tümüyle kapatmaktır ve bedeli ölçülmüştür: **13** istemci, **11**'i hücre içinden.

**İkinci yüzey — ortak kimlik bilgisi.** Ortak anahtar kipinde tek bir kimlik bilgisini
herkes taşır; ayrılan bir istemcinin erişimi ancak anahtar bütün ağda değiştirilerek
kesilir. **Daraltma:** kurumsal kip, kimlik bilgisini istemci başına ayırır ve tek bir
istemcinin erişimi ağın geri kalanına dokunmadan kesilir. Bedeli ilişkilenmeye eklenen
gidiş–dönüş ve kimlik doğrulama sunucusuna doğan bağımlılıktır.

**Üçüncü yüzey — korunmasız yönetim çerçeveleri.** İlişkilenmeyi başlatan ve sonlandıran
çerçeveler eski kuşaklarda bütünlük koruması almaz; bu çerçevelerin doğruluğunu denetleyen
bir düzenek yoktur. **Daraltma:** yönetim çerçevesi koruması, bu çerçeveleri de bütünlük
denetimine bağlar ve üst kuşakta zorunludur. Ölçümde bu, ancak kuşak koşulu yükseltildiğinde
elde edilir; yani daraltmanın bedeli yine fazla duran sütunudur.

**Dördüncü yüzey — kuşak seçiminin görünmezliği.** İstemcinin hangi kuşağı seçtiği
duyuruya ve istemcinin tavanına bağlıdır; ağ yöneticisi kaç istemcinin alt kuşaktan
girdiğini varsaymaz. **Daraltma:** ilişkilenme kayıtlarında seçilen kuşağın sayılması —
ölçümdeki tavan dağılımının karşılığı budur: 12 istemcinin tavanı 1, 17'sinin 2, 11'inin 3.

#### Özet

- İlişkilenme iki koşulun **ve**sidir: ortam koşulu sınırı kaydırır, kuşak koşulu sınırı
  deler; hücrenin ortasındaki bir istemci güçlü işaretle dışarıda kalabilir.
- Kuşak tek bir ayar değil bir demettir: kimlik doğrulama kipi, şifre takımı, anahtar
  türetme ve yönetim çerçevesi koruması birlikte değişir.
- Kuşak koşulu sertleştikçe fazla geçen **5 → 4 → 2**, fazla duran **1 → 9 → 20** olur;
  üç birim sızıntı kazancı on dokuz birim hizmet kaybıyla ödenir.
- Karma kip kapsamayı sunulan **en düşük** kuşağa bağlar; dört sütunu da o kuşağınkiyle
  aynıdır ve karma kipi kapatmanın bedeli 13 istemcidir — 11'i hücre içinden, 2'si dışından.
- Kuşak 3 rejiminde ilişkilenen dokuz istemcinin yalnız üçü tam hız kademesindedir; kuşak
  koşulu kapıyı daraltır, kademeyi değiştirmez.

#### Sonraki Adım

Buraya kadar ölçülen her şey tek bir menzil sınıfının içindeydi: otuz metrelik bir hücre,
onlarca metrelik uzaklıklar, kademe kademe inen bir hız. Oysa aynı niyet — "sınırın içindeki
istemci hizmet alır" — birkaç metrelik bir eşleşme bağında da, kilometrelerce uzanan bir
düşük güçlü bağda da kurulur. Sonraki ders aynı kırk istemciyi üç ayrı menzil sınıfında
ölçer: menzil büyüdükçe hız kademesi nereye iner, fazla duran nereye çıkar ve niyetin
"hizmet" sözü her sınıfta neye karşılık gelir.

### Kısa Menzilli ve Geniş Alan Kablosuz

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/kisa-menzilli-ve-genis-alan-kablosuz

Aynı niyet üç menzil sınıfında ölçülür: menzil büyüdükçe ulaşılan en yüksek hız kademesi 8'den 6'ya, oradan 2'ye iner, ilişkilenen istemci 11'den 37'ye çıkar ve hatanın işareti sınıfın menzilinden değil yarıçapın güç bütçesine göre nasıl ayarlandığından gelir.

Önceki ders ilişkilenmeye bir kimlik koşulu ekledi ve bunun kapsamaya ödettiğini saydı. Ama
ölçümün tamamı tek bir ölçekte kaldı: otuz metrelik bir hücre, onlarca metrelik uzaklıklar,
altıya kadar çıkan bir hız kademesi merdiveni. Bu ölçek kablosuzun tamamı değildir.

Aynı niyet — "sınırın içindeki istemci hizmet alır" — birkaç metrelik bir eşleşme bağında
da, kilometrelerce uzanan düşük güçlü bir bağda da kurulur. Bu dersin sorusu, niyetin
biçimi sabit tutulduğunda **ölçeğin kendisinin** ne değiştirdiğidir: menzil büyüdükçe hız
kademesine ne olur, fazla duran nereye gider ve "hizmet almak" her sınıfta aynı şey midir.

#### Menzilin Üç Sınıfı

Kablosuz bağlar, kapsamak istedikleri alana göre üç sınıfta toplanır. Sınıflar birbirinin
gelişmiş hâli değildir; farklı niyetlerin farklı yanıtlarıdır.

**Kısa menzil.** Birkaç metrelik bir alanı kapsar ve çoğunlukla iki uç arasında kurulur:
bir çevre birimi ile onu kullanan konak, bir algılayıcı ile onu okuyan aygıt. Topoloji
genellikle eşleşmeli bir çifttir, hücre değil. Güç bütçesi küçüktür çünkü aygıt pille
çalışır; buna karşılık uzaklık da küçük olduğu için işaret gücü yüksek kalır ve hız kademesi
yukarı çıkabilir. Eşleşme adımı bu sınıfın kendine özgü işidir: bağ kurulmadan önce iki uç
birbirini bir kez tanır.

**Yerel menzil.** Önceki derslerin hücresidir: bir erişim noktası, onlarca metrelik bir
yarıçap, çok sayıda istemci. Ortam paylaşılır, girişim ölçülebilir bir maliyettir ve hız
kademesi uzaklıkla kademe kademe iner.

**Geniş alan.** Kilometrelerce uzanan, düşük güçle çalışan bağlar. Bu sınıfın çözümü menzili
hızdan satın almaktır: dar bir bantta, küçük yüklerle ve seyrek gönderimle çalışır. Bir
aygıt günde birkaç kez birkaç onlarca baytlık ölçüm gönderir ve arada susar. **Görev
döngüsü** budur — aygıtın ortamda geçirdiği sürenin toplam süreye oranı. Seyrek görev
döngüsü hem pili hem ortamı korur.

#### Neyin Neyle Takas Edildiği

Üç sınıfın hepsi aynı üç büyüklükle uğraşır: **menzil**, **hız kademesi** ve **güç bütçesi**.
Bir uçtan alınan öbürüne verilir.

Menzili büyütmenin iki yolu vardır. Birincisi gücü artırmaktır ve bedeli önceki derslerde
sayıldı: güç arttıkça hücrenin dışına sızan istemci sayısı da artar. İkincisi taşınan bilgiyi
seyreltmektir — aynı bilgiyi daha uzun sürede, daha dar bir bantta, daha az işaret düzeyi
kullanarak göndermek. Seyreltilmiş bir işaret gürültünün altından çıkarılabilir; karşılığında
birim zamanda taşınan bit sayısı düşer. Geniş alan sınıfının hız kademesi tavanının alçak
olması bundandır.

Sınıfların ayırt edici alanları bir tablo hâlinde toplanabilir. Aşağıdaki değerler
**kurgudur** ve gerçek bir bant tahsisi, kanal planı ya da düzenleyici kural bildirmez.

```text
# ogretilen dokum , calistirilmamistir
# bant adlari, kanal sayilari ve yuk sinirlari kurgudur

sınıf          bant     kanal   çerçeve yükü      görev döngüsü   topoloji
kısa menzil    bant-a       6   en çok 256 bayt   sürekli         eşleşmeli çift
yerel menzil   bant-b      12   en çok 1500 bayt  sürekli         hücre
geniş alan     bant-c       3   en çok 64 bayt    seyrek          yıldız
```

Çerçeve yükü sütunu tek başına bir sonuç doğurur: geniş alan sınıfında altmış dört bayta
sığmayan bir ileti gönderilemez. Bu sınıfın üstünde çalışan uygulama, iletisini bu sınıra
göre tasarlamak zorundadır — protokol seçimi menzil seçimiyle birlikte gelir.

#### Aynı Niyet, Üç Ölçek

Niyetin **biçimi** üç sınıfta da aynıdır: bir yarıçap çizilir ve "içerideki istemci hizmet
alır" denir. Değişen şey yarıçapın sayısıdır. Kısa menzil sınıfı on iki metrelik bir söz
verir, yerel menzil otuz, geniş alan kırk.

Bu, ölçümün adil kalmasını sağlar. Her sınıf **kendi sözüne** göre denetlenir; kısa menzilli
bir bağ otuz metreyi kapsamadığı için kusurlu sayılmaz. Fazla geçen ve fazla duran, sınıfın
kendi yarıçapına göre hesaplanır.

Ölçümün varsayımları:

- **KB58** — Kırk istemci ortak kurgudan üretilir; uzaklık ve girişim değerleri üç sınıfta
  da aynıdır. Değişen tek şey sınıfın kendisidir.
- **KB59** — Her sınıf üç sayıyla tanımlanır: güç bütçesi, niyet yarıçapı ve hız kademesi
  merdiveni. **Yerel menzil sınıfının merdiveni ortak kurgudan gelir**; öbür iki merdiven
  ve güç değerleri kurgudur.
- **KB60** — Kâhin her sınıfta o sınıfın kendi yarıçapıdır. Kısa menzil için 12, yerel için
  30, geniş alan için 40. Niyetin biçimi aynı kalır, yalnız sayısı değişir.
- **KB61** — İlişkilenme, merdivenin en alt basamağına ulaşmak demektir; kademesi sıfır
  çıkan istemci ilişkilenemez.
- **KB62** — Kademe sayıları **bağıl hız adımlarıdır**, birim taşımaz ve sınıf içinde
  toplanabilir. Sınıflar arası toplam karşılaştırması, merdivenler kurgu olduğu için
  büyüklük sırası olarak okunur, oran olarak değil.
- **KB63** — Girişim değeri sınıftan bağımsızdır ve 0 ile 12 arasındadır. Küçük güç
  bütçeli sınıflarda aynı girişim, bütçenin daha büyük bir payını yer.
- **KB64** — Kümenin çözünürlüğü kırk istemcidir; ölçülebilen en küçük fark
  **1/40 = 0,025**'tir. Sınıfın niyet içi nüfusu kırktan küçük olduğunda o alt küme üzerinde
  daha ince bir fark iddia edilmez.

#### Ölçüm

```python
"""Ayni niyet uc menzil sinifinda.

Bolum 1 - her sinifin iliskileneni, ulasilan en yuksek kademe, iki yonlu hatasi.
Bolum 2 - kademe dagilimi ve ayni istemcinin uc siniftaki kademesi.
"""
TOHUM = 20260811
# (ad, guc, yaricap, kademe merdiveni) -- merdivenler ve guc degerleri kurgudur
SINIFLAR = (
    ("kısa menzil", 40, 12, ((30, 12), (26, 8), (20, 4))),
    ("yerel menzil", 52, 30, ((34, 6), (28, 4), (22, 2), (18, 1))),
    ("geniş alan", 70, 40, ((46, 2), (24, 1))),
)


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def istemciler(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "uzaklik": 5 + r(41), "girisim": r(13)})
    return liste


def hucre_niyeti(o, yaricap=30):
    return o["uzaklik"] <= yaricap


def kademe(o, guc, merdiven):
    isaret = guc - o["uzaklik"] - o["girisim"]
    for esik, k in merdiven:
        if isaret >= esik:
            return k
    return 0


ist = istemciler()
print(f"istemci {len(ist)} | uzaklık {min(o['uzaklik'] for o in ist)}"
      f"-{max(o['uzaklik'] for o in ist)} | girişim "
      f"{min(o['girisim'] for o in ist)}-{max(o['girisim'] for o in ist)}")
print()
print(f"{'sınıf':<13s} {'yarıçap':>7s} {'niyet içi':>9s} {'ilişkilenen':>11s} "
      f"{'üst':>4s} {'üstteki':>7s} {'toplam':>6s} {'kişi başı':>9s} "
      f"{'fazla geçen':>11s} {'fazla duran':>11s}")
for ad, guc, yaricap, merdiven in SINIFLAR:
    kademeler = [kademe(o, guc, merdiven) for o in ist]
    d = fark(ist, lambda o, y=yaricap: hucre_niyeti(o, y),
             lambda o, g=guc, m=merdiven: kademe(o, g, m) > 0)
    ust = max(kademeler)
    ilisen = d["dogru_gecti"] + d["yanlis_gecti"]
    print(f"{ad:<13s} {yaricap:7d} {sum(hucre_niyeti(o, yaricap) for o in ist):9d} "
          f"{ilisen:11d} {ust:4d} "
          f"{kademeler.count(ust):7d} {sum(kademeler):6d} "
          f"{sum(kademeler) / ilisen:9.2f} "
          f"{d['yanlis_gecti']:11d} {d['yanlis_durdu']:11d}")
print()
print("kademe dağılımı (0 ilişkilenemeyen demektir)")
for ad, guc, yaricap, merdiven in SINIFLAR:
    sayim = {}
    for o in ist:
        k = kademe(o, guc, merdiven)
        sayim[k] = sayim.get(k, 0) + 1
    print(f"  {ad:<13s} " + "  ".join(f"kademe {k}: {sayim[k]:2d}"
                                      for k in sorted(sayim, reverse=True)))
print()
print("aynı istemci üç sınıfta")
print(f"  {'no':>3s} {'uzaklık':>7s} {'girişim':>7s} "
      + " ".join(f"{ad:>13s}" for ad, _, _, _ in SINIFLAR))
for no in (3, 11, 38, 26):
    o = ist[no - 1]
    print(f"  {o['no']:3d} {o['uzaklik']:7d} {o['girisim']:7d} "
          + " ".join(f"{kademe(o, g, m):13d}" for _, g, _, m in SINIFLAR))
```

```
istemci 40 | uzaklık 6-44 | girişim 0-12

sınıf         yarıçap niyet içi ilişkilenen  üst üstteki toplam kişi başı fazla geçen fazla duran
kısa menzil        12         8          11    8       7     72      6.55           3           0
yerel menzil       30        27          23    6       9     88      3.83           0           4
geniş alan         40        38          37    2      13     50      1.35           1           2

kademe dağılımı (0 ilişkilenemeyen demektir)
  kısa menzil   kademe 8:  7  kademe 4:  4  kademe 0: 29
  yerel menzil  kademe 6:  9  kademe 4:  4  kademe 2:  8  kademe 1:  2  kademe 0: 17
  geniş alan    kademe 2: 13  kademe 1: 24  kademe 0:  3

aynı istemci üç sınıfta
   no uzaklık girişim   kısa menzil  yerel menzil    geniş alan
    3      13       0             8             6             2
   11      18       2             4             4             2
   38      31      11             0             0             1
   26      44       1             0             0             1
```

#### Menzil Büyüdükçe Ne Düşer

`üst` sütunu dersin ana ölçüsüdür: sınıfta fiilen ulaşılan en yüksek hız kademesi **8**,
**6** ve **2**'dir. Menzil büyüdükçe tavan iner ve bu bir yapılandırma kusuru değil, takasın
kendisidir. Aynı sütunun yanındaki `üstteki` ters yöne gider: en üst kademedeki istemci
sayısı **7**, **9** ve **13** olur. Geniş alan sınıfı nüfusunun daha büyük bir bölümünü
kendi tavanına çıkarır — ama o tavan çok alçaktır.

`ilişkilenen` ile `toplam` sütunlarının birlikte okunması gerekir. Geniş alan sınıfı **37**
istemciye ulaşır, üç sınıfın en yükseği; taşıdığı kademe toplamı ise **50**, üç sınıfın en
düşüğü. Yerel menzil sınıfı yalnız **23** istemciye ulaşır ama **88** taşır. Kısa menzil
**11** istemciyle **72** taşır. **En çok istemciye ulaşan sınıf en az hız taşır.** Bu
karşılaştırma merdivenler kurgu olduğu için bir büyüklük sırasıdır, bir oran değil.

`kişi başı` sütunu ikisinin bölümüdür ve menzille birlikte tek yönde iner: **6,55**,
**3,83**, **1,35**. Ulaşılan istemci sayısının artması taşınan toplamı büyütmüyor;
paylaşımı sıkıştırıyor. Bu sütun, sınıf seçiminin bir kapsama kararı olduğu kadar bir
yoğunluk kararı da olduğunu gösterir.

Dağılım tablosu aynı şeyi bir kez daha söylüyor. Geniş alan sınıfında kırk istemcinin
**24**'ü en alt kademede duruyor; yalnız üçü hiç ilişkilenemiyor. Yerel menzil sınıfında
**17** istemci hiç ilişkilenemiyor ama ilişkilenenlerin dokuzu en üst kademede. İki sınıf
iki ayrı şeyi seçmiş: biri kimseyi dışarıda bırakmamayı, öbürü ulaştığına hızlı hizmet
vermeyi.

Son tablo bunu tek tek istemcilerde gösteriyor. 3 numaralı istemci on üç metrede ve
girişimsiz: kısa menzilde **8**, yerelde **6**, geniş alanda **2** kademe alıyor — aynı
istemci, aynı yer, üç ayrı hız. 26 numaralı istemci kırk dört metrede: iki yakın sınıfta
hiç ilişkilenemiyor, geniş alanda **1** kademeyle bağlanıyor. 38 numaralı istemci otuz bir
metrede ama girişimi **11**; yerel menzil sınıfının bütçesi bu girişimi kaldıramıyor ve
istemci hücrenin dışında sayılıyor, geniş alan bütçesi kaldırıyor.

#### Hatanın İşareti Ayarın Sonucudur

İki hata sütunu, menzille birlikte tek yönde gitmiyor ve dersin ikinci sonucu budur.

**Kısa menzil: 3 fazla geçen, 0 fazla duran.** Bu sınıf sözünü fazlasıyla tutuyor. On iki
metrelik yarıçapın içindeki sekiz istemcinin sekizi de ilişkileniyor, üstüne yarıçapın
dışındaki üç istemci daha içeri giriyor. Güç bütçesi, verilen yarıçaba göre cömerttir.

**Yerel menzil: 0 fazla geçen, 4 fazla duran.** Bu sınıf ters yöne kaçıyor: hiç sızıntı yok,
ama kendi hücresinin içindeki dört istemciye hizmet veremiyor. Bütçe, verilen yarıçaba göre
dardır.

**Geniş alan: 1 fazla geçen, 2 fazla duran.** İki yön de küçük ve dengeli.

Örüntü şudur: **hatanın işareti sınıfın menzilinden değil, yarıçapın güç bütçesine göre
nasıl ayarlandığından gelir.** Aynı sınıf, yarıçapı iki metre büyütülerek fazla geçenden
fazla durana geçirilebilir. Menzil sınıfı seçmek bu hatayı çözmez; yalnız hangi ölçekte
yapılacağını belirler. Bu yüzden yalnız bir yönü raporlayan bir karşılaştırma üç sınıfı da
yanlış sıralar: fazla geçene bakan kısa menzili en kötü, fazla durana bakan yereli en kötü
gösterir.

Girişimin payı da sınıfa göre değişir. Girişim değeri üç sınıfta da aynıdır ve en çok
**12**'dir; ama bu 12, kırk birimlik bir bütçenin yüzde otuzu, yetmiş birimlik bir bütçenin
ise yüzde on yedisidir. Küçük bütçeli sınıflarda girişim baskındır, büyük
bütçelilerde uzaklık baskındır — 38 numaralı istemcinin üç sınıftaki durumu bunun tek
satırlık kanıtıdır.

#### Ortama Erişim ve Kimlik Koşulunun Sınıfa Göre Biçimi

`kişi başı` sütunu bir sonraki soruyu doğuruyor: aynı ortamı paylaşan otuz yedi istemci
sıralarını nasıl alıyor. Üç sınıf bunu üç ayrı biçimde çözer.

Kısa menzilde bağ **eşleşmeli** kurulur ve iki uç genellikle bir çizelgeye uyar; gönderim
anları önceden bellidir, çekişme neredeyse yoktur. Yerel menzilde ortam paylaşılır ve
gönderim hakkı çekişmeyle alınır; istemci sayısı arttıkça çekişmenin payı da artar. Geniş
alanda çekişme çözülmez, **seyreltilir**: aygıt günde birkaç kez, kısa bir yük ile ve
çoğunlukla merkezle anlaşmadan gönderir. Çakışma olur, kaybedilen gönderim yeniden denenir;
seyrek görev döngüsü çakışma olasılığını düşük tuttuğu için bu ucuza gelir.

Önceki dersin kimlik koşulu da sınıfa göre biçim değiştirir. Yerel menzilde koşul her
ilişkilenmede yeniden işletilir. Kısa menzilde koşul bir kez, **eşleşme** anında işletilir;
iki uç birbirini o anda tanır ve sonraki bağlar bu tanımayı kullanır — koşulun turu
ilişkilenmeden çıkarılıp bir kereye alınmıştır. Geniş alanda ise aygıt ağa katılırken bir kez
tanınır ve sonraki gönderimler tek tek doğrulanır; ilişkilenme diye ayrı bir adım
çoğunlukla yoktur. Üç sınıfın ortak yanı şudur: kimlik koşulu ortadan kalkmaz, yalnız
**hangi ana** yerleştirildiği değişir.

Topoloji de bu üç yanıtla birlikte gelir. Kısa menzilin eşleşmeli çifti, yerel menzilin
erişim noktası çevresindeki hücresi ve geniş alanın yıldızı — üçü de ortama erişimin
çözüldüğü yerin adıdır.

#### Özet

- Üç menzil sınıfı birbirinin gelişmiş hâli değildir; menzili, hız kademesini ve güç
  bütçesini farklı biçimde takas eden üç ayrı yanıttır.
- Menzil büyüdükçe ulaşılan en yüksek hız kademesi **8 → 6 → 2** iner; en üst kademedeki
  istemci sayısı ise **7 → 9 → 13** çıkar, çünkü tavan alçaldıkça ona ulaşmak kolaylaşır.
- En çok istemciye ulaşan sınıf en az hız taşır: geniş alan **37** istemci ve **50** kademe,
  yerel menzil **23** istemci ve **88** kademe.
- Hatanın işareti menzilden gelmez: kısa menzil **3/0**, yerel menzil **0/4**, geniş alan
  **1/2** verir; belirleyen şey yarıçapın güç bütçesine göre ayarıdır.
- Aynı istemci üç sınıfta üç ayrı kademe alır; küçük bütçeli sınıflarda girişim, büyük
  bütçelilerde uzaklık baskındır.

#### Sonraki Adım

Üç sınıfın ölçümünde de hizmet veren nokta tekti ve yerinden kımıldamadı. İstemci uzaklaştı,
kademesi düştü, sonunda ilişkilenemedi — ve kimse ona başka bir noktayı önermedi. Oysa geniş
bir alanı kapsamanın öbür yolu tek bir noktayı güçlendirmek değil, çok sayıda noktayı yan
yana dizmek ve istemciyi aralarında devretmektir. Sonraki ders hücresel mimarinin ana
bileşenlerini kurar ve hücre devrini ölçer: iki hücrenin kapsaması ne kadar örtüşmeli,
örtüşme büyüdüğünde fazla geçen ile kararsız istemci nasıl artar, örtüşme daraldığında
fazla duran nereden doğar.

### Mobil Ağlar

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/mobil-aglar

Hücresel mimaride kararı istemci değil ağ verir; hücre arası uzaklık 90'dan 30'a çekildikçe hizmetin iki yönlü hatası 5 ve 1'den sıfıra iner ama örtüşen istemci 0'dan 31'e çıkar, devir kararı ise gereksiz devirden kaçırılan devire geçer.

Önceki dersin üç menzil sınıfında da hizmet veren nokta tekti ve yerinden kımıldamadı.
İstemci uzaklaştıkça kademesi düştü, sonunda ilişkilenemedi ve kimse ona başka bir nokta
önermedi. Oysa geniş bir alanı kapsamanın öbür yolu tek noktayı güçlendirmek değil, çok
sayıda noktayı yan yana dizip istemciyi aralarında **devretmektir**.

Hücresel mimarinin kurucu fikri budur. Bu dersin sorusu iki katlıdır: devir kararını kim
verir ve iki hücrenin kapsaması **ne kadar örtüşmelidir**. İkinci soru bir tasarım
değişkenidir ve iki yönde birden ödenir.

#### Hücresel Mimarinin Ana Bileşenleri

Mimari iki yarıya ayrılır. **Radyo erişim tarafında** baz istasyonları durur; bir baz
istasyonu bir ya da birden çok **hücre** taşır ve her hücrenin bir kimliği vardır. Hücreler
birbirinin komşusudur ve her hücre komşularının listesini bilir — devir bu listeden başlar.

**Çekirdek tarafta** üç iş görülür. **Hareketlilik yönetimi** hangi istemcinin nerede
olduğunu tutar; bağlı istemci için bu bilgi hücre düzeyinde, boştaki istemci için **takip
alanı** düzeyindedir. Boştaki istemcinin tam hücresi bilinmez ve bilinmesi de gerekmez;
istemciye ulaşmak gerektiğinde takip alanının tamamına çağrı yapılır. **Geçit**, veri
düzleminin dış ağa çıktığı noktadır. **Abone kaydı** ise kimlik bilgilerini ve izinleri
tutar.

İstemci tarafında iki bileşen sayılır: kimlik bilgisini taşıyan **kimlik modülü** ve komşu
hücrelerin işaret gücünü bildiren **ölçüm raporu**.

```text
# ogretilen yerlesim , calistirilmamistir
# bilesen adlari ve kimlik degerleri kurgudur

radyo erişim tarafı              çekirdek taraf
  baz istasyonu                    hareketlilik yönetimi
    hücre A (kimlik 1001)            bağlı istemci kaydı
    hücre B (kimlik 1002)            takip alanı kaydı
  devir arayüzü                    geçit
    komşu listesi                    veri düzlemi çıkışı
    bağlam aktarımı                abone kaydı
                                     kimlik bilgisi ve izin kaydı

istemci
  kimlik modülü : kimlik bilgisini taşır
  ölçüm raporu  : komşu hücrelerin işaret gücünü bildirir
```

Bu yerleşimin taşıdığı asıl ayrım **denetim düzlemi ile veri düzleminin** ayrı olmasıdır.
Devir bir denetim düzlemi işidir: kararı, bağlamın aktarılmasını ve kaydın güncellenmesini
kapsar. Veri düzlemi bu sırada durmaz; akış eski hücreden yeni hücreye taşınır. İki düzlemin
ayrı olması, devir sırasında hizmetin kesilmemesinin koşuludur.

#### Hücre Devri

**Hücre devri**, hizmet veren hücrenin değişmesidir ve dolaşımın hücresel karşılığıdır. Ama
karar akışı terstir. Kablosuz yerel ağda ölçen de karar veren de istemcidir. Hücresel
mimaride **istemci ölçer, ağ karar verir**: istemci komşu hücrelerin işaret gücünü ölçüm
raporuyla bildirir, hizmet veren hücre raporu değerlendirir, hedef hücreyle bağlamı
anlaşır ve istemciye devir komutunu gönderir.

Bu terslik iki sonuç doğurur. Birincisi, karar tek elde toplanır: ağ, komşu hücrelerin
yükünü ve durumunu da hesaba katabilir; istemci bunları göremez. İkincisi, karar bir
gidiş–dönüş borcu taşır — rapor gitmeden ve komut gelmeden devir olmaz.

Kararın eşiği **devir payıdır**: hedef hücrenin işaret gücü, hizmet veren hücreninkini bu
kadar birim aşmadan devir başlatılmaz. Pay sıfır olsaydı, iki hücrenin işareti birbirine
yakın olan her istemci sürekli ileri geri devredilirdi. Bu derste pay sabit tutulur;
değiştirilen tek şey **hücreler arası uzaklıktır**.

Devrin tamamlanamaması ayrı bir durumdur. Rapor gönderildikten sonra hizmet veren hücrenin
işareti komut gelmeden eşiğin altına düşerse bağ kopar; istemci bu noktada devri
bekleyemez, en iyi bulduğu hücreye yeniden kurulum başlatır ve bağlamı sıfırdan kurar. Bu,
devrin kazandırmaya çalıştığı sürekliliğin tam tersidir ve geç kalmış bir devir kararının
gerçek bedelidir. Ölçümde bu durum ayrı bir sütun olarak görünmez; **kaçırılan devir**
sayısının arkasında durur.

#### Devrin Kaç Türü Var ve Boştaki İstemci

Her devir aynı maliyeti taşımaz. İki hücre **aynı baz istasyonundaysa** bağlam istasyonun
içinde taşınır ve çekirdek tarafın haberi olması gerekmez. İki hücre **ayrı baz
istasyonlarındaysa** bağlam devir arayüzünden geçer ve hareketlilik yönetimindeki kayıt
güncellenir. Veri düzleminin çıkış noktası da değişiyorsa geçit tarafında bir işlem daha
gerekir. Aynı adı taşıyan üç işlem, denetim düzleminde üç ayrı yük demektir; komşu listesi
bu yüzden yalnız hangi hücrelerin komşu olduğunu değil, hangi devrin hangi türden olacağını
da belirler.

Sektörleme bu tabloyu doğrudan etkiler. Bir baz istasyonu yönlü antenlerle birden çok hücre
taşıdığında, o hücreler arasındaki devirler ucuz türden olur; hücre sayısını artırmanın
maliyeti, hücreleri ayrı istasyonlara dağıtmanın maliyetiyle aynı değildir.

Boştaki istemci ayrı bir denge taşır. Bağlı istemcinin hücresi bilinir; boştaki istemcinin
yalnız **takip alanı** bilinir ve ona ulaşmak gerektiğinde alanın tamamına çağrı yapılır.
Takip alanı büyütülürse istemci alan değiştirmedikçe konum güncellemesi göndermez ve
denetim düzlemi rahatlar; karşılığında her çağrı daha çok hücreye yayılır. Alan
küçültülürse çağrı ucuzlar, güncelleme pahalılaşır. Bu, kursun saydığı iki yönün mimarideki
bir başka görünümüdür: bir yönü ucuzlatan ayar öbür yönü pahalılaştırır ve tek yöne bakan
bir ölçüm ikisini de yanlış sıralar.

#### Örtüşme Bir Tasarım Değişkenidir

İki hücre birbirine yaklaştıkça kapsamaları örtüşür. Örtüşme boşluk bırakmamayı ve devrin
tamamlanacağı bir alan sağlamayı garanti eder; karşılığında iki hücre aynı toprağı ikinci
kez kapsar ve orta hat çevresindeki istemciler iki hücre arasında kararsız kalır.

Ölçümün varsayımları:

- **KB65** — İstemciler A ile B hücrelerini birleştiren doğru üzerindedir. Her istemcinin
  A'ya uzaklığı ortak kurgudan gelir; B'ye uzaklığı, hücreler arası uzaklıkla A'ya
  uzaklığının farkının mutlak değeridir.
- **KB66** — İki hücrenin gücü eşittir ve **58**'dir; tasarım yarıçapı ikisinde de **30**.
  Girişim istemcinin kendi değeridir ve iki hücre için aynıdır.
- **KB67** — Hizmet niyeti iki tasarım yarıçapının **birleşimidir**: istemci hücrelerden
  birine tasarım yarıçapı kadar yakınsa hizmet almalıdır. Niyet ortak kurgunun hücre
  niyetinden, yakın hücrenin uzaklığıyla kurulur.
- **KB68** — Devir niyeti ayrı bir sorudur: devir ancak istemcinin **hız kademesini
  yükseltiyorsa** yapılmalıdır. Kademeyi değiştirmeyen devir gereksizdir.
- **KB69** — Devir düzeneği iki koşulu arar: hedef hücrenin işareti ilişkilendirme eşiğini
  aşacak **ve** hizmet veren hücreninkini devir payı kadar geçecek. Devir payı **3**'tür ve
  ölçüm boyunca sabit kalır.
- **KB70** — Örtüşen istemci, iki hücreden de eşiği aşan işaret alan istemcidir. Kararsız
  istemci, örtüşen istemcilerden iki işaret farkı devir payının altında kalanlardır.
- **KB71** — Boşlukta kalan istemci, iki hücreden de eşiği aşamayandır.
- **KB72** — Kümenin çözünürlüğü kırk istemcidir; ölçülebilen en küçük fark
  **1/40 = 0,025**'tir.

#### Ölçüm

```python
"""Hucre devri ve kapsama ortusmesi.

Bolum 1 - ortusme degistikce hizmetin iki yonlu hatasi.
Bolum 2 - devir kararinin kendi iki yonlu hatasi.
"""
TOHUM = 20260811
ESIK = 18
KADEMELER = ((34, 6), (28, 4), (22, 2), (18, 1))
GUC = 58
PAY = 3
ARALIKLAR = (30, 45, 60, 75, 90)


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def istemciler(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "uzaklik": 5 + r(41), "girisim": r(13)})
    return liste


def hucre_niyeti(o, yaricap=30):
    return o["uzaklik"] <= yaricap


def ikili(o, ara):
    """Iki hucreye uzaklik ve iki hucreden gelen isaret gucu."""
    da, db = o["uzaklik"], abs(ara - o["uzaklik"])
    return da, db, GUC - da - o["girisim"], GUC - db - o["girisim"]


def kademe(isaret):
    for esik, k in KADEMELER:
        if isaret >= esik:
            return k
    return 0


def hizmet_niyeti(o, ara):
    """Tasarimin sozu: iki hucrenin yaricapinin birlesimi kapsanir."""
    da, db, _, _ = ikili(o, ara)
    return hucre_niyeti({"uzaklik": min(da, db)})


def hizmet(o, ara):
    _, _, ia, ib = ikili(o, ara)
    return max(ia, ib) >= ESIK


def devir_niyeti(o, ara):
    """Devir ancak hiz kademesini yukseltiyorsa yapilmalidir."""
    _, _, ia, ib = ikili(o, ara)
    return kademe(ib) > kademe(ia)


def devir(o, ara):
    _, _, ia, ib = ikili(o, ara)
    return ib >= ESIK and ib - ia >= PAY


ist = istemciler()
print(f"istemci {len(ist)} | hücre içi {sum(hucre_niyeti(o) for o in ist)} | "
      f"tek hücrede hizmet alan "
      f"{sum(1 for o in ist if GUC - o['uzaklik'] - o['girisim'] >= ESIK)}")
print()
print("hizmet: iki hücrenin birleşimi")
print(f"{'aralık':>6s} {'örtüşen':>7s} {'kararsız':>8s} {'boşlukta':>8s} "
      f"{'hizmet alan':>11s} {'fazla geçen':>11s} {'fazla duran':>11s}")
for ara in ARALIKLAR:
    d = fark(ist, lambda o, a=ara: hizmet_niyeti(o, a),
             lambda o, a=ara: hizmet(o, a))
    ortusen = kararsiz = bosluk = 0
    for o in ist:
        _, _, ia, ib = ikili(o, ara)
        if ia >= ESIK and ib >= ESIK:
            ortusen += 1
            if abs(ia - ib) < PAY:
                kararsiz += 1
        elif ia < ESIK and ib < ESIK:
            bosluk += 1
    print(f"{ara:6d} {ortusen:7d} {kararsiz:8d} {bosluk:8d} "
          f"{d['dogru_gecti'] + d['yanlis_gecti']:11d} "
          f"{d['yanlis_gecti']:11d} {d['yanlis_durdu']:11d}")
print()
print("devir: kademeyi yükseltmeli")
print(f"{'aralık':>6s} {'niyet devir':>11s} {'yapılan devir':>13s} "
      f"{'fazla geçen':>11s} {'fazla duran':>11s}")
for ara in ARALIKLAR:
    d = fark(ist, lambda o, a=ara: devir_niyeti(o, a),
             lambda o, a=ara: devir(o, a))
    print(f"{ara:6d} {sum(devir_niyeti(o, ara) for o in ist):11d} "
          f"{d['dogru_gecti'] + d['yanlis_gecti']:13d} "
          f"{d['yanlis_gecti']:11d} {d['yanlis_durdu']:11d}")
```

```
istemci 40 | hücre içi 27 | tek hücrede hizmet alan 31

hizmet: iki hücrenin birleşimi
aralık örtüşen kararsız boşlukta hizmet alan fazla geçen fazla duran
    30      31        1        0          40           0           0
    45      28        3        0          40           0           0
    60      11        4        1          39           0           1
    75       1        0        7          33           7           1
    90       0        0        9          31           5           1

devir: kademeyi yükseltmeli
aralık niyet devir yapılan devir fazla geçen fazla duran
    30          27            30           3           0
    45          19            21           2           0
    60          13            12           0           1
    75           2             2           0           0
    90           0             0           0           0
```

#### Örtüşme Daraldıkça

Alt satır bir denetim noktasıdır. Aralık **90** olduğunda ikinci hücre kimseye ulaşmıyor:
örtüşen **0**, devir **0** ve hizmet tablosu ortak kurgunun tek hücreli 58 satırını birebir
veriyor — **31** hizmet alan, **5** fazla geçen, **1** fazla duran. İki hücreli ölçüm,
hücreler yeterince ayrıldığında tek hücreli ölçüme çöküyor.

Aralık daraldıkça hizmetin iki hatası da iniyor: **60**'ta 0 ve 1, **45** ile **30**'da
ikisi de **0**. Kırk istemcinin kırkı hizmet alıyor ve hiçbiri niyetin dışında değil. Bu,
kâğıt üzerinde kusursuz bir yapılandırmadır — ve dersin uyarısı da buradadır.

Bedel `örtüşen` sütununda duruyor: aralık 30'da **31** istemci iki hücreden birden eşiği
aşan işaret alıyor. Kırk istemcinin otuz biri iki hücrenin birden kapsadığı toprakta
duruyor; ikinci hücre kapsamayı genişletmiyor, aynı yeri ikinci kez kapsıyor. Hata
sütunlarını sıfırlayan yapılandırma, kapsamanın yarısını yeniden harcayan yapılandırmadır.
Bu maliyet `fark` işlevinin saydığı iki yönde görünmez; başka bir sütunda görünür.

Aralık **75** satırı ters yöndeki uyarıyı taşıyor. Fazla geçen burada **7**'ye çıkıyor —
tek hücrenin **5**'inden yüksek. İki hücre ayrıldıkça her biri kendi kenarından sızıyor ve
sızıntılar toplanıyor; hücre eklemek sızıntıyı bölmüyor, çoğaltıyor. Aynı satırda **7**
istemci boşlukta kalıyor: iki hücreden de eşiği aşamıyorlar. Aynı yapılandırma hem fazladan
sızdırıyor hem boşluk bırakıyor.

`kararsız` sütunu beklenmedik davranıyor: **1**, **3**, **4**, **0**, **0**. En geniş
örtüşmede en az kararsız istemci var. Nedeni şudur: kararsızlık örtüşmenin büyüklüğüne değil,
**iki hücrenin orta hattı çevresindeki istemci yoğunluğuna** bağlıdır. Aralık 30'da orta hat
15 metrededir ve orada az istemci vardır; aralık 60'ta orta hat 30 metreye kayar ve kalabalık
oraya denk gelir. Kararsızlık bir kapsama ölçüsü değil, bir yerleşim ölçüsüdür.

#### Devrin Kendi İki Hatası

İkinci tablo devir kararını kendi niyetine karşı ölçüyor: devir ancak hız kademesini
yükseltiyorsa doğrudur.

Aralık **30**'da niyet **27** devir istiyor, düzenek **30** devir yapıyor ve **3**'ü
gereksiz — kademeyi değiştirmeyen devirler. Aralık **45**'te aynı yön sürüyor: **2** gereksiz
devir. Örtüşme bol olduğunda devir payı çok sayıda istemci için aşılıyor, ama aşılan pay
kademeyi yükseltmeye yetmiyor. Bu, denetim düzleminde boşa harcanan bir işlemdir: rapor,
bağlam aktarımı ve komut, hiçbir kazanç getirmeden.

Aralık **60**'ta işaret ters dönüyor: gereksiz devir **0**, kaçırılan devir **1**. Örtüşme
daraldıkça devir payını aşan istemci azalıyor ve pay, kademeyi yükseltecek bir devri
engelleyebiliyor. Aynı sabit pay, bol örtüşmede fazla geçen, dar örtüşmede fazla duran
üretiyor. Payı hiç değiştirmeden hatanın yönü değişti; değişen tek şey hücrelerin
uzaklığıydı.

İki tabloyu yan yana koymak dersin sonucunu veriyor. Hizmet tablosunda en iyi görünen
yapılandırmalar — aralık 30 ve 45 — devir tablosunda en çok gereksiz devri üreten
yapılandırmalardır. Tek bir tabloya bakan bir denetim, ikisinden hangisine baktığına göre
zıt yanıtlar verir.

#### Özet

- Hücresel mimari radyo erişim tarafı ile çekirdek tarafa ayrılır; devir bir denetim
  düzlemi işidir ve veri düzlemi bu sırada eski hücreden yeni hücreye taşınır.
- Kararı istemci değil ağ verir: istemci ölçüm raporunu gönderir, hizmet veren hücre hedefle
  bağlamı anlaşır ve devir komutunu gönderir; bu, kararı tek elde toplar ve bir
  gidiş–dönüş borcu getirir.
- Hücre arası uzaklık 90'dan 30'a çekildikçe hizmetin iki hatası **5/1**'den **0/0**'a iner,
  ama örtüşen istemci **0**'dan **31**'e çıkar; sıfır hata, kapsamanın ikinci kez
  harcanmasıyla ödenir.
- Aralık 75'te fazla geçen **7** olur — tek hücrenin 5'inden yüksek — ve aynı satırda 7
  istemci boşlukta kalır; hücre eklemek sızıntıyı bölmez, çoğaltır.
- Sabit devir payı, bol örtüşmede **3** gereksiz devir, dar örtüşmede **1** kaçırılan devir
  üretir; hatanın yönünü payın değeri değil hücrelerin uzaklığı belirler.

#### Sonraki Adım

Bu kursun kablosuz yarısı boyunca sınırı çizen şey hep aynı cinstendi: uzaklık, girişim,
güç bütçesi, kuşak tavanı, hücre yerleşimi. Hepsi **ortamın** özellikleridir. Kimse oturup
"şu geçsin, bu geçmesin" diye bir kural yazmadı; sınır, fiziğin ve yerleşimin bir yan
ürünü olarak ortaya çıktı ve niyetten iki yönde birden ayrıldı.

Sonraki konu sınırı ortamın elinden alır. Sınır bir kez **yazıldığında** — kim geçecek, kim
duracak, sıralı bir dizi olarak açıkça bildirildiğinde — niyetten sapma ortadan kalkar mı,
yoksa yalnız yer mi değiştirir? Sonraki ders bu soruyu açar ve sayılan iki yön aynı kalır:
fazla geçen ve fazla duran.

## Ağ Güvenliği

Güvenlik duvarı türleri, kural yazımı ve değerlendirme sırası, güven bölgeleri ve silahtan arındırılmış bölge, saldırı tespit ve önleme, tünelleme teknolojileri, sıfır güven modeli ve savunmanın kapsamadığı sınıflar.

### Güvenlik Duvarı Türleri

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/guvenlik-duvari-turleri

Paket filtreleyen, durum bilgili ve uygulama farkındalıklı düzeneklerin aynı kırk akıştaki semantiği: yansımasız filtre 6 akışı fazladan geçirip 7 akışı fazladan durdurur, durum bilgili düzenek ikisini birden sıfırlar, uygulama farkındalıklı düzenek ise niyetin yazmadığı bir alanı okuduğu için yalnız 8 fazla duran üretir.

Önceki ders hücresel kapsamayı bitirdi ve şunu bıraktı: buraya kadar sınırı çizen şey
**ortamdı**. İşaret gücü eşiğin altına düştüğü yerde bağ kesiliyordu; hücrenin kenarını
kimse yazmamıştı. Yarıçap bir tasarım sözüydü, onu uygulayan taraf fizikti.

Bu ders sınırın yazıldığı yerden başlar. Bir **güvenlik duvarı (firewall)**, geçişin nerede
biteceğini ortama bırakmaz: sınırı **sıralı bir kural dizisi** olarak yazar ve her akışı o
diziden geçirir. Yazılmış sınırın ortamınkine göre bir üstünlüğü vardır — okunabilir. Bir de
eksikliği vardır: yazan kişi ne yazdıysa o çalışır, ne demek istediği değil. Bu dersin
sorusu, aynı dizinin farklı düzeneklerde neden farklı davrandığıdır.

#### Yazılmış Sınırın İki Kuralı

Kural dizisinin semantiği iki kuralla tanımlanır ve ikisi de kurs boyunca sabittir.

**İlk eşleşen kazanır.** Akış diziye baştan girer, eşleşen ilk kuralın eylemi uygulanır ve
değerlendirme orada biter. Dizinin geri kalanı okunmaz.

**Dizi örtük retle biter.** Hiçbir kural eşleşmezse akış geçmez. **Örtük ret (implicit
deny)** yazılmaz; dizinin bittiği yerden doğar. Ölçümde **fazla duranın** sessiz kaynağı
budur: örtük retin durdurduğu akışın karşısında bir kural adı yoktur, dolayısıyla kimse onu
aramaz.

Bu iki kural birlikte **değerlendirme sırasını (evaluation order)** anlamın parçası yapar.
Sıranın kendisi ayrı bir ölçü nesnesidir ve sonraki dersin konusudur; burada dizi sabit
tutulur ve yalnız onu işleten düzenek değişir. Kural dökümü şudur:

```text
# ogretilen kural dokumu , calistirilmamistir
# sozdizimi kurgudur ve hicbir cihazin bicimi degildir

sira  eylem  kaynak    hedef   bnokta
  1   gecir  dis       dmz     80
  2   gecir  dis       dmz     443
  3   gecir  dmz       ic      3306
  4   gecir  yonetim   *       *
  5   gecir  ic        dmz     *
  6   gecir  ic        dis     *
  7   gecir  ic        ic      *
  -   ortuk ret : dizinin bittigi yer
```

Siber Güvenlik müfredatının Çevre Savunması konusu güvenlik duvarını **nesilleriyle** ve
saldırının karşısındaki duruşuyla ele aldı; o anlatı burada tekrarlanmaz. Bu derste ölçülen
şey nesil değil, **düzeneğin okuduğu alan kümesinin** aynı diziyi nasıl başka bir sınıra
çevirdiğidir.

#### Üç Türün Gördüğü Alanlar

Üç tür arasındaki fark, kuralların yazımında değil, kuralın uygulandığı **girdide**dir.

**Paket filtreleme (packet filtering)** her paketi tek başına değerlendirir: kaynağını,
hedefini ve bağlantı noktasını okur, kararı verir, unutur. Belleği yoktur.

**Durum bilgili (stateful)** düzenek bir durum çizelgesi tutar. Bir konuşma açıldığında ve
geçirildiğinde çizelgeye yazılır; o konuşmanın sonraki paketleri kural dizisine yeniden
sokulmaz, çizelgeden karşılanır. Bu düzeneğin kural dizisine sorduğu soru, paketin kendi
yönü değil, **konuşmayı açan yön**dür.

**Uygulama farkındalıklı (application aware)** düzenek bunun üstüne akışın gerçekten ne
taşıdığını okur: bağlantı noktası bir uygulamayı ima eder, taşınan içerik onu doğrulayabilir
ya da doğrulamayabilir.

Paket filtrelemenin belleksizliğinin doğrudan bir sonucu vardır. Geçirilmiş bir konuşmanın
dönüş yönü, kural dizisine ters çevrilmiş bir üçlü olarak girer ve genellikle hiçbir kurala
uymaz; örtük ret onu keser. Bu eksiğin bilinen durağan çaresi **ayna kuralı**dır: yönlü her
kuralın kaynağı ile hedefi yer değiştirilerek diziye ikinci bir kopya eklenir. Ayna, durum
bilgisinin bir taklididir ve iki yerde tökezler. Birincisi, iki ucunu birden yazmayan bir
kuralın aynası yoktur. İkincisi, ayna kuralı dönüş paketiyle **yeni** bir bağlantıyı
birbirinden ayırt edemez; ikisine de aynı kapıyı açar.

Ölçümün varsayımları:

- **AG1** — Kırk akış ortak kurgudan üretilir; kaynağı, hedefi ve bağlantı noktası
  kurgudandır. Kâhin niyetin kendisidir ve kurguyu biz yazdığımız için bilinir.
- **AG2** — Her akışa iki alan eklenir: **evre** (yeni bağlantı mı, açılmış bir konuşmanın
  sürdürülmesi mi) ve **taşıdığı** (bağlantı noktasının ima ettiği uygulamayı taşıyıp
  taşımadığı). İkisi de ayrı bir üreteçten gelir; temel kırk akış değişmez.
- **AG3** — Kurulu bir akışın niyeti, **konuşmayı açan yönün** niyetidir: politika ters
  çevrilmiş üçlüye uygulanır. Politika işlevinin kendisi değiştirilmez.
- **AG4** — Dört düzenek de **aynı yedi kurallık diziyi** kullanır. Değişen tek şey
  düzeneğin okuduğu alan kümesidir; kural kümesinin doğruluğu bu derste ölçülmez.
- **AG5** — Durum bilgili düzenek, kurulu bir akışta diziyi konuşmanın **açılış yönüne**
  uygular; durum çizelgesinin kaydettiği bilgi budur.
- **AG6** — Uygulama farkındalıklı düzenek, durum bilgili kararın üstüne taşınan uygulamanın
  bağlantı noktasına uyup uymadığını arar. Kâhin bu alanı **okumaz**.
- **AG7** — Kırk olaylık kümede ölçülebilen en küçük fark **1/40 = 0,025**'tir; bundan küçük
  bir fark bu kümeyle savunulmaz.

#### Ölçüm

```python
"""Guvenlik duvari turleri: ayni kirk akista dort duzenek.

Bolum 1 - kural dizisi sabit; degisen sey duzenegin okudugu alan.
Bolum 2 - her turun niyetten iki yonde birden sapmasi.
"""
TOHUM = 20260811
BOLGELER = ("dis", "dmz", "ic", "yonetim")
NOKTALAR = (80, 443, 22, 3306, 8080)


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def akislar(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)],
                      "hedef": BOLGELER[r(4)], "bnokta": NOKTALAR[r(5)]})
    return liste


def evrele(ak, tohum=TOHUM + 1):
    """Her akisa evre ve tasidigi alanlarini ekler."""
    r = uretec(tohum)
    for a in ak:
        a["evre"] = ("yeni", "kurulu", "kurulu", "yeni")[r(4)]
        a["tasidigi"] = ("uygun", "uygun", "uygun", "baska")[r(4)]
    return ak


def politika(a):
    """Niyet: disaridan yalniz DMZ'nin web kalemine; yonetime disaridan kimse."""
    if a["kaynak"] == "dis":
        return a["hedef"] == "dmz" and a["bnokta"] in (80, 443)
    if a["kaynak"] == "dmz":
        return a["hedef"] == "ic" and a["bnokta"] == 3306
    if a["kaynak"] == "yonetim":
        return True
    return a["hedef"] != "yonetim"


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def kural_dizisi(kurallar):
    """Ilk eslesen kazanir; sonda ortuk ret."""
    def calis(a):
        for eylem, olcut in kurallar:
            if all(a[k] == v for k, v in olcut.items()):
                return eylem
        return False
    return calis


DAR = [(True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 80}),
       (True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 443}),
       (True, {"kaynak": "dmz", "hedef": "ic", "bnokta": 3306}),
       (True, {"kaynak": "yonetim"}),
       (True, {"kaynak": "ic", "hedef": "dmz"}),
       (True, {"kaynak": "ic", "hedef": "dis"}),
       (True, {"kaynak": "ic", "hedef": "ic"})]
UCLU = ("kaynak", "hedef", "bnokta")


def ters(a):
    return {"kaynak": a["hedef"], "hedef": a["kaynak"], "bnokta": a["bnokta"]}


def yansimalar(kurallar):
    """Iki ucunu da yazan her kuralin ayna esi."""
    y = []
    for eylem, olcut in kurallar:
        if "kaynak" in olcut and "hedef" in olcut:
            t = dict(olcut)
            t["kaynak"], t["hedef"] = olcut["hedef"], olcut["kaynak"]
            y.append((eylem, t))
    return y


def gorunen(a, alanlar):
    return {k: v for k, v in a.items() if k in alanlar}


def niyet(a):
    """Kurulu bir akisin niyeti, konusmayi acan yonun niyetidir."""
    return politika(a if a["evre"] == "yeni" else ters(a))


def paket(kurallar):
    k = kural_dizisi(kurallar)
    return lambda a: k(gorunen(a, UCLU))


def durum_bilgili(kurallar):
    k = kural_dizisi(kurallar)
    return lambda a: k(gorunen(a, UCLU)) if a["evre"] == "yeni" else k(ters(a))


def uygulama_farkindalikli(kurallar):
    d = durum_bilgili(kurallar)
    return lambda a: d(a) and a["tasidigi"] == "uygun"


AK = evrele(akislar())
AYNALI = DAR + yansimalar(DAR)
TURLER = (("paket, yansımasız", DAR, paket(DAR)),
          ("paket, yansımalı", AYNALI, paket(AYNALI)),
          ("durum bilgili", DAR, durum_bilgili(DAR)),
          ("uygulama farkındalıklı", DAR, uygulama_farkindalikli(DAR)))

print(f"akış {len(AK)} | yeni {sum(a['evre'] == 'yeni' for a in AK)} | "
      f"kurulu {sum(a['evre'] == 'kurulu' for a in AK)} | "
      f"niyetin geçirdiği {sum(niyet(a) for a in AK)} | "
      f"kaleme uymayan {sum(a['tasidigi'] == 'baska' for a in AK)}")
print()
print(f"{'düzenek':<22s} {'kural':>5s} {'doğru':>6s} {'fazla geçen':>12s} "
      f"{'fazla duran':>12s}")
for ad, k, d in TURLER:
    s = fark(AK, niyet, d)
    print(f"{ad:<22s} {len(k):5d} {s['dogru_gecti'] + s['dogru_durdu']:6d} "
          f"{s['yanlis_gecti']:12d} {s['yanlis_durdu']:12d}")
print()
print("yansımasızın durdurduğu kurulu akışlar:",
      [a["no"] for a in AK
       if a["evre"] == "kurulu" and niyet(a) and not paket(DAR)(a)])
print("her iki filtrenin fazladan geçirdikleri:",
      [(a["no"], a["kaynak"], a["hedef"], a["bnokta"])
       for a in AK if not niyet(a) and paket(AYNALI)(a)])
print("uygulama farkındalıklının fazladan durdurdukları:",
      [(a["no"], a["kaynak"], a["hedef"], a["bnokta"])
       for a in AK if niyet(a) and durum_bilgili(DAR)(a)
       and not uygulama_farkindalikli(DAR)(a)])
```

```
akış 40 | yeni 20 | kurulu 20 | niyetin geçirdiği 23 | kaleme uymayan 12

düzenek                kural  doğru  fazla geçen  fazla duran
paket, yansımasız          7     27            6            7
paket, yansımalı          13     30            6            4
durum bilgili              7     40            0            0
uygulama farkındalıklı     7     32            0            8

yansımasızın durdurduğu kurulu akışlar: [12, 26, 27, 31, 32, 36, 37]
her iki filtrenin fazladan geçirdikleri: [(1, 'yonetim', 'ic', 3306), (6, 'yonetim', 'ic', 3306), (30, 'ic', 'dis', 3306), (35, 'ic', 'dis', 3306), (38, 'yonetim', 'ic', 443), (40, 'ic', 'dis', 443)]
uygulama farkındalıklının fazladan durdurdukları: [(7, 'yonetim', 'yonetim', 443), (8, 'yonetim', 'dmz', 443), (9, 'dis', 'dmz', 443), (15, 'yonetim', 'yonetim', 443), (20, 'ic', 'dmz', 443), (21, 'ic', 'dmz', 22), (32, 'dis', 'ic', 443), (36, 'dis', 'ic', 443)]
```

#### Durum Bilgisinin Kurtardığı

Yansımasız filtre kırk akışın **27**'sinde niyetle aynı kararı veriyor. Kalan on üç,
**iki ayrı hata** olarak ikiye ayrılıyor ve ikisi de yazılmalıdır.

**Fazla geçen 6.** Altısı da kurulu akış. Bunların hepsinde filtre paketin kendi yönüne
bakıyor ve o yön kurala uyuyor — ama konuşmayı açan yön uymuyordu. `yonetim`den `ic`e dönen
paket dördüncü kurala takılıp geçiyor; oysa konuşmayı `ic` açmıştı ve `ic`ten `yonetim`e
gitmek niyetin yasakladığı tek şeydi. Filtre paketi doğru okuyor, konuşmayı yanlış okuyor.

**Fazla duran 7.** Yedisi de kurulu akış. Geçirilmiş bir konuşmanın dönüş yönü hiçbir
kurala uymuyor ve örtük ret onu kesiyor. Bu yedi akışın kesildiğine dair bir kayıt
üretilmez; dizide onları durduran bir satır yoktur.

Ayna kuralları eklendiğinde dizi yediden **13**'e çıkıyor ve fazla duran **7**'den **4**'e
iniyor. Kurtarılan üç akışın üçü de `dis`ten `ic`e dönen paketler; onları kurtaran şey,
üçüncü ve altıncı kuralın ayna eşleridir. Kalan dördü kurtarılamıyor, çünkü hepsi
`yonetim` bölgesine dönüyor ve o bölgenin kuralı yalnız kaynağını yazıyor: **iki ucunu
yazmayan kuralın aynası yoktur.**

Aynanın ödemediği şey ise fazla geçen sütunu: **6'dan 6'ya**, hiç değişmedi. Ayna, dönüş
paketiyle yeni bir bağlantıyı ayırt edemediği için zaten var olan yanlışı düzeltemez.
Altı kural eklemek dizinin uzunluğunu %86 artırdı, niyetten sapmayı ise on üçten ona
indirdi — ve sapmanın yönlerinden birine hiç dokunmadı.

Durum bilgili düzenek aynı yedi kuralla **40/40** veriyor: fazla geçen **0**, fazla duran
**0**. Kazanç kuralın yazımından değil, sorunun değişmesinden geliyor. Düzenek kurulu bir
akış için "bu üçlü kurala uyuyor mu" diye sormuyor; "bu konuşma açılırken geçirilmiş miydi"
diye soruyor. İki soru kırk akışın on üçünde ayrı yanıt veriyor.

#### Uygulama Farkındalığının Ölçülemeyeni

Uygulama farkındalıklı düzenek durum bilgili karara bir koşul ekliyor ve sonuç **kötüleşiyor**:
doğru **40**'tan **32**'ye iniyor, fazla duran **0**'dan **8**'e çıkıyor. Fazla geçen yine
**0**.

Bu bir kusur değil, ölçünün sınırı. Kırk akışın **12**'si bağlantı noktasının ima ettiğinden
başka bir uygulama taşıyor; düzenek bunları görüyor ve kesiyor. Kâhin ise o alanı hiç
okumuyor: niyet "dışarıdan yalnız silahtan arındırılmış bölgenin web kalemine" derken
**kalemi bağlantı noktasıyla** tarif ediyor, taşınan uygulamayla değil. Niyetin ölçüt almadığı
bir alanı ölçüte alan düzenek, o alanda ne kadar haklı olursa olsun, bu kâhinde yalnız fazla
duran üretir.

Buradan çıkan sonuç düzenek hakkında değil, niyet hakkındadır. Uygulama farkındalığının
kazandırdığı şeyi ölçebilmek için **politikanın kendisinin uygulama diliyle yeniden
yazılması** gerekir. Bu bir cihaz özelliği değil, bir politika kararıdır; ve yazılmadığı
sürece cihazın fazladan gördüğü alan ölçüye giremez.

#### Açık Kalan Yüzeyler ve Daraltmalar

**Birinci yüzey — ayna kuralının yönü.** `dis` ile `ic` arasındaki ayna kuralı bağlantı
noktası taşımıyor; dönüş paketini geçirirken **yeni** bir dış bağlantıyı da geçirir.
Ölçümde bu yüzeyden sıfır fazla geçen çıktı, çünkü kırk akışın içinde `dis`ten `ic`e giden
**yeni** bir akış yok. Sıfır ölçmek yüzeyin kapalı olduğunu göstermez; bu, kümenin
çözünürlüğüdür. **Daraltma:** ayna yerine durum bilgisi. Çizelge kapıyı yalnız açılmış
konuşmalara açar ve aynı dizide fazla geçeni **6**'dan **0**'a indirir.

**İkinci yüzey — yönsüz kural.** Dördüncü kural yalnız kaynağını yazıyor: yönetim
bölgesinden her hedefe, her bağlantı noktasına. Bu genişlik iki yönde de ödüyor — ileri
yönde ölçülemeyen bir açıklık, dönüş yönünde aynasızlık yüzünden **4** fazla duran.
**Daraltma:** kuralın hedefini ve bağlantı noktasını da yazmak. Bunun bedeli kural
sayısıdır ve o bedelin ölçülmesi sonraki iki dersin işidir.

**Üçüncü yüzey — kaleme uymayan taşıma.** Kırk akışın **12**'si bağlantı noktasının ima
ettiğinden başkasını taşıyor. Bağlantı noktasına bakan üç düzenek de bunların hepsini
geçiriyor ve ölçüde bu bir hata olarak görünmüyor. **Daraltma:** niyeti uygulama diliyle
yeniden yazmak. Cihazın fazladan okuması tek başına bir daraltma değildir; okunanı ölçüt
sayan bir niyet gerekir.

#### Özet

- Yazılmış sınırın iki değişmezi vardır: ilk eşleşen kazanır ve dizi örtük retle biter.
  Örtük ret, karşısında bir kural adı olmadığı için fazla duranı görünmez kılar.
- Üç türü ayıran şey kuralların yazımı değil, kuralın uygulandığı girdidir: paket filtreleme
  üçlüyü, durum bilgili düzenek konuşmanın açılış yönünü, uygulama farkındalıklı düzenek
  taşınan uygulamayı okur.
- Aynı yedi kuralla yansımasız filtre **6** fazla geçen ve **7** fazla duran, ayna kurallı
  filtre 13 kuralla **6** ve **4**, durum bilgili düzenek **0** ve **0** veriyor.
- Ayna kuralı fazla duranı üçte bir azaltır ama fazla geçene hiç dokunmaz ve iki ucunu
  yazmayan kuralı taklit edemez; durum bilgisinin yerini tutmaz.
- Uygulama farkındalıklı düzenek **8** fazla duran üretir ve fazla geçeni azaltmaz; niyet
  bağlantı noktasıyla yazıldığı sürece fazladan okunan alan ölçüye giremez.

#### Sonraki Adım

Bu derste kural dizisi sabit tutuldu ve yalnız onu işleten düzenek değişti. Diziye kendisine
bakılmadı: yedi kural doğru sayı mıdır, sıraları doğru sıra mıdır, bir kuralı silmek neyi
açar? Sonraki ders düzeneği sabitler ve diziyi değiştirir. Altı kurallık kısa bir küme,
sekiz kurallık uzun bir küme ve yedi kurallık dar küme aynı kırk akışta yan yana konur;
ölçülen şey kural sayısı ile politikanın karşılanması arasında bir bağ olup olmadığı ve
bir kuralın kendinden önceki bir kural yüzünden nasıl hiç okunmadan kalabileceğidir.

### Erişim Denetim Listeleri

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/erisim-denetim-listeleri

Aynı kırk akışta dört kural kümesi: yedi kurallık dar küme 40/40 doğru, altı kurallık geniş küme 2 akış fazladan geçirir, sekiz kurallık bozuk sıralı küme de 2 geçirir ve 1 kuralı gölgeler, yedi kurallık sıkılaştırılmış küme ise sızıntıyı sıfırlarken 2 akışı fazladan durdurur.

Önceki ders diziyi sabit tuttu ve onu işleten düzeneği değiştirdi. Durum bilgili düzenek
yedi kuralla kırk akışın kırkında niyetle aynı kararı verdi — ama o yedi kuralın doğru yedi
kural olduğunu hiçbir yerde göstermedik. Kabul edilmişti.

Bu ders bunun tersini yapar: düzenek sabittir, değişen şey dizinin kendisidir. Bir
**erişim denetim listesi (access control list)** sıralı bir (eylem, ölçüt) çiftleri
dizisidir; ölçüt, yazılan alanların hepsinin birden tutmasını ister ve yazılmayan alan her
değeri karşılar. Sorusu şudur: bir kural kümesinin niyeti ne kadar karşıladığını, kümeye
bakarak söyleyebilir miyiz?

#### Diziyi Anlam Yapan İki Şey

**Değerlendirme sırası (evaluation order)** ölçütün kendisi kadar belirleyicidir. Akış
diziye baştan girer, ilk eşleşen kuralın eylemi uygulanır, dizi orada biter. Aynı kuralları
başka bir sırayla dizmek başka bir sınır çizer.

**Örtük ret (implicit deny)** dizinin bittiği yerde durur ve yazılmaz. Bu dersteki dört
kümenin de bütün kuralları **geçir** eylemlidir; durduran tek şey örtük rettir. Bunun bir
ölçüm sonucu vardır: durdurulan her akış tek bir yerden, adı olmayan bir yerden durdurulur.

Siber Güvenlik müfredatının Çevre Savunması konusu erişim denetim listelerinin **yazımını**
öğretti — hangi alanın nereye geldiğini, listenin nasıl kurulduğunu. O yazım burada
tekrarlanmaz. Ölçülen şey listenin yazımı değil, **sıralı bir dizinin kendi semantiğidir**:
dizi niyetten iki yönde birden nerede ayrılıyor.

Önceki dersin yedi kurallık **dar** kümesinin yanına üç küme daha konur.

```text
# ogretilen kural dokumu , calistirilmamistir
# sozdizimi kurgudur ve hicbir cihazin bicimi degildir

genisletilmis (6) : dar kumenin ilk iki kurali tek kurala indirildi
  1  gecir  dis  dmz  *          <- 80 ve 443 yerine her bnokta
  2..6 = dar kumenin 3..7. kurallari

sirasi bozuk (8) : dar kumenin basina bir kural eklendi
  1  gecir  dmz  *    *          <- yeni , dizinin en basinda
  2..8 = dar kumenin 1..7. kurallari

sikilastirilmis (7) : dar kumenin 6. kurali daraltildi
  6  gecir  ic   dis  443        <- her bnokta yerine yalniz 443
```

#### Kural Gölgelemesi

Üçüncü kümedeki değişiklik bir kuralı **erişilemez** kılar. `dmz` kaynaklı her akışı
geçiren bir kural dizinin başına konduğunda, aşağıdaki "yalnız `dmz`den `ic`e 3306" kuralına
hiçbir akış ulaşamaz — çünkü ona ulaşabilecek her akış yukarıda zaten eşleşmiştir. Buna
**kural gölgelemesi (rule shadowing)** denir.

Tanım **durağandır**: bir kural, kendinden önceki bir kuralın ölçütünü tümüyle içeriyorsa
gölgelenmiştir. Bu, trafiğe bakılmadan, yalnız diziye bakılarak söylenebilir. Ayrımın neden
önemli olduğu ölçümden sonra görülecek.

Ölçümün varsayımları:

- **AG8** — Kırk akış ortak kurgudan değiştirilmeden alınır; kaynağı, hedefi ve bağlantı
  noktası kurgudandır. Kâhin niyetin kendisidir ve kurguyu biz yazdığımız için bilinir.
- **AG9** — Dört küme de aynı düzenekte işletilir: ilk eşleşen kazanır, dizi örtük retle
  biter, akışların hepsi yeni bağlantı sayılır. Önceki dersin evre ayrımı burada yoktur.
- **AG10** — Bir kuralın yazmadığı ölçüt her değeri karşılar; yazılan ölçütlerin ise hepsi
  birden tutmalıdır.
- **AG11** — Dört kümenin kuralları da **geçir** eylemlidir. Durduran tek şey örtük rettir;
  böylece fazla duranın kaynağı tek bir yerde toplanır.
- **AG12** — Kural gölgelemesi durağan tanımlanır ve trafiğe bakmaz; eşleşme sayacı ise
  yalnız trafiğe bakar. İkisi ayrı ölçülür.
- **AG13** — Eşleşme sayacı dizinin **kesildiği** yeri sayar: akış eşleştiği ilk kuralda
  durur, sonraki kurallara hiç girmez.
- **AG14** — Kırk olaylık kümede ölçülebilen en küçük fark **1/40 = 0,025**'tir.

#### Ölçüm

```python
"""Erisim denetim listeleri: kural sayisi, degerlendirme sirasi, golgeleme.

Bolum 1 - dort kume ayni kirk akista.
Bolum 2 - hangi kural kac akis esledi, ortuk rete kac akis dustu.
"""
TOHUM = 20260811
BOLGELER = ("dis", "dmz", "ic", "yonetim")
NOKTALAR = (80, 443, 22, 3306, 8080)


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def akislar(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)],
                      "hedef": BOLGELER[r(4)], "bnokta": NOKTALAR[r(5)]})
    return liste


def politika(a):
    """Niyet: disaridan yalniz DMZ'nin web kalemine; yonetime disaridan kimse."""
    if a["kaynak"] == "dis":
        return a["hedef"] == "dmz" and a["bnokta"] in (80, 443)
    if a["kaynak"] == "dmz":
        return a["hedef"] == "ic" and a["bnokta"] == 3306
    if a["kaynak"] == "yonetim":
        return True
    return a["hedef"] != "yonetim"


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def kural_dizisi(kurallar):
    """Ilk eslesen kazanir; sonda ortuk ret."""
    def calis(a):
        for eylem, olcut in kurallar:
            if all(a[k] == v for k, v in olcut.items()):
                return eylem
        return False
    return calis


def golgeli(kurallar):
    """Kendinden onceki bir kuralin tumuyle kapsadigi kurallarin sirasi."""
    liste = []
    for i, (_, olcut) in enumerate(kurallar):
        for _, onceki in kurallar[:i]:
            if all(olcut.get(k) == v for k, v in onceki.items()):
                liste.append(i)
                break
    return liste


def golgelenen(kurallar):
    return len(golgeli(kurallar))


def izle(kurallar, ak):
    """Her kuralin esledigi akis sayisi ve ortuk rete dusen akis sayisi."""
    sayac, ortuk = [0] * len(kurallar), 0
    for a in ak:
        for i, (_, olcut) in enumerate(kurallar):
            if all(a[k] == v for k, v in olcut.items()):
                sayac[i] += 1
                break
        else:
            ortuk += 1
    return sayac, ortuk


DAR = [(True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 80}),
       (True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 443}),
       (True, {"kaynak": "dmz", "hedef": "ic", "bnokta": 3306}),
       (True, {"kaynak": "yonetim"}),
       (True, {"kaynak": "ic", "hedef": "dmz"}),
       (True, {"kaynak": "ic", "hedef": "dis"}),
       (True, {"kaynak": "ic", "hedef": "ic"})]

GENIS = [(True, {"kaynak": "dis", "hedef": "dmz"})] + DAR[2:]
SIRASI_BOZUK = [(True, {"kaynak": "dmz"})] + DAR
SIKI = DAR[:5] + [(True, {"kaynak": "ic", "hedef": "dis", "bnokta": 443})] + DAR[6:]

KUMELER = (("dar", DAR), ("genişletilmiş", GENIS),
           ("sırası bozuk", SIRASI_BOZUK), ("sıkılaştırılmış", SIKI))
AK = akislar()

print(f"akış {len(AK)} | niyetin geçirdiği {sum(1 for a in AK if politika(a))} "
      f"| niyetin durdurduğu {sum(1 for a in AK if not politika(a))}")
print()
print(f"{'kural kümesi':<16s} {'kural':>5s} {'gölgelenen':>10s} {'örtük ret':>9s} "
      f"{'doğru':>5s} {'fazla geçen':>11s} {'fazla duran':>11s}")
for ad, k in KUMELER:
    d = fark(AK, politika, kural_dizisi(k))
    _, ortuk = izle(k, AK)
    print(f"{ad:<16s} {len(k):5d} {golgelenen(k):10d} {ortuk:9d} "
          f"{d['dogru_gecti'] + d['dogru_durdu']:5d} {d['yanlis_gecti']:11d} "
          f"{d['yanlis_durdu']:11d}")

print()
print("dar kümede kural başına eşleşme:", izle(DAR, AK)[0])
print("sırası bozuk kümede kural başına eşleşme:")
sayac, ortuk = izle(SIRASI_BOZUK, AK)
golge = golgeli(SIRASI_BOZUK)
for i, ((_, olcut), n) in enumerate(zip(SIRASI_BOZUK, sayac)):
    print(f"  {i + 1}. {str(olcut):<48s} {n:3d}"
          f"  {'gölgelenmiş' if i in golge else ''}".rstrip())
print(f"  örtük ret{'':42s} {ortuk:3d}")

print()
for ad, k in KUMELER[1:]:
    d = kural_dizisi(k)
    print(f"{ad}: fazla geçen",
          [(a["no"], a["kaynak"], a["hedef"], a["bnokta"])
           for a in AK if d(a) and not politika(a)],
          "| fazla duran",
          [(a["no"], a["kaynak"], a["hedef"], a["bnokta"])
           for a in AK if politika(a) and not d(a)])
```

```
akış 40 | niyetin geçirdiği 22 | niyetin durdurduğu 18

kural kümesi     kural gölgelenen örtük ret doğru fazla geçen fazla duran
dar                  7          0        18    40           0           0
genişletilmiş        6          0        16    38           2           0
sırası bozuk         8          1        16    38           2           0
sıkılaştırılmış      7          0        20    38           0           2

dar kümede kural başına eşleşme: [0, 1, 0, 11, 4, 3, 3]
sırası bozuk kümede kural başına eşleşme:
  1. {'kaynak': 'dmz'}                                  2
  2. {'kaynak': 'dis', 'hedef': 'dmz', 'bnokta': 80}    0
  3. {'kaynak': 'dis', 'hedef': 'dmz', 'bnokta': 443}   1
  4. {'kaynak': 'dmz', 'hedef': 'ic', 'bnokta': 3306}   0  gölgelenmiş
  5. {'kaynak': 'yonetim'}                             11
  6. {'kaynak': 'ic', 'hedef': 'dmz'}                   4
  7. {'kaynak': 'ic', 'hedef': 'dis'}                   3
  8. {'kaynak': 'ic', 'hedef': 'ic'}                    3
  örtük ret                                            16

genişletilmiş: fazla geçen [(3, 'dis', 'dmz', 3306), (18, 'dis', 'dmz', 8080)] | fazla duran []
sırası bozuk: fazla geçen [(23, 'dmz', 'yonetim', 8080), (39, 'dmz', 'yonetim', 8080)] | fazla duran []
sıkılaştırılmış: fazla geçen [] | fazla duran [(30, 'ic', 'dis', 3306), (35, 'ic', 'dis', 3306)]
```

#### Kural Saymak Politika Ölçmez

Dört satırı kural sayısına göre okursak sıra şudur: 6, 7, 7, 8. Doğru sayısına göre
okursak sıra şudur: 38, 40, 38, 38. İki sıralama arasında bir bağ yok.

**Yedi kural iki kez yazıldı ve iki ayrı sonuç verdi.** Dar küme 40/40 doğru; sıkılaştırılmış
küme aynı kural sayısıyla 38. **Sekiz kural yedi kuraldan iyi değil:** sırası bozuk küme bir
kural daha uzun ve 38'de kaldı. **Altı kural yedi kuraldan sade değil:** genişletilmiş küme
bir kural kısa ve yine 38. Kümenin uzunluğu, niyetten sapmasına dair hiçbir şey söylemiyor.

Sapmanın **yönü** de kümeden okunamıyor. Üç kusurlu kümenin üçü de 38 doğru veriyor, ama:

**Genişletilmiş küme 2 fazla geçen, 0 fazla duran.** Bir kuralın bağlantı noktası alanı
silindi ve `dis`ten `dmz`ye giden iki akış — biri 3306, biri 8080 — niyet onları
durduracakken geçti. Kural sayısı bir azaldı, açık yüzey iki akış büyüdü.

**Sırası bozuk küme 2 fazla geçen, 0 fazla duran.** Dizinin başına eklenen kural `dmz`
kaynaklı her şeyi geçiriyor; `dmz`den yönetim bölgesine giden iki akış böyle sızdı. Oysa
niyetin en kesin cümlesi buydu: yönetim bölgesine dışarıdan kimse.

**Sıkılaştırılmış küme 0 fazla geçen, 2 fazla duran.** Burada hiçbir sızıntı yok — kâğıt
üzerinde kusursuz. Bedeli öbür sütunda: `ic`ten `dis`e giden iki akış, bağlantı noktaları
443 olmadığı için kesildi ve niyet ikisini de geçirecekti. Yalnız sızıntıyı sayan bir
denetim bu kümeyi dar kümeden ayırt edemez.

İkişer akış, kırklık bir kümede **0,050**'lik paylardır; ölçülebilen en küçük fark
**0,025** olduğuna göre ikisi de ölçüm bandının içindedir.

#### Sıfır Eşleşme İki Ayrı Şey Söyler

Alt tablo dizinin işleyişini kural kural gösteriyor. Sırası bozuk kümede iki kuralın
eşleşmesi **0**: ikinci kural (`dis dmz 80`) ve dördüncü kural (`dmz ic 3306`). Sayaç ikisi
için de aynı şeyi yazıyor. Nedenleri aynı değil.

İkinci kural erişilebilir; kırk akışın içinde ona uyan akış yok. Trafik değişirse eşleşir.
Dördüncü kural ise **erişilemez**: ona ulaşabilecek her akış birinci kuralda kesiliyor.
Trafik ne olursa olsun eşleşmeyecek. Sayaç bu ikisini ayırt edemez; **durağan tarama**
ayırt eder ve son sütunda yalnız dördüncüsünü işaretler. Dar kümede de üçüncü kuralın
eşleşmesi 0'dır ve orada gölgelenen kural yoktur — aynı gözlem, başka neden.

Gölgelenen kuralın eylemi gölgeleyeninkinden **başka** olsaydı sonuç bu kadar sessiz
olmazdı. Bu dersteki dört kümenin de bütün kuralları geçir eylemliydi (AG11). Karışık bir
dizide, geniş bir **geçir** kuralının altında kalan bir **durdur** kuralı yazıldığı hâlde
hiç uygulanmaz; dizi, yazarının kapattığını sandığı bir yolu açık tutar. Durağan tarama iki
durumu da aynı biçimde işaretler — eylemleri karşılaştırmak taramanın işi değildir — ama
işaretin ağırlığı aynı değildir: birinde yalnız okunabilirlik, öbüründe politikanın kendisi
bozulur.

Gölgelenen kuralın kendisi bu ölçümde zarar vermiyor. Onu gölgeleyen kuralla aynı eylemi
taşıyor, dolayısıyla silinmesi kırk akışta hiçbir kararı değiştirmez. Zarar veren şey
gölgeleyen kuraldır ve zararı başka bir yerde ödenir: iki akışın yönetim bölgesine
sızmasında. Gölgelenen kural bir **belirtidir**, sızıntının kendisi değil. Belirtinin
söylediği şudur: diziyi okuyan biri "`dmz`den `ic`e yalnız veri kalemi açık" satırını
görüp inanır, oysa iki satır yukarısı o bölgeyi zaten tümüyle açmıştır. Kural dizisi,
okunduğu gibi çalışmıyor.

#### Açık Kalan Yüzeyler ve Daraltmalar

**Birinci yüzey — silinen ölçüt alanı.** Genişletilmiş kümede bağlantı noktası alanının
silinmesi bir kural kazandırdı ve iki akış sızdırdı. **Daraltma:** ölçütü yazmak. Bedeli
tam olarak bir kuraldır ve karşılığında fazla geçen **2**'den **0**'a iner. Ölçüt alanı
silinerek yapılan sadeleştirme, kural sayısını okuyan bir denetimde iyileşme gibi görünür.

**İkinci yüzey — dizinin başına konan geniş kural.** Bir bölgenin tümünü açan kural en
başa konduğunda kendinden sonraki bütün daraltmaları etkisizleştirir. **Daraltma:**
yerleştirmeyi ekleme sırasına değil **ölçüt kapsamına** göre yapmak — dar ölçütlü kurallar
önce, geniş olanlar sonra — ve diziyi her değişiklikten sonra durağan taramadan geçirmek.
Tarama bu kümede gölgelenen kuralı yakalıyor ve geniş kuralı işaret ediyor.

**Üçüncü yüzey — örtük retin sessizliği.** Sıkılaştırılmış kümede örtük ret **20** akış
kesiyor; bunların **18**'i niyetin de kestiği akışlar, **2**'si fazla duran. İkisi de aynı
yerden, adı olmayan bir yerden kesiliyor ve karşılarında bir kural adı yok. **Daraltma:**
dizinin sonuna, eylemi **durdur** olan ve her ölçütü açık bırakan bir kural yazmak. Kararı
değiştirmez — örtük ret zaten aynısını yapıyordu — ama durdurulan akışı sayılabilir kılar.
Fazla duran ancak sayılabildiği yerde ölçülebilir.

#### Özet

- Bir erişim denetim listesinin anlamı ölçütlerinden değil, ölçütler ile değerlendirme
  sırasının birlikte kurduğu diziden gelir; dizi yazılmayan bir örtük retle biter.
- Aynı kırk akışta dar küme **7** kuralla 40/40 doğru verir; genişletilmiş küme **6**
  kuralla **2** fazla geçen, sırası bozuk küme **8** kuralla **2** fazla geçen ve **1**
  gölgelenen kural, sıkılaştırılmış küme **7** kuralla **2** fazla duran üretir.
- Kural sayısı ile niyetten sapma arasında bağ yoktur: yedi kural iki kez yazıldı, biri 40
  biri 38 doğru verdi. **Kural saymak politika ölçmez.**
- Sapmanın yönü de kümeden okunmaz; üç kusurlu küme de 38 doğru verir ama ikisi fazladan
  geçirir, biri fazladan durdurur.
- Sıfır eşleşme iki ayrı nedenden gelir — kullanılmayan kural ile erişilemez kural — ve
  sayaç ikisini ayırt edemez; kural gölgelemesi ancak durağan taramayla görülür.
- Gölgelenen kural bir belirtidir; sızıntıyı üreten şey onu gölgeleyen geniş kuraldır.

#### Sonraki Adım

Bu dersteki bütün kurallar dört ad üzerine yazıldı: `dis`, `dmz`, `ic`, `yonetim`. Bu adlar
kurgudan geldi ve sorgulanmadı — sanki ağın bölgeleri verilmiş şeylermiş gibi. Oysa bölge
sayısı bir tasarım kararıdır: aynı ağ iki bölgeye de bölünebilir, altıya da. Sonraki ders
kuralları sabit bir niyetten türetip bölge grafiğini değiştirir ve iki şeyi birden ölçer:
bölge sayısı arttıkça kaç kural gerekiyor ve bölgeleri birleştirmek ile bölmek niyetten
sapmayı hangi yönde kaydırıyor.

### Ağ Bölütleme ve DMZ

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/ag-bolutleme-ve-dmz

Aynı niyet dört bölge grafiğinde kural kümesine çevrilir: iki bölgede sızdırmayan en dar türetim hiçbir şey geçirmez ve 22 akışı fazladan durdurur, geniş türetim 6 akış sızdırır; dört bölgede 38 kuralla sapma sıfırlanır ve altı bölgede kural 88'e çıkarken sapma sıfırda kalır.

Önceki dersteki bütün kurallar dört ad üzerine yazıldı: `dis`, `dmz`, `ic`, `yonetim`. Bu
adlar kurgudan geldi ve hiç sorgulanmadı — sanki ağın bölgeleri verilmiş şeylermiş gibi.
Oysa hiçbir kural bir makineyi adlandırmıyor; hepsi bir **bölge** adlandırıyor. Bölgeler
kaldırılırsa geriye yazılabilecek bir kural kalmaz.

Bu dersin sorusu şudur: bölgeleri kim, kaç tane seçiyor ve bu seçim niyetin ne kadarını
söylenebilir kılıyor? Kural kümesi bu derste elle yazılmaz; **bölge grafiğinden türetilir**.
Böylece değişen tek şey grafik olur.

#### Bölge Bir Politika Nesnesidir

**Bölütleme (segmentation)** düzeneği bu kursun konusu değil: yayın alanının nasıl
bölündüğü, sanal yerel ağların nasıl etiketlendiği ve bir anahtarın bunu nasıl uyguladığı
Anahtarlama ve Yönlendirme kursunda kuruldu. Buradaki bölge o düzeneğin ürünü değil,
**politikanın konuşabildiği en küçük addır.**

Fark şurada görünür: iki makine aynı bölgede olduğu sürece aralarına kural yazılamaz.
Bölge, kuralın çözünürlüğüdür. Bir niyeti söyleyebilmek için grafiğin, niyetin ayırt ettiği
her şeyi ayırt etmesi gerekir.

**Silahtan arındırılmış bölge (demilitarized zone)** tam olarak bu yüzden vardır. Niyetin
orta terimi budur: dışarıya açık ama içeriye ait olmayan bir yer. Bu ad olmadan dışarıdan
gelen akış için iki seçenek kalır — ya içeriye alınır ya hiç alınmaz.

```text
# ogretilen bolge grafigi , calistirilmamistir
# adlar kurgudur

  dis ──80,443──> dmz ──3306──> ic <──> ic
                                 │
   x─────────────────────────────┴───x─── yonetim
                            (yonetim her yere gider , kimse ona gitmez)

birlestirme :  2 bolge  dis | dmz+ic+yonetim
               3 bolge  dis | dmz | ic+yonetim
bolme       :  6 bolge  dis | dmz-web | dmz-yay | ic-veri | ic-uyg | yonetim
```

Siber Güvenlik müfredatının Çevre Savunması konusu güven bölgelerinin **tasarımını** ele
aldı: hangi varlık hangi bölgeye konur, katmanlar nasıl dizilir. O tasarım anlatısı burada
tekrarlanmaz. Ölçülen şey **bölge grafiğinin politikayı ne kadar karşılayabildiğidir.**

#### Grafik Kuralları Türetir

Bir grafik verildiğinde, her bölge çiftinin ve her bağlantı noktasının altında bir ya da
daha çok **temel** çift toplanır. Grafik kabalaştıkça bir çiftin altında birden çok temel
çift birikir ve o çift için tek bir karar verilmek zorunda kalınır. İki türetim mümkündür:

**Dar türetim** kuralı yalnız altındaki temel çiftlerin **hepsi** izinliyse yazar. Hiç
sızdırmaz; karışık çiftlerin izinli olanlarını da keser.

**Geniş türetim** kuralı altındaki çiftlerden **biri** bile izinliyse yazar. Hiçbir izinli
akışı kesmez; karışık çiftlerin yasak olanlarını da geçirir.

Grafik temel bölgelerin hepsini ayırt edebiliyorsa hiçbir çiftin altında karışıklık kalmaz
ve iki türetim aynı kümeyi verir. **Belirsizlik grafikten değil, birleştirmeden doğar.**

Bir uyarı: bu türetim kümeyi **açılmış** biçimde yazar, her bağlantı noktası için ayrı bir
kural üretir. Önceki dersin yedi kurallık kümesi aynı sınırı **sıkıştırılmış** biçimde
yazıyordu — yazılmayan alan her değeri karşılıyordu. İki sayı aynı ölçeğe konmaz; bu
derste karşılaştırılan şey grafikler arasındaki **oran**dır.

Ölçümün varsayımları:

- **AG15** — Kırk akış ortak kurgudan değiştirilmeden alınır; kâhin niyetin kendisidir ve
  bütün ölçümlerde temel bölge adlarına bakar.
- **AG16** — Altı bölgeli ince grafik için her akışın iki ucu, ayrı bir üreteçten gelen bir
  seçimle temel bölgesinin alt bölgelerinden birine yerleştirilir. Bir ucun temel bölgesi
  değişmez; yalnız daha ince bir adı olur.
- **AG17** — Kural kümesi elle yazılmaz, grafikten türetilir. Değişen tek şey grafiktir;
  politika ve niyet sabittir.
- **AG18** — Türetim kuralları açılmış yazar: her bölge çifti ve her bağlantı noktası için
  ayrı bir kural. Kural sayıları önceki dersin sıkıştırılmış kümeleriyle karşılaştırılmaz.
- **AG19** — Türetilen bütün kurallar **geçir** eylemlidir; durduran tek şey örtük rettir.
- **AG20** — Grafik yalnız bölge adlarını değiştirir. Bağlantı noktası kümesi, akış sayısı
  ve niyet dört grafikte de aynıdır.
- **AG21** — Kırk olaylık kümede ölçülebilen en küçük fark **1/40 = 0,025**'tir.

#### Ölçüm

```python
"""Ag bolutleme: bolge grafigi degisince kural sayisi ve iki yonlu hata.

Bolum 1 - grafik, ayni niyetten kural kumesi turetir.
Bolum 2 - birlestirmenin ve bolmenin fazla gecen / fazla durana etkisi.
"""
TOHUM = 20260811
BOLGELER = ("dis", "dmz", "ic", "yonetim")
NOKTALAR = (80, 443, 22, 3306, 8080)
INCE = ("dis", "dmz-web", "dmz-yay", "ic-veri", "ic-uyg", "yonetim")
TEMEL = {"dis": "dis", "dmz-web": "dmz", "dmz-yay": "dmz",
         "ic-veri": "ic", "ic-uyg": "ic", "yonetim": "yonetim"}


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def akislar(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)],
                      "hedef": BOLGELER[r(4)], "bnokta": NOKTALAR[r(5)]})
    return liste


def altlara_ayir(ak, tohum=TOHUM + 3):
    """Her ucu, temel bolgesinin alt bolgelerinden birine yerlestirir."""
    r = uretec(tohum)
    ikili = {"dmz": ("dmz-web", "dmz-yay", "dmz-web", "dmz-yay"),
             "ic": ("ic-veri", "ic-uyg", "ic-uyg", "ic-veri")}
    for a in ak:
        for uc in ("kaynak", "hedef"):
            b = a[uc]
            a["ince_" + uc] = ikili[b][r(4)] if b in ikili else b
    return ak


def politika(a):
    """Niyet: disaridan yalniz DMZ'nin web kalemine; yonetime disaridan kimse."""
    if a["kaynak"] == "dis":
        return a["hedef"] == "dmz" and a["bnokta"] in (80, 443)
    if a["kaynak"] == "dmz":
        return a["hedef"] == "ic" and a["bnokta"] == 3306
    if a["kaynak"] == "yonetim":
        return True
    return a["hedef"] != "yonetim"


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def kural_dizisi(kurallar):
    """Ilk eslesen kazanir; sonda ortuk ret."""
    def calis(a):
        for eylem, olcut in kurallar:
            if all(a[k] == v for k, v in olcut.items()):
                return eylem
        return False
    return calis


GRAFIKLER = (
    ("2 bölge", {f: ("dis" if f == "dis" else "ic") for f in INCE}),
    ("3 bölge", {f: ("ic" if f == "yonetim" else TEMEL[f]) for f in INCE}),
    ("4 bölge", dict(TEMEL)),
    ("6 bölge", {f: f for f in INCE}),
)


def kume_uret(grafik, gevsek):
    """Grafigin ayirabildigi kadariyla niyeti karsilayan kural kumesi."""
    adlar = sorted(set(grafik.values()))
    kurallar = []
    for gk in adlar:
        for gh in adlar:
            for p in NOKTALAR:
                izin = [politika({"kaynak": TEMEL[f1], "hedef": TEMEL[f2],
                                  "bnokta": p})
                        for f1 in INCE if grafik[f1] == gk
                        for f2 in INCE if grafik[f2] == gh]
                if all(izin) or (gevsek and any(izin)):
                    kurallar.append((True, {"kaynak": gk, "hedef": gh,
                                            "bnokta": p}))
    return kurallar


def duzenek(grafik, kurallar):
    k = kural_dizisi(kurallar)
    return lambda a: k({"kaynak": grafik[a["ince_kaynak"]],
                        "hedef": grafik[a["ince_hedef"]],
                        "bnokta": a["bnokta"]})


AK = altlara_ayir(akislar())
print(f"akış {len(AK)} | niyetin geçirdiği {sum(1 for a in AK if politika(a))} "
      f"| ince bölge {len(INCE)}")
print()
print(f"{'bölge grafiği':<12s} {'bölge':>5s} {'türetim':<7s} {'kural':>5s} "
      f"{'doğru':>5s} {'fazla geçen':>11s} {'fazla duran':>11s}")
for ad, g in GRAFIKLER:
    for tur, gevsek in (("dar", False), ("geniş", True)):
        k = kume_uret(g, gevsek)
        d = fark(AK, politika, duzenek(g, k))
        print(f"{ad:<12s} {len(set(g.values())):5d} {tur:<7s} {len(k):5d} "
              f"{d['dogru_gecti'] + d['dogru_durdu']:5d} {d['yanlis_gecti']:11d} "
              f"{d['yanlis_durdu']:11d}")

print()
for ad, g in GRAFIKLER[:2]:
    f = duzenek(g, kume_uret(g, True))
    print(f"{ad} geniş türetimin fazladan geçirdikleri:",
          [(a["no"], a["kaynak"], a["hedef"], a["bnokta"])
           for a in AK if not politika(a) and f(a)])

INCE_G = GRAFIKLER[3][1]
EKSIK = [(e, o) for e, o in kume_uret(INCE_G, False) if o["hedef"] != "ic-uyg"]
UNUTAN = duzenek(INCE_G, EKSIK)
d = fark(AK, politika, UNUTAN)
print()
print(f"6 bölge, 'ic-uyg' hedefli kurallar yazılmamış: kural {len(EKSIK)}, "
      f"doğru {d['dogru_gecti'] + d['dogru_durdu']}, "
      f"fazla geçen {d['yanlis_gecti']}, fazla duran {d['yanlis_durdu']}")
print("kesilen akışlar:",
      [(a["no"], a["ince_kaynak"], a["ince_hedef"], a["bnokta"])
       for a in AK if politika(a) and not UNUTAN(a)])
```

```
akış 40 | niyetin geçirdiği 22 | ince bölge 6

bölge grafiği bölge türetim kural doğru fazla geçen fazla duran
2 bölge          2 dar         0    18           0          22
2 bölge          2 geniş      12    34           6           0
3 bölge          3 dar        12    29           0          11
3 bölge          3 geniş      18    38           2           0
4 bölge          4 dar        38    40           0           0
4 bölge          4 geniş      38    40           0           0
6 bölge          6 dar        88    40           0           0
6 bölge          6 geniş      88    40           0           0

2 bölge geniş türetimin fazladan geçirdikleri: [(23, 'dmz', 'yonetim', 8080), (26, 'ic', 'yonetim', 8080), (27, 'ic', 'yonetim', 8080), (32, 'dis', 'ic', 443), (36, 'dis', 'ic', 443), (39, 'dmz', 'yonetim', 8080)]
3 bölge geniş türetimin fazladan geçirdikleri: [(26, 'ic', 'yonetim', 8080), (27, 'ic', 'yonetim', 8080)]

6 bölge, 'ic-uyg' hedefli kurallar yazılmamış: kural 71, doğru 38, fazla geçen 0, fazla duran 2
kesilen akışlar: [(4, 'ic-veri', 'ic-uyg', 443), (38, 'yonetim', 'ic-uyg', 443)]
```

#### Birleştirmenin Ödettiği

İki bölgeli grafiğin dar türetimi **sıfır kural** üretiyor. Bu bir yazım hatası değil,
türetimin verdiği yanıt: iki bölgeli bir uzayda hiçbir çift, altındaki temel çiftlerin
hepsinde izinli değil. Sınırın tamamı örtük rete iniyor. Fazla geçen **0** — kâğıt üzerinde
kusursuz. Fazla duran **22**: niyetin geçirdiği yirmi iki akışın hepsi kesiliyor.

Aynı grafiğin geniş türetimi **12** kural yazıyor ve hatanın yönünü tersine çeviriyor:
fazla duran **0**, fazla geçen **6**. Sızan altı akışın dördü yönetim bölgesine gidiyor,
ikisi dışarıdan doğrudan içeriye. Grafik değişmedi, niyet değişmedi; değişen tek şey karışık
bir çiftin nasıl okunacağı oldu. **Bir grafik iki bölgeye indiğinde, hatanın yönü artık
tasarımın değil türetimin seçimidir.** Silahtan arındırılmış bölgenin gerekçesi bu satırdır:
o ad olmadan "dışarıya açık ama içeriye ait değil" cümlesi söylenemez.

Üç bölgeli grafik dışarıyı ve silahtan arındırılmış bölgeyi ayırıyor, yönetimi içeride
bırakıyor. Dar türetim **12** kuralla **11** akışı fazladan durduruyor; geniş türetim
**18** kuralla yalnız **2** akış sızdırıyor ve ikisi de `ic`ten yönetime giden akışlar.
Yönetimi içeriyle aynı ada koymak, "içeriden yönetime gidilmez" cümlesini söylenemez
kılıyor — bir bölge birleştirmesi, bir yasağı doğrudan siliyor.

Dört bölgeli grafikte iki türetim **aynı 38 kuralı** veriyor ve sapma iki yönde de sıfır.
Beklenen sonuç: grafik niyetin ayırt ettiği her şeyi ayırt ediyor, karışık çift kalmıyor,
seçilecek bir şey kalmıyor.

#### Bölmenin Ödemediği

Altı bölgeli grafik silahtan arındırılmış bölgeyi ve içeriyi ikişer parçaya bölüyor. Bölge
sayısı 4'ten 6'ya çıkıyor — **1,5 kat**. Kural sayısı 38'den 88'e çıkıyor — **2,3 kat**;
türetim her bölge çifti için kural yazdığı sürece bu büyüme bölge sayısının karesiyle gider.
Niyetten sapma ise **0**'dan **0**'a gidiyor. Kırk akışın kırkında karar zaten doğruydu ve
doğru kalıyor.

Ölçünün söylediği şey şudur: **bölge eklemek niyete yaklaştırmaz.** Dört bölge niyeti
söyleyebiliyordu; altı bölge onu daha uzun söylüyor. Bu, bölmenin yararsız olduğu anlamına
gelmez — söylenebilecek **başka** niyetler açar. Ama bu ölçüde kazanılan bir şey yoktur ve
maliyeti elli kuraldır.

Bölmenin kendine ait bir riski var ve alt tabloda duruyor. Bölge ikiye ayrıldığında kurallar
her iki yarı için ayrı ayrı yeniden yazılmalıdır; bir yarı unutulduğunda küme **71** kurala
iniyor, fazla geçen **0** kalıyor ve fazla duran **2**'ye çıkıyor. İki akış da bölünmenin
unutulan yarısına gidiyor. Bölme hatası tek yönlüdür: yeni bölge adı hiçbir kuralda
geçmediği için hiçbir şeyi açmaz, yalnız kapatır.

#### Açık Kalan Yüzeyler ve Daraltmalar

**Birinci yüzey — geniş türetimin karışık çiftleri.** İki bölgeli grafikte altı akış, üç
bölgeli grafikte iki akış niyetin yasakladığı hâlde geçiyor. Bunlar bir yapılandırma hatası
değil; grafiğin **söyleyemediği** şeyler. **Daraltma:** yeni bir bölge adı. Yönetimi ayrı
bir ada taşımak üç bölgedeki iki sızıntıyı sıfırlıyor; silahtan arındırılmış bölgeyi ayırmak
ikideki dördü kapatıyor. Kural değil, **ad** ekleniyor.

**İkinci yüzey — dar türetimin sessiz kesmesi.** İki bölgeli grafikte 22, üç bölgeli
grafikte 11 akış örtük retle düşüyor ve hiçbirinin karşısında bir kural adı yok. Yalnız
sızıntı sayan bir denetim iki bölgeli grafiği kusursuz ilan eder. **Daraltma:** ölçümü iki
yönlü kurmak ve dizinin sonuna sayılabilir bir durdur kuralı yazmak — önceki dersin
daraltması burada da geçerlidir.

**Üçüncü yüzey — bölünmüş bölgenin unutulan yarısı.** Bir bölgeyi ikiye ayırmak, ona değen
bütün kuralları iki katına çıkarır. Ölçümde unutulan yarı yalnız fazla duran ürettiği için
görünürdür — kullanıcı şikâyet eder. Ters yönü daha sessizdir: yeni ad, kendisine değmeyen
geniş bir kuralın altında kalırsa hiç fark edilmez. **Daraltma:** bölme işlemini kural
yazımından ayırmamak; her yeni bölge adı için türetimi baştan koşturmak ve kural sayısındaki
beklenen artışı önceden hesaplamak. Beklenenden az kural, yazılmamış kural demektir.

#### Özet

- Bölge bir bölütleme düzeneği değil, **politikanın konuşabildiği en küçük addır**; iki
  makine aynı bölgedeyse aralarına kural yazılamaz.
- Kaba bir grafikte her bölge çiftinin altında karışık temel çiftler birikir ve iki türetim
  doğar: dar türetim sızdırmaz ama fazladan durdurur, geniş türetim durdurmaz ama sızdırır.
- İki bölgeli grafikte dar türetim **0** kural yazar ve **22** akışı fazladan durdurur;
  geniş türetim **12** kuralla **6** akış sızdırır. Silahtan arındırılmış bölgenin gerekçesi
  budur — o ad olmadan niyetin orta terimi söylenemez.
- Dört bölgede iki türetim aynı **38** kuralı verir ve sapma iki yönde de sıfırdır;
  belirsizlik grafikten değil, birleştirmeden doğar.
- Bölge 4'ten 6'ya çıkarken kural 38'den 88'e çıkar, sapma **0**'da kalır: bölge eklemek
  niyete yaklaştırmaz, yalnız aynı niyeti uzatır.
- Bir bölgeyi bölüp bir yarısının kurallarını yazmamak **0** fazla geçen ve **2** fazla
  duran üretir; bölme hatası tek yönlüdür.

#### Sonraki Adım

Buraya kadarki üç ders de sınırı **bir kez** karar veren bir düzenek saydı: akış gelir,
kural dizisinden geçer, geçer ya da durur. Karar akışın kendi alanlarından okunur ve orada
biter. Oysa bir akışın niyete uyup uymadığı, bazen alanlarından değil **davranışından**
anlaşılır — ve davranış bir eşikle okunur. Sonraki ders kural dizisini bırakıp eşiği ölçer:
eşik sıkıldığında kaçırılan akış sayısı düşer, boşuna durdurulan akış sayısı yükselir ve iki
sayı aynı anda sıfırlanamaz. Aynı ölçü, tespit eden bir düzenekle önleyen bir düzenekte
aynı sayıyı verir ama aynı bedeli ödetmez.

### Saldırı Tespit ve Önleme

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/saldiri-tespit-ve-onleme

Eşiğe dayanan bir düzenekte iki hata birbirine bağlıdır: ağ tabanlı sistemde eşik 7 iken fazla geçen 0 ama fazla duran 7, eşik 9 iken fazla duran 0 ama fazla geçen 5; konak tabanlı sistemin 8 yasak akışı ise hiçbir eşikte görünmez çünkü onları hiç görmez.

Önceki üç ders de sınırı **bir kez** karar veren bir düzenek saydı. Akış gelir, alanları
okunur, kural dizisinden geçer, geçer ya da durur. Karar kesindir çünkü ölçüt kesindir: bir
akış ya `dmz` kaynaklıdır ya değildir, arada bir şey yoktur.

Bu ders kesin olmayan bir ölçüte bakar. Bir **saldırı tespit sistemi (intrusion detection
system)** akışı iki ayrı biçimde değerlendirebilir: bilinen bir örüntüyü arayan türü, önceki
üç dersteki alan eşleştirmesinin aynısını yapar; bu dersin baktığı tür ise akışı
**davranışından** değerlendirir ve davranışı bir sayıya indirir. O sayı ile bir **eşik**
karşılaştırılır. Yeni olan şey eşiğin kendisi değil,
sayının iki sınıf arasında **örtüşmesidir** — ve bu dersin tamamı o örtüşmenin içinde geçer.

#### Eşik Bir Kural Değildir

Kural dizisinin ölçütü ikilidir ve ayırt ettiği şeyi kusursuz ayırt eder. Eşiğin ölçütü
süreklidir ve ayırt ettiği iki sınıfın değerleri iç içe girer. Niyetin geçirdiği akışların
sayıları düşük, durdurduklarınınki yüksektir; ama iki dağılım bir bantta üst üste biner ve o
bandın içinde hiçbir eşik doğru yanıt vermez.

```text
# ogretilen olcek , calistirilmamistir
# eksen skordur , sayilar olcum blogundan gelir

  niyetin gecirdigi akislar  |==========|
  niyetin durdurdugu akislar        |==============|
                                    ^^^^  ortusme bandi

  esik bu eksende bir yere konur :
    sola kayarsa  -> fazla duran buyur , fazla gecen kucul
    saga kayarsa  -> fazla gecen buyur , fazla duran kucul
    bandin disina cikamaz
```

Bu, düzeneğin bir kusuru değil, ölçütün doğasıdır. Ölçüt kusursuz ayırsaydı zaten kural
yazılabilirdi ve eşiğe gerek kalmazdı.

#### İki Sistemin Gördüğü

**Ağ tabanlı** sistem akışın kendisini değerlendirir ve bölge fark etmeksizin kırk akışın
kırkını da görür. Gördüğü şey akışın dışıdır; sayısı gürültülüdür.

**Konak tabanlı** sistem akışın indiği uçta çalışır. Uçtaki bağlamı gördüğü için sayısı daha
keskindir, ama yalnız **kendi konağına inen** akışı görür; başka bir bölgeye inen akış hiç
alanına girmez ve o akışa dair bir kararı yoktur.

Siber Güvenlik müfredatının Çevre Savunması konusu bu sistemleri **yerleşimleriyle** ve
**imza yordamıyla** ele aldı: duyarga nereye konur, imza nasıl yazılır, hangi kayıt nasıl
eşleştirilir. O anlatı burada tekrarlanmaz. Ölçülen şey yerleşim değil, **iki yönlü
hatanın eşiğe bağlı davranışıdır**.

Ölçümün varsayımları:

- **AG22** — Kırk akış ortak kurgudan değiştirilmeden alınır; kâhin niyetin kendisidir ve
  bir akışın gerçekten niyete uyup uymadığını söyler.
- **AG23** — Skor kâhinden türetilir: niyetin durdurduğu akış 7 tabanından, geçirdiği akış
  2 tabanından başlar ve üzerine ayrı bir üreteçten gelen gürültü eklenir. Kurgu budur
  çünkü bir tespit sisteminin gördüğü şey ihlalin **gürültülü izidir**; izi biz yazdığımız
  için örtüşme bandı bilinir.
- **AG24** — Ağ tabanlı sistemin gürültü genişliği 7, konak tabanlınınki 6'dır. Konak
  tabanlının daha keskin olması bu genişlik farkından gelir; iki skor ayrı üreteçlerden
  üretilir ve birbirinden bağımsızdır.
- **AG25** — Konak tabanlı sistem yalnız hedefi `ic` ya da `yonetim` olan akışı görür;
  öteki akışlarda kararı **geçir**dir, çünkü kararı yoktur.
- **AG26** — Düzeneğin kararı `skor < eşik` biçimindedir; eşik yükseldikçe daha az akış
  durdurulur.
- **AG27** — İkisi birlikte çalışırken akış ancak **her ikisi de** geçirirse geçer.
- **AG28** — `durduran` sütunu düzeneğin durdurduğu bütün akışları sayar, doğrusunu da
  yanlışını da. Tespit kipinde bu sütun **uyarı** sayısıdır, önleme kipinde **kesilen akış**
  sayısı.
- **AG29** — Kırk olaylık kümede ölçülebilen en küçük fark **1/40 = 0,025**'tir.

#### Ölçüm

```python
"""Saldiri tespit ve onleme: esik degistikce iki yonlu hatanin kaymasi.

Bolum 1 - ag tabanli sistem, esik taramasi.
Bolum 2 - konak tabanli sistem ve ikisinin birlikte karari.
"""
TOHUM = 20260811
BOLGELER = ("dis", "dmz", "ic", "yonetim")
NOKTALAR = (80, 443, 22, 3306, 8080)
KONAKLI = ("ic", "yonetim")


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def akislar(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)],
                      "hedef": BOLGELER[r(4)], "bnokta": NOKTALAR[r(5)]})
    return liste


def politika(a):
    """Niyet: disaridan yalniz DMZ'nin web kalemine; yonetime disaridan kimse."""
    if a["kaynak"] == "dis":
        return a["hedef"] == "dmz" and a["bnokta"] in (80, 443)
    if a["kaynak"] == "dmz":
        return a["hedef"] == "ic" and a["bnokta"] == 3306
    if a["kaynak"] == "yonetim":
        return True
    return a["hedef"] != "yonetim"


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def puanla(ak, alan, genislik, tohum):
    """Ihlalin gurultulu izi: yasak akis 7'den, izinli akis 2'den baslar."""
    r = uretec(tohum)
    for a in ak:
        a[alan] = (7 if not politika(a) else 2) + r(genislik)
    return ak


def ag_tabanli(esik):
    return lambda a: a["ag_skor"] < esik


def konak_tabanli(esik):
    """Yalniz kendi konagina inen akisi gorur; otekini gecirir."""
    return lambda a: a["konak_skor"] < esik if a["hedef"] in KONAKLI else True


def birlikte(ea, ek):
    return lambda a: ag_tabanli(ea)(a) and konak_tabanli(ek)(a)


AK = puanla(puanla(akislar(), "ag_skor", 7, TOHUM + 5),
            "konak_skor", 6, TOHUM + 7)

print(f"akış {len(AK)} | niyetin geçirdiği {sum(1 for a in AK if politika(a))} "
      f"| konak tabanlının gördüğü "
      f"{sum(1 for a in AK if a['hedef'] in KONAKLI)}")
print(f"ağ skoru: izinli {min(a['ag_skor'] for a in AK if politika(a))}"
      f"-{max(a['ag_skor'] for a in AK if politika(a))}, "
      f"yasak {min(a['ag_skor'] for a in AK if not politika(a))}"
      f"-{max(a['ag_skor'] for a in AK if not politika(a))}")
print()
print(f"{'düzenek':<16s} {'eşik':>4s} {'doğru':>5s} {'fazla geçen':>11s} "
      f"{'fazla duran':>11s} {'durduran':>8s}")
sinamalar = ([("ağ tabanlı", e, ag_tabanli(e)) for e in range(6, 13)]
             + [("konak tabanlı", e, konak_tabanli(e)) for e in range(6, 10)]
             + [("ikisi birlikte", e, birlikte(e, e)) for e in (8, 9)])
for ad, e, f in sinamalar:
    d = fark(AK, politika, f)
    print(f"{ad:<16s} {e:4d} {d['dogru_gecti'] + d['dogru_durdu']:5d} "
          f"{d['yanlis_gecti']:11d} {d['yanlis_durdu']:11d} "
          f"{sum(1 for a in AK if not f(a)):8d}")

print()
print("ağ tabanlı, eşik 7 — boşuna durdurulanlar:",
      [(a["no"], a["ag_skor"]) for a in AK
       if politika(a) and not ag_tabanli(7)(a)])
print("ağ tabanlı, eşik 9 — kaçırılanlar:",
      [(a["no"], a["ag_skor"]) for a in AK
       if not politika(a) and ag_tabanli(9)(a)])
print("konak tabanlının hiç göremediği yasak akış:",
      sum(1 for a in AK if not politika(a) and a["hedef"] not in KONAKLI))
```

```
akış 40 | niyetin geçirdiği 22 | konak tabanlının gördüğü 21
ağ skoru: izinli 2-8, yasak 7-13

düzenek          eşik doğru fazla geçen fazla duran durduran
ağ tabanlı          6    27           0          13       31
ağ tabanlı          7    33           0           7       25
ağ tabanlı          8    32           4           4       18
ağ tabanlı          9    35           5           0       13
ağ tabanlı         10    33           7           0       11
ağ tabanlı         11    31           9           0        9
ağ tabanlı         12    26          14           0        4
konak tabanlı       6    28           8           4       14
konak tabanlı       7    29           8           3       13
konak tabanlı       8    30          10           0        8
konak tabanlı       9    29          11           0        7
ikisi birlikte      8    35           1           4       21
ikisi birlikte      9    38           2           0       16

ağ tabanlı, eşik 7 — boşuna durdurulanlar: [(7, 8), (11, 7), (20, 7), (21, 8), (24, 8), (30, 8), (38, 7)]
ağ tabanlı, eşik 9 — kaçırılanlar: [(2, 7), (12, 7), (31, 8), (36, 7), (37, 7)]
konak tabanlının hiç göremediği yasak akış: 8
```

#### Eşiği Sıkmanın İki Yönü

Ağ tabanlı sistemin skorları izinli akışlarda **2–8**, yasak akışlarda **7–13** aralığında.
Örtüşme bandı iki değerden ibaret: **7 ve 8**. Alt tablodaki iki liste bunu doğruluyor —
boşuna durdurulan yedi akışın da, kaçırılan beş akışın da skoru 7 ya da 8. **Bandın
dışındaki hiçbir akış hata üretmiyor.**

Eşik **7**'ye çekildiğinde fazla geçen **0**'a iniyor. Yasak akışların hepsi durduruluyor;
kâğıt üzerinde kusursuz bir sonuç. Bedeli öbür sütunda: **7** izinli akış boşuna
durduruluyor. Eşik **9**'a açıldığında bu kez fazla duran **0**'a iniyor ve fazla geçen
**5**'e çıkıyor. **6**'ya kadar sıkmak fazla duranı **13**'e çıkarıyor, **12**'ye kadar
açmak fazla geçeni **14**'e.

İki sütun aynı anda sıfırlanmıyor ve sıfırlanamaz — çünkü örtüşme bandındaki akışların
skorları birbirinden ayırt edilemez. Bu, önceki iki dersteki durumdan başka bir şey:
orada iki yönlü hata **yanlış yazılmış** bir kümenin sonucuydu ve doğru küme ikisini birden
sıfırlıyordu. Burada doğru eşik yok; yalnız **hangi hatanın tercih edildiğine** dair bir
karar var. **Tek yönü sıfırlamak öbür yönü gizler** ve gizlenen yön ölçülmediği sürece
düzenek kusursuz görünür.

Doğru sütununun tepe noktası eşik **9**'da, **35**'te. Hataların **eşit** olduğu nokta ise
eşik 8'de (4 ve 4) ve orada doğru **32**. İkisini eşitlemek toplam doğruyu en büyük yapmıyor,
çünkü iki sınıfın büyüklüğü eşit değil: niyet **22** akışı geçiriyor, **18**'ini durduruyor.
Hangisinin daha pahalı olduğu ölçünün söyleyeceği bir şey değil, politikanın söyleyeceği bir
şeydir.

#### Görüşün Tabanı

Konak tabanlı sistem daha keskin bir skor üretiyor ama fazla geçeni hiçbir eşikte **8**'in
altına inmiyor. Nedeni eşikte değil: kırk akışın **19**'u onun görüş alanının dışında ve
bunların **8**'i niyetin durdurduğu akış. Görülmeyen akış hakkında karar da yok, hata da
yok — yalnız geçiş var. **Eşikle onarılamayan tek hata, görülmeyen olaydan doğan hatadır.**

İkisi birlikte çalıştığında tablo değişiyor. Eşik 9'da ağ tabanlı **5**, konak tabanlı
**11** akış kaçırıyor; ikisi birlikte **2**. Fazla duran yine **0** ve doğru **38**'e
çıkıyor — iki sistemin tek başına ulaşamadığı bir sayı. Kazanç birleştirmenin kendisinden
değil, **körlüklerin örtüşmemesinden** geliyor: ağ tabanlının gürültüde kaybettiği akışı
konak tabanlı keskin görüyor, konak tabanlının hiç görmediği bölgeyi ağ tabanlı görüyor.
Kalan **2** kaçırılan akış ikisinin de yanıldığı yerdir ve daha fazla düzenek eklemek onu
kapatmaz; kapatan şey ölçütü değiştirmektir.

#### Tespit ile Önleme Arasındaki Fark

Buraya kadarki bütün satırlar iki kipte de aynıdır. **Saldırı önleme sistemi (intrusion
prevention system)** akışı keser; tespit sistemi akışı geçirir ve bir kayıt yazar. Fazla
geçen ve fazla duran sayıları ikisinde de aynı çıkar, çünkü ikisi de aynı kararı verir.
Değişen şey o kararın **bedelidir** ve bedel `durduran` sütununda durur.

Önleme kipinde bu sütun **kesilen akış** sayısıdır: eşik 6'da kırk akışın **31**'i kesilir
ve bunların **13**'ü kesilmemeliydi. Tespit kipinde aynı sütun **uyarı** sayısıdır: 31 kayıt
yazılır, 13'ü **yanlış alarm**dır ve bir kişi hepsini okumak zorundadır.

Bu ayrım eşik kararını doğrudan etkiler. Eşiği 9'dan 6'ya çekmek kaçırılan **5** akışı
kurtarır; karşılığında durduran sayısı **13**'ten **31**'e çıkar — **2,4 kat**. Önleme
kipinde bu on sekiz akışlık fazladan kesinti demektir; tespit kipinde on sekiz fazladan
kayıt. Aynı ölçü, iki ayrı fatura.

#### Açık Kalan Yüzeyler ve Daraltmalar

**Birinci yüzey — kaçırılan akış.** Eşik 9'da beş, ikisi birlikte çalışırken iki yasak akış
geçiyor ve hiçbirinin arkasında bir kayıt yok. Kırklık kümede iki akış **0,050**'lik bir
paydır ve ölçüm bandının iki katıdır; yok sayılamaz. **Daraltma:** eşiği düşürmek değil —
o öbür sütunu büyütür — **ölçütü değiştirmek**. Bu akışların hepsi kural dizisinin zaten
kesin ayırt ettiği alanlara sahip; eşiğe dayanan düzenek kural dizisinin **yerine** değil,
**yanına** konur.

**İkinci yüzey — görülmeyen bölge.** Konak tabanlı sistemin görmediği on dokuz akışın
sekizi yasak. Bu sekiz akış için sistem bir karar vermiyor ve verilmeyen karar bir kayıt da
üretmiyor; denetleyen taraf için sessizlik ile temizlik aynı görünür. **Daraltma:** görüş
alanının **kendisini** raporlamak — hangi bölgelerin izlendiğini ve hangilerinin
izlenmediğini akış sayılarıyla yazmak. Kapsamı bilinmeyen bir ölçümün sayısı okunamaz.

**Üçüncü yüzey — uyarı yığını.** Eşiği sıkmak uyarıyı 13'ten 31'e çıkarıyor ve fazladan on
sekiz kaydın on üçü yanlış alarm. Okunamayan uyarı, yazılmamış uyarıyla aynı işi görür;
sıkı bir eşik bu yolla kendi kazancını geri verebilir. **Daraltma:** eşiği tek bir sayı
olarak değil, bölgeye göre ayrı ayrı seçmek — yönetim bölgesine inen akışta sıkı, dışarıyla
konuşan akışta gevşek. Ölçüm bunu doğrudan destekler: iki sistemin farkı da zaten bölgeye
göre değişiyordu.

#### Özet

- Eşiğe dayanan bir düzeneğin ölçütü sürekli olduğu için iki sınıfın değerleri bir bantta
  örtüşür; bu ölçümde bant **7–8**'dir ve iki yönlü hatanın tamamı o bandın içinde doğar.
- Ağ tabanlı sistemde eşik **7** iken fazla geçen **0**, fazla duran **7**; eşik **9** iken
  fazla duran **0**, fazla geçen **5**. İki sütun aynı anda sıfırlanamaz.
- Hataları eşitleyen eşik (8'de 4 ve 4) toplam doğruyu en büyük yapmaz; sınıflar eşit
  büyüklükte değildir ve hangi hatanın daha pahalı olduğu ölçünün değil politikanın kararıdır.
- Konak tabanlı sistemin fazla geçeni hiçbir eşikte **8**'in altına inmez, çünkü kırk akışın
  **19**'unu hiç görmez; **eşikle onarılamayan tek hata görülmeyen olaydan doğar.**
- İkisi birlikte eşik 9'da **38** doğru veriyor; kazanç birleştirmeden değil körlüklerin
  örtüşmemesinden gelir ve kalan **2** kaçırılan akış ikisinin de yanıldığı yerdir.
- Tespit ile önleme aynı sayıları üretir, aynı bedeli ödetmez: `durduran` sütunu önlemede
  kesilen akış, tespitte okunması gereken uyarıdır — eşiği 9'dan 6'ya çekmek onu **2,4 kat**
  büyütür.

#### Sonraki Adım

Bu konudaki dört ders de tek bir varsayımı paylaştı: dışarısı dışarıdadır. Kural dizisi,
bölge grafiği ve eşik, hepsi bir akışın **nereden geldiğine** bakarak karar verdi ve
`dis` adı her üçünde de "güvenilmeyen" ile eş anlamlıydı. Peki dışarıdaki bir uç içeri
alınmak zorundaysa? Evinden çalışan biri, başka bir yerdeki bir bölge, ya da denetimi
elimizde olmayan bir yol üzerinden konuşan iki ağ — bunların hiçbiri `dis`in dışına
çıkmıyor, ama hepsinin `ic` gibi davranması bekleniyor. Sonraki ders bu ucu içeri almanın
düzeneğini kurar ve yine aynı iki sütunu sorar: içeri alınacak hedefler nasıl seçiliyor,
seçilmeyen ne oluyor.

### VPN Teknolojileri

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/vpn-teknolojileri

Tünel bir yönlendirme kurgusudur: tünel seçici hangi hedefleri içeri alacağına karar verir, seçilmeyen akış sınırı hiç görmeden çıkar; kırk akışta dört seçici ve iki tünel kurgusu fazla geçen ile fazla duranı ayrı ayrı ölçer.

Kursun buraya kadarki dört dersi sınırı hep aynı yönde kullandı: dışarıyı içeriden ayırmak
için. Güvenlik duvarı türleri, kural dizisi, bölge grafiği ve tespit düzeneği, hepsi
"içeride olan" ile "dışarıda olan" ayrımını verili saydı ve o ayrımın üzerine karar kurdu.

Peki dışarıdaki bir uç **içeri alınmak zorundaysa**? Uzaktaki bir çalışanın makinesi, başka
bir yerleşkedeki bütün bir bölüt, ya da bir bulut sağlayıcının içindeki bir küme — bunların
hiçbiri fiziksel olarak içeride değildir ve içeride sayılmaları gerekir. **VPN (virtual
private network)** bu işi yapan teknoloji sınıfının adıdır. Bu dersin sorusu tünelin ne
koruduğu değil: tünelin **hangi akışları içeri aldığı** ve içeri alınmayanların ne olduğu.

#### Tünel Bir Yönlendirme Kararıdır

Tünel kurulduktan sonra ne yapılabildiği, yani erişimin kapsamı, Siber Güvenlik
müfredatının Çevre Savunması konusunda ölçüldü ve burada tekrarlanmaz. Burada ölçülen şey
tünelin **kurulmasından önceki** karardır ve o karar bir güvenlik kararı değil, bir
**yönlendirme** kararıdır.

Uzak uçta çalışan yazılım, gönderilecek her akış için tek bir soruya yanıt verir: bu akış
tünelden mi gidecek, yoksa yerel çıkıştan mı? Yanıt evetse akış sarmalanır ve tünelin öbür
ucundaki toplayıcıya taşınır; orada açılır ve **kurumun sınırına oradan** girer. Yanıt
hayırsa akış hiç sarmalanmaz, uzak ucun kendi bağlantısından doğrudan çıkar ve kurumun
sınırını **hiç görmez**.

Bu iki yolun ayrımı dersin tamamını taşır. Tünelden geçen akış kural dizisine tabidir.
Tünelden geçmeyen akış hiçbir kurala tabi değildir — çünkü kuralın yazıldığı yere hiç
uğramaz.

#### Tünel Seçici

Bu kararı veren yapının adı **tünel seçici (tunnel selector)** olur. Seçici bir kural
dizisi değildir; eylem üretmez, yalnız bir küme tanımlar: hangi hedefler tünele girer.

```text
# ogretilen dokum , calistirilmamistir

tünel tanımı A
  kurgu        : uçtan uca
  seçici       : hedef bölgesi { ic }
  atanan bölge : ic
  seçilmeyen   : yerel çıkış

tünel tanımı B
  kurgu        : siteler arası
  seçici       : hedef bölgesi { ic, dmz, yonetim }
  atanan bölge : (yok; kaynak bölgesi korunur)
  seçilmeyen   : yerel çıkış
```

Seçicinin bütün hedefleri kapsadığı kuruluma **tam tünel**, bir bölümünü dışarıda bıraktığı
kuruluma **bölünmüş tünel (split tunnel)** denir. Bölünmüş tünelin gerekçesi taşımadır:
uzak ucun bütün trafiğini toplayıcıdan geçirmek, hiç ilgisi olmayan akışları da oradan
geçirmek demektir. Bu dersin sorduğu şey gerekçenin doğru olup olmadığı değil, bedelinin
hangi yönde ödendiğidir.

#### Seçici Bir Yol Kümesidir

Seçicinin nereye yerleştiğini görmek, dersin geri kalanını okunur kılar. Anahtarlama ve
Yönlendirme kursunda bir paketin yolu, hedefine bakılarak seçilen **bir sonraki düğümle**
belirleniyordu. Tünel seçici tam olarak aynı yerde durur: tünel arayüzü bir sonraki düğüm
adaylarından biridir ve seçici, hangi hedefler için o adayın kazanacağını söyler. Bu yüzden
seçici **kural dizisinden önce** değerlendirilir — kural dizisi paketin sınıra ulaşmasını
bekler, seçici paketin sınıra doğru yola çıkıp çıkmayacağına karar verir.

Bunun iki sonucu vardır. Birincisi, seçicinin çözünürlüğü yönlendirmenin çözünürlüğüdür:
hedefe bakar. "Şu bağlantı noktası tünelden, şu bağlantı noktası yerel çıkıştan" biçiminde
bir ayrım, aynı hedefe giden iki akışı ayırmayı gerektirir ve bir yol kümesi bunu ifade
edemez. İkincisi, seçici uzak uçta durur. Toplayıcı onu tünel kurulurken gönderir, ama
seçilmeyen akışın yolunu belirleyen şey uzak ucun kendi yönlendirme tablosudur. Seçicinin
uzak uçta gevşetilmesi bir yapılandırma kusurudur ve sınır tarafında **hiçbir belirti
vermez**: sınır o akışı zaten hiç görmemektedir.

#### İki Kurgu: Siteler Arası ve Uçtan Uca

İki tünel kurgusu arasındaki fark seçicide değil, **kaynak kimliğindedir**.

**Siteler arası (site-to-site)** tünelde iki uç da gerçek bir bölgedir. Bir yerleşkenin iç
bölütü ile bir başkasınınki birbirine bağlanır; her akış kendi bölgesiyle gelir ve sınır onu
kendi bölgesiyle değerlendirir. Tünel yalnız yolu değiştirir, akışın kim olduğunu
değiştirmez.

**Uçtan uca (remote access)** tünelde uzak ucun bir bölgesi yoktur. Tek bir makinedir,
değişken bir yerden bağlanır ve sınır onu hangi bölgeye koyacağını bilmez. Bu yüzden tünel
ona bir bölge **atar**: tünelden çıkan her akış, toplayıcının verdiği bölgeyle sınıra girer.
Atama bir kolaylık değil, zorunluluktur — kural dizisi `kaynak` ölçütünü okuyor ve okuyacak
bir şey bulması gerekiyor.

Ölçümün varsayımları:

- **AG51** — Kırk akış kursun ortak kurgusundan üretilir; her akışın kaynağı, hedefi ve
  bağlantı noktası kurgudandır. Kâhin `politika` işlevidir ve kurguyu biz yazdığımız için
  bilinir. `politika` bu derste **değiştirilmez**.
- **AG52** — Tünele giren akış toplayıcıda açılır ve sınıra oradan girer; sınır onu
  `politika` ile değerlendirir. Uçtan uca kurguda değerlendirme, kaynağı **atanan bölgeyle
  değiştirilmiş** kayıt üzerinde yapılır. Değiştirilen şey kayıttır, işlev değildir.
- **AG53** — Tünele girmeyen akış uzak ucun yerel çıkışından gider. Hedefi dış bölgeyse
  ulaşır; iç bölgelerden birine gidiyorsa hiç ulaşmaz. Bu akışlar kural dizisine hiç
  uğramaz.
- **AG54** — Dört seçici karşılaştırılır: tam tünel ve üç bölünmüş küme. Seçiciler yalnız
  **hedef bölgesine** bakar; kâhini kullanmazlar.
- **AG55** — Uçtan uca kurguda atanan bölge ikinci bir eksendir ve tek başına ölçülür;
  seçici o ölçümde tam tünelde sabitlenir.
- **AG56** — Küme kırk akıştır; ölçülebilen en küçük fark `1/40 = 0,025`. Bundan küçük bir
  fark bu kümeyle savunulmaz.

#### Ölçüm

```python
"""Tunel bir yonlendirme kurgusudur: secici hangi hedefi iceri aliyor.

Bolum 1 - dort tunel secicisi, iki tunel kurgusunda.
Bolum 2 - ucdan uca tunelin atadigi bolge tek basina ne yapiyor.
"""
TOHUM = 20260811
BOLGELER = ("dis", "dmz", "ic", "yonetim")


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def akislar(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)],
                      "hedef": BOLGELER[r(4)],
                      "bnokta": (80, 443, 22, 3306, 8080)[r(5)]})
    return liste


def politika(a):
    """Niyet: disaridan yalniz DMZ web kalemine; yonetime disaridan kimse."""
    if a["kaynak"] == "dis":
        return a["hedef"] == "dmz" and a["bnokta"] in (80, 443)
    if a["kaynak"] == "dmz":
        return a["hedef"] == "ic" and a["bnokta"] == 3306
    if a["kaynak"] == "yonetim":
        return True
    return a["hedef"] != "yonetim"


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


SECICILER = {"tam tünel": lambda a: True,
             "bölünmüş: iç": lambda a: a["hedef"] == "ic",
             "bölünmüş: iç, dmz": lambda a: a["hedef"] in ("ic", "dmz"),
             "bölünmüş: dış hariç": lambda a: a["hedef"] != "dis"}


def siteler_arasi(secici):
    """Iki uc de gercek bir bolge; tunel yalniz yolu secer."""
    def calis(a):
        if secici(a):
            return politika(a)
        return a["hedef"] == "dis"      # secilmeyen akis dogrudan disari cikar
    return calis


def uctan_uca(secici, atanan="ic"):
    """Uzak ucun kendi bolgesi yok; tunel ona bir bolge atar."""
    def calis(a):
        if secici(a):
            return politika({**a, "kaynak": atanan})
        return a["hedef"] == "dis"
    return calis


ak = akislar()
print(f"akış {len(ak)} | niyetin geçirdiği "
      f"{sum(1 for a in ak if politika(a))} | hedefi dış olan "
      f"{sum(1 for a in ak if a['hedef'] == 'dis')}")
print()
print(f"{'tünel seçici':<20s} {'seçilen':>7s} {'siteler arası':>25s}"
      f"{'uçtan uca':>26s}")
print(f"{'':20s} {'':7s} {'doğru':>8s} {'fazla g':>8s} {'fazla d':>8s}"
      f" {'doğru':>8s} {'fazla g':>8s} {'fazla d':>8s}")
for ad, s in SECICILER.items():
    x, y = fark(ak, politika, siteler_arasi(s)), fark(ak, politika, uctan_uca(s))
    print(f"{ad:<20s} {sum(1 for a in ak if s(a)):7d} "
          f"{x['dogru_gecti'] + x['dogru_durdu']:8d} {x['yanlis_gecti']:8d} "
          f"{x['yanlis_durdu']:8d} {y['dogru_gecti'] + y['dogru_durdu']:8d} "
          f"{y['yanlis_gecti']:8d} {y['yanlis_durdu']:8d}")

print()
print(f"{'atanan bölge':<14s} {'doğru':>6s} {'fazla geçen':>12s} "
      f"{'fazla duran':>12s}   (tam tünel, uçtan uca)")
for atanan in BOLGELER:
    d = fark(ak, politika, uctan_uca(SECICILER["tam tünel"], atanan))
    print(f"{atanan:<14s} {d['dogru_gecti'] + d['dogru_durdu']:6d} "
          f"{d['yanlis_gecti']:12d} {d['yanlis_durdu']:12d}")

print()
print(f"{'seçilmeyenler':<20s} {'sayı':>5s} {'doğrudan çıkan':>15s} "
      f"{'ulaşamayan':>11s}")
for ad, s in SECICILER.items():
    disarida = [a for a in ak if not s(a)]
    print(f"{ad:<20s} {len(disarida):5d} "
          f"{sum(1 for a in disarida if a['hedef'] == 'dis'):15d} "
          f"{sum(1 for a in disarida if a['hedef'] != 'dis'):11d}")
```

```
akış 40 | niyetin geçirdiği 22 | hedefi dış olan 11

tünel seçici         seçilen             siteler arası                 uçtan uca
                                doğru  fazla g  fazla d    doğru  fazla g  fazla d
tam tünel                 40       40        0        0       25       11        4
bölünmüş: iç              10       24        6       10       21        9       10
bölünmüş: iç, dmz         18       30        6        4       25       11        4
bölünmüş: dış hariç       29       34        6        0       25       11        4

atanan bölge    doğru  fazla geçen  fazla duran   (tam tünel, uçtan uca)
dis                22            0           18
dmz                20            0           20
ic                 25           11            4
yonetim            22           18            0

seçilmeyenler         sayı  doğrudan çıkan  ulaşamayan
tam tünel                0               0           0
bölünmüş: iç            30              11          19
bölünmüş: iç, dmz       22              11          11
bölünmüş: dış hariç     11              11           0
```

#### Seçilmeyen Akış Nereye Gidiyor

Üst tablonun ilk satırı bir taban çizgisidir. **Siteler arası tam tünelde** kırk akışın
kırkı tünelden geçiyor, her biri kendi bölgesiyle sınıra giriyor ve sonuç **40 doğru, 0
fazla geçen, 0 fazla duran**. Tünel burada politikaya hiçbir şey eklemedi ve hiçbir şey
eksiltmedi; yalnız uzak bölütü sınırın önüne taşıdı.

Seçici daraldığında iki yön birden konuşmaya başlıyor ve **ikisi aynı kaynaktan gelmiyor**.

**Fazla duran**, tünele alınmayan ve hedefi bir iç bölge olan akışlardan geliyor. Yerel
çıkıştan gitmeye çalışıyorlar, kuruma ulaşamıyorlar ve niyet onların bir bölümünü
geçirecekti. `iç` seçicisinde **10**, `iç, dmz` seçicisinde **4**, `dış hariç`
seçicisinde **0**. Seçiciyi genişletmek bu yönü doğrudan düzeltiyor.

**Fazla geçen** ise seçici ne kadar genişlerse genişlesin **6'da sabit kalıyor**. Kaynağı
alt tablonun son satırında: her üç bölünmüş kurulumda da tünele girmeyen akışların
**11**'inin hedefi dış bölgedir ve bu on biri yerel çıkıştan gerçekten ulaşır. Kâhin
bunların **6**'sını durduracaktı — çünkü politika dış hedefli her akışı geçirmiyor. Seçiciyi
`iç`'ten `dış hariç`'e kadar genişletmek bu altısına dokunmuyor, çünkü üç seçicinin hiçbiri
dış hedefi tünele almıyor.

Örüntü şudur: **bölünmüş tünelde fazla duran seçicinin darlığından, fazla geçen ise
seçicinin dışında bırakılanın kural dizisini hiç görmemesinden doğar.** Birincisi seçici
genişletilerek kapanır, ikincisi kapanmaz — kapanması için seçicinin **dış hedefi de**
içine alması, yani bölünmüş tünelin bırakılıp tam tünele dönülmesi gerekir. `dış hariç`
satırı bunu birebir gösteriyor: fazla duran sıfırlanmış, fazla geçen hâlâ **6**.

Sayıların büyüklüğü de kayda değer. Kırk akışlık bir kümede ölçülebilen en küçük fark
`1/40 = 0,025`'tir. Sabit kalan altı fazla geçen bu kümede `0,150`, `iç` seçicisinin on
fazla duranı `0,250` eder; ikisi de bandın çok üstündedir. Tablodaki sıfırdan büyük her
satır farkı en az **iki akış**, yani `0,050`'dir; hiçbir okuma tek bir akışa dayanmıyor.
Ölçümün taşıdığı iddia yine de sayıların kendisi değil, **iki yönün ayrı kaynaklardan
gelmesidir**: biri seçicinin darlığından, öbürü seçicinin dışında kalanın denetime hiç
uğramamasından.

#### Atanan Bölge Tek Başına Ne Yapıyor

Sağdaki üç sütun aynı seçicileri **uçtan uca** kurguda ölçüyor ve tablo değişiyor: tam
tünelde bile **25 doğru, 11 fazla geçen, 4 fazla duran**. Kırk akışın kırkı tünelden
geçmesine rağmen sonuç bozuldu, çünkü bu kurguda akışlar sınıra kendi bölgeleriyle değil,
**tünelin atadığı bölgeyle** giriyor. Kural dizisi `kaynak` ölçütünü okuyor ve artık hepsinde
aynı değeri okuyor.

Orta tablo bu eksenin tamamını açıyor. Atanan bölge `ic` iken **11 fazla geçen, 4 fazla
duran**. Atama `dis`'e çekilirse fazla geçen **0**'a iner ve fazla duran **18**'e çıkar:
tünelden gelen hiçbir akışa güvenilmemiş olur. Atama `yonetim`'e açılırsa fazla geçen
**18**, fazla duran **0** olur: her akış en geniş bölgeye yerleştirilmiştir. `dmz` ise iki
yönü birden kötüleştiriyor — **0** ve **20** — çünkü politikanın DMZ'ye verdiği yol dar bir
yoldur ve uzak uçların gerçek dağılımına uymaz.

Dört satırın hiçbiri sıfır–sıfır vermiyor. Bunun nedeni yapısaldır: kırk akış **dört ayrı
kaynak bölgesinden** geliyor ve tek bir atama onları tek bir bölgeye topluyor. Bir ayrımı
taşıyan bilgi, tek bir değere eşlendiğinde geri getirilemez. **Uçtan uca tünelin bedeli
taşıdığı bayt değil, sildiği ayrımdır.**

Silinen ayrımı geri getirmenin tek yolu, atamayı **tek bir değer olmaktan çıkarmaktır**:
her yetki kümesi için ayrı bir tünel kurmak ve her tünele kendi bölgesini atamak. Ölçüm bunu
doğrudan söylüyor — dört bölgeden gelen akış dört ayrı atama altında dört ayrı satır üretir
ve satırların hiçbiri öbürünün hatasını taşımaz. Bedeli kural tarafında görünür: tünel sayısı
kadar toplayıcı arayüzü, arayüz sayısı kadar `kaynak` değeri ve kural dizisinde o kadar
ayrı dal. Kural saymanın politikayı ölçmediğini kurs zaten söylemişti; burada tersi de
doğrudur — **kuraldan kaçınmak da politikayı ölçmez, yalnız ayrımı ucuza kapatır.**

#### Özet

- Tünel, kurulmadan önce bir **yönlendirme** kararıdır: tünel seçici hangi hedeflerin içeri
  alınacağını belirler, seçilmeyen akış kural dizisine hiç uğramaz.
- Siteler arası tam tünelde kırk akış **40 doğru, 0 fazla geçen, 0 fazla duran** verir;
  tünel politikaya bir şey eklemez.
- Bölünmüş tünelde fazla duran seçicinin darlığından gelir ve genişletmeyle **10 → 4 → 0**
  iner; fazla geçen üç bölünmüş kurulumda da **6**'da sabit kalır çünkü kaynağı seçicinin
  dışında bırakılan **11** dış hedefli akıştır.
- Uçtan uca kurguda tünel akışa bir bölge atamak zorundadır; tam tünelde bile sonuç
  **25 doğru, 11 fazla geçen, 4 fazla duran**'a düşer.
- Atanan bölge tek başına iki yönü zıt yönlerde çeker: `dis` ile **0 / 18**, `yonetim` ile
  **18 / 0**. Dört bölgeden gelen akışı tek bir bölgeye toplamak, ayrımı geri getirilemez
  biçimde siler.

#### Sonraki Adım

Uçtan uca tünelin bütün numarası, dışarıdaki bir ucu kural dizisine **içeriden gelmiş gibi**
göstermektir. Bu numaranın zorunlu olmasının nedeni tek bir satırdadır: kural dizisi hâlâ
`kaynak` ölçütünü okuyor ve okuyacak bir bölge bekliyor. Sonraki ders bu beklentiyi
kaldırdığında ne olduğunu ölçer — `kaynak` ölçütü kural dizisinden çıkarıldığında kural
sayısı ve iki yönlü hata nasıl değişir ve konum ölçütünün yerine ne konmak zorunda kalır.

### Sıfır Güven Ağ Modeli

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/sifir-guven-ag-modeli

Konum ölçütü kural dizisinden silindiğinde bir kural örtük evete dönüşür, üç kural gölgelenir ve fazla geçen sıfırdan on sekize çıkar; yerine kimlik ölçütü konduğunda kural sayısı yediden ona, belge koşulu eklendiğinde fazla duran birden dörde çıkar.

Uçtan uca tünelin bütün numarası, dışarıdaki bir ucu kural dizisine içeriden gelmiş gibi
göstermekti. O numaranın zorunlu olmasının nedeni tek bir satırdaydı: kural dizisi `kaynak`
ölçütünü okuyor ve okuyacak bir bölge bekliyor. Tünel bir bölge uyduruyor, çünkü dizinin
sorduğu soru "nereden geliyorsun" idi.

**Sıfır güven (zero trust)** bu soruyu bırakmayı önerir. İlkenin kendisi Siber Güvenlik
müfredatında kuruldu ve burada tekrarlanmaz. Bu dersin sorusu ilke değil, **cerrahidir**:
`kaynak` ölçütü kural dizisinden çıkarıldığında dizide ne kalır, kaç kural gölgelenir, iki
yönlü hata nasıl değişir ve boşalan yere ne konmak zorundadır.

#### Konum Ölçütü Neyi Temsil Ediyordu

Kursun dar kural kümesi yedi kuraldan oluşur ve yedisi de `kaynak` ölçütünü taşır. Ölçüt
akışın hangi bölgeden geldiğini söyler ve bölge, kural yazan kişi için bir kısaltmadır:
"iç bölütteki bir makine" ile "kurumun çalışanı" aynı şey sayılmıştır.

Bu kısaltmanın bir bedeli yoktur — kısaltma doğru olduğu sürece. Kablonun ucundaki makine
gerçekten çalışanın makinesiyse, konum kimliğin yerine geçer ve dizi doğru karar verir. Bir
önceki dersin uçtan uca tüneli tam olarak bu kısaltmayı ayakta tutmak için vardı: uzak ucun
bir bölgesi yoktu, tünel ona bir bölge atadı ve kısaltma yeniden çalışır oldu.

Sıfır güvenin iddiası kısaltmanın artık taşımadığıdır. Bu dersin ölçtüğü şey iddianın doğru
olup olmadığı değil — kısaltmayı **kaldırmanın** kural dizisine ne yaptığıdır.

#### Ölçütü Silmek

Silme işlemi mekaniktir: her kuralın ölçüt sözlüğünden `kaynak` anahtarı çıkarılır. Kural
sayısı değişmez, eylemler değişmez, sıra değişmez.

```text
# ogretilen dokum , calistirilmamistir

konum ölçütlü dizi                       konum ölçütü silinmiş dizi
1  izin  kaynak=dis  hedef=dmz  bn=80    1  izin  hedef=dmz  bn=80
2  izin  kaynak=dis  hedef=dmz  bn=443   2  izin  hedef=dmz  bn=443
3  izin  kaynak=dmz  hedef=ic   bn=3306  3  izin  hedef=ic   bn=3306
4  izin  kaynak=yonetim                  4  izin  (ölçüt kalmadı)
5  izin  kaynak=ic    hedef=dmz          5  izin  hedef=dmz
6  izin  kaynak=ic    hedef=dis          6  izin  hedef=dis
7  izin  kaynak=ic    hedef=ic           7  izin  hedef=ic
(sonda örtük ret)                        (sonda örtük ret)
```

Dördüncü kural sorunun tamamını taşır. Konum ölçütlü hâlinde tek ölçütü vardı ve o ölçüt
`kaynak` idi; silindiğinde geriye **hiçbir ölçüt kalmaz**. Ölçütsüz bir kural her akışla
eşleşir: "ilk eşleşen kazanır" kuralı gereği dördüncü satır artık bir **örtük evettir** ve
kendisinden sonraki üç kuralı gölgeler. Örtük ret ise hiç sıra bulamaz.

#### Yerine Ne Konur

Konum ölçütü, akışın **kim adına** açıldığını dolaylı olarak söylüyordu. Kaldırıldığında
yerine doğrudan söyleyen bir ölçüt konmalıdır. Bu ölçüt akışın kendisiyle gelir ve kabloya
bağlı değildir; dersin kurgusunda adı `kimlik`, aldığı değerler `konuk`, `calisan`, `hizmet`
ve `yonetici` sınıflarıdır.

İkinci bir alan zorunludur: `belge`. Kimlik bir bildirimdir ve bildirimi doğrulayan bir
şeyin bulunması gerekir. Belgesi bulunmayan bir akışın kimliği bilinmiyor sayılır ve dizi
onu örtük rete düşürür. Bu, sıfır güvenin "doğrula, varsayma" cümlesinin kural dizisindeki
karşılığıdır — ve bedeli ölçülecektir.

Kimlik ölçütlü dizi, konum ölçütlü diziden **daha uzundur**. Nedeni dördüncü kuraldır:
`kaynak=yonetim` tek satırda bütün hedefleri açıyordu, çünkü bölge zaten bir güven
bildirimiydi. Kimlik tarafında böyle bir bildirim yoktur; `yonetici` kimliğinin gideceği
her hedef ayrı yazılır ve bir kural dörde çıkar.

Ölçümün varsayımları:

- **AG57** — Kırk akış kursun ortak kurgusundan üretilir. Kâhin `politika` işlevidir ve
  bu derste **değiştirilmez**; niyet kursun sabitidir.
- **AG58** — `politika` konum diliyle yazılmıştır. Kimlik ölçütlü bir diziyi bu kâhine göre
  ölçmek, iki dilin **ayrıldığı akışları** saymaktır; ölçüm kimliğin doğruluğunu değil,
  değişimin büyüklüğünü verir.
- **AG59** — Her akışa bir kimlik sınıfı eklenir. Akışların çoğunda kimlik bölgeyle
  eşleşir; kurgu bir azınlığı bilerek ayırır, çünkü kimlik kabloya bağlı değildir.
- **AG60** — Her akışa bir `belge` durumu eklenir. Kurgu bir azınlığı belgesiz bırakır;
  belge alanı akışın kimlik bildiriminin doğrulanabildiğini söyler, bildirimin içeriğini
  değil.
- **AG61** — Dört dizi karşılaştırılır: konum ölçütlü, konum ölçütü silinmiş, kimlik
  ölçütlü, kimlik ve belge koşullu. Değerlendirme düzeneği dördünde de aynıdır: ilk
  eşleşen kazanır, sonda örtük ret durur.
- **AG62** — Gölgelenen kural sayısı, kendinden önceki bir kuralın ölçütünü tümüyle
  kapsadığı kural sayısıdır; ölçüt kümesi boşalan bir kural, sonrasındaki her kuralı
  gölgeler.
- **AG63** — Küme kırk akıştır; ölçülebilen en küçük fark `1/40 = 0,025`.

#### Ölçüm

```python
"""Konum olcutunu kural dizisinden cikarmanin etkisi.

Bolum 1 - kaynak olcutlu dizi, olcut silinmis dizi, kimlik olcutlu dizi.
Bolum 2 - silinen olcutun kural dizisinde biraktigi bosluk.
"""
TOHUM = 20260811
BOLGELER = ("dis", "dmz", "ic", "yonetim")
KIMLIKLER = ("konuk", "calisan", "hizmet", "yonetici")
ESLEME = {"dis": "konuk", "dmz": "hizmet", "ic": "calisan", "yonetim": "yonetici"}


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def akislar(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)],
                      "hedef": BOLGELER[r(4)],
                      "bnokta": (80, 443, 22, 3306, 8080)[r(5)]})
    return liste


def kimlikle(liste, tohum=TOHUM + 6):
    """Her akisa bir kimlik sinifi ve bir belge durumu ekler."""
    r, cikti = uretec(tohum), []
    for a in liste:
        ayrik, aday = r(9) == 0, KIMLIKLER[r(4)]
        cikti.append({**a, "kimlik": aday if ayrik else ESLEME[a["kaynak"]],
                      "belge": r(8) != 0})
    return cikti


def politika(a):
    """Niyet: disaridan yalniz DMZ web kalemine; yonetime disaridan kimse."""
    if a["kaynak"] == "dis":
        return a["hedef"] == "dmz" and a["bnokta"] in (80, 443)
    if a["kaynak"] == "dmz":
        return a["hedef"] == "ic" and a["bnokta"] == 3306
    if a["kaynak"] == "yonetim":
        return True
    return a["hedef"] != "yonetim"


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def kural_dizisi(kurallar):
    """Ilk eslesen kazanir; sonda ortuk ret."""
    def calis(a):
        for eylem, olcut in kurallar:
            if all(a[k] == v for k, v in olcut.items()):
                return eylem
        return False
    return calis


def golgelenen(kurallar):
    sayi = 0
    for i, (_, olcut) in enumerate(kurallar):
        for _, onceki in kurallar[:i]:
            if all(olcut.get(k) == v for k, v in onceki.items()):
                sayi += 1
                break
    return sayi


DAR = [(True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 80}),
       (True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 443}),
       (True, {"kaynak": "dmz", "hedef": "ic", "bnokta": 3306}),
       (True, {"kaynak": "yonetim"}),
       (True, {"kaynak": "ic", "hedef": "dmz"}),
       (True, {"kaynak": "ic", "hedef": "dis"}),
       (True, {"kaynak": "ic", "hedef": "ic"})]

SILINMIS = [(e, {k: v for k, v in o.items() if k != "kaynak"}) for e, o in DAR]

KIMLIK = [(True, {"kimlik": "konuk", "hedef": "dmz", "bnokta": 80}),
          (True, {"kimlik": "konuk", "hedef": "dmz", "bnokta": 443}),
          (True, {"kimlik": "hizmet", "hedef": "ic", "bnokta": 3306}),
          (True, {"kimlik": "yonetici", "hedef": "dis"}),
          (True, {"kimlik": "yonetici", "hedef": "dmz"}),
          (True, {"kimlik": "yonetici", "hedef": "ic"}),
          (True, {"kimlik": "yonetici", "hedef": "yonetim"}),
          (True, {"kimlik": "calisan", "hedef": "dmz"}),
          (True, {"kimlik": "calisan", "hedef": "dis"}),
          (True, {"kimlik": "calisan", "hedef": "ic"})]


def belge_kosullu(kurallar):
    """Belgesiz akis ortuk rete duser."""
    ic = kural_dizisi(kurallar)
    return lambda a: a["belge"] and ic(a)


ak = kimlikle(akislar())
print(f"akış {len(ak)} | niyetin geçirdiği {sum(1 for a in ak if politika(a))} "
      f"| kimliği konumdan ayrık "
      f"{sum(1 for a in ak if a['kimlik'] != ESLEME[a['kaynak']])} | belgesiz "
      f"{sum(1 for a in ak if not a['belge'])}")
print()
print(f"{'kural dizisi':<24s} {'kural':>5s} {'gölgelenen':>10s} {'doğru':>6s} "
      f"{'fazla geçen':>12s} {'fazla duran':>12s}")
for ad, kurallar, duzenek in (
        ("konum ölçütlü", DAR, kural_dizisi(DAR)),
        ("konum ölçütü silinmiş", SILINMIS, kural_dizisi(SILINMIS)),
        ("kimlik ölçütlü", KIMLIK, kural_dizisi(KIMLIK)),
        ("kimlik ve belge koşullu", KIMLIK, belge_kosullu(KIMLIK))):
    d = fark(ak, politika, duzenek)
    print(f"{ad:<24s} {len(kurallar):5d} {golgelenen(kurallar):10d} "
          f"{d['dogru_gecti'] + d['dogru_durdu']:6d} {d['yanlis_gecti']:12d} "
          f"{d['yanlis_durdu']:12d}")

print()
print("konum ölçütü silinmiş dizinin ölçütleri:")
for i, (_, o) in enumerate(SILINMIS):
    print(f"  {i + 1}. {o if o else '(ölçüt kalmadı)'}")

print()
print("kimliği konumdan ayrık akışlar (no, konum, kimlik, hedef, niyet, kimlik dizisi):")
for a in ak:
    if a["kimlik"] != ESLEME[a["kaynak"]]:
        print(f"  {a['no']:2d} {a['kaynak']:8s} {a['kimlik']:9s} {a['hedef']:8s} "
              f"{str(politika(a)):5s} {str(kural_dizisi(KIMLIK)(a)):5s}")
print("belgesiz akışlarda niyetin geçirdiği:",
      sum(1 for a in ak if not a["belge"] and politika(a)))
```

```
akış 40 | niyetin geçirdiği 22 | kimliği konumdan ayrık 2 | belgesiz 5

kural dizisi             kural gölgelenen  doğru  fazla geçen  fazla duran
konum ölçütlü                7          0     40            0            0
konum ölçütü silinmiş        7          3     22           18            0
kimlik ölçütlü              10          0     38            1            1
kimlik ve belge koşullu     10          0     35            1            4

konum ölçütü silinmiş dizinin ölçütleri:
  1. {'hedef': 'dmz', 'bnokta': 80}
  2. {'hedef': 'dmz', 'bnokta': 443}
  3. {'hedef': 'ic', 'bnokta': 3306}
  4. (ölçüt kalmadı)
  5. {'hedef': 'dmz'}
  6. {'hedef': 'dis'}
  7. {'hedef': 'ic'}

kimliği konumdan ayrık akışlar (no, konum, kimlik, hedef, niyet, kimlik dizisi):
  34 dis      yonetici  dis      False True 
  40 ic       hizmet    dis      True  False
belgesiz akışlarda niyetin geçirdiği: 3
```

#### Silmenin Bedeli

İkinci satır dersin en sert sayısını taşıyor. Kural sayısı **7**'de kaldı, tek bir kural
eklenmedi, tek bir kural çıkarılmadı — ve dizi **40 doğrudan 22'ye** düştü. Fazla geçen
**0**'dan **18**'e çıktı; kırk akışın on sekizi, niyetin durduracağı hâlde geçti. Bu, kırk
akışlık kümede `0,450`'lik bir paydır ve ölçüm bandının on sekiz katıdır.

Fazla duran ise **0**'da kaldı ve bu bir iyi haber değil, aynı kusurun öbür yüzüdür.
Dördüncü kural her akışla eşleştiği için hiçbir akış örtük rete ulaşamıyor; dizi artık
"durdur" diyebileceği bir yol taşımıyor. **Tek yönü sayan bir denetim bu diziyi kusursuz
görürdü** — fazla duran sıfır, hiçbir kullanıcı şikâyeti yok.

Gölgelenen kural sayısı **3**'tür ve nedenini alt döküm veriyor: dördüncü satırın ölçüt
kümesi boştur, boş küme her ölçüt kümesini kapsar, dolayısıyla beşinci, altıncı ve yedinci
kurallar hiç değerlendirilmez. Kural gölgelemesi burada bir yazım hatasından değil, **bir
alanın kaldırılmasından** doğuyor.

Örüntü şudur: **konum ölçütü tek başına bir kuralın taşıyıcısı olabilir.** Öyle bir kuraldan
silindiğinde geriye kural kalmaz, evet kalır. Kural sayısı bunu göstermez — dizi hâlâ yedi
satırdır. Kural saymanın politikayı ölçmediğini kurs erişim denetim listelerinde söylemişti;
burada aynı cümlenin daha keskin bir hâli görünüyor: **ölçüt saymak da politikayı ölçmez.**

#### Kimlik Ölçütünün İki Yönü

Üçüncü satır kimlik ölçütlü diziyi veriyor: **10 kural, 0 gölgelenen, 38 doğru, 1 fazla
geçen, 1 fazla duran.** Kural sayısı yediden ona çıktı ve bu artışın tamamı dördüncü
kuraldan geliyor — bölgenin taşıdığı örtük güven bildirimi, kimlik tarafında dört ayrı
satır olarak yazılmak zorunda kaldı. **Konum ölçütünü kaldırmanın kural maliyeti budur.**

İki hata kırk akışın hangilerinde doğduğu bilinerek okunabilir; alt döküm ikisini de
gösteriyor. Otuz dördüncü akış dış bölgeden geliyor ama `yonetici` kimliği taşıyor: niyet
onu durduracaktı, kimlik dizisi geçirdi — **fazla geçen**. Kırkıncı akış iç bölütten geliyor
ama `hizmet` kimliği taşıyor: niyet onu geçirecekti, kimlik dizisi durdurdu — **fazla
duran**.

Bu iki sayı bir kusur değil, **iki dilin ayrıldığı yerin ölçüsüdür**. Kâhin konum diliyle
yazılmıştır; kimlik ölçütlü dizi başka bir dille yazılmıştır ve iki dil kırk akışın
otuz sekizinde aynı şeyi söylüyor, ikisinde ayrılıyor. Ayrıldıkları akışlar, konum
kısaltmasının zaten yanlış olduğu akışlardır. Ölçüm bu yüzden "kimlik yanlış karar verdi"
demez; **niyetin kendisinin yeniden yazılması gereken akış sayısını verir** ve bu sayı
`2/40 = 0,050`'dir.

Buradan çıkan kural nettir: **ölçütü değiştirmek kuralı değil, politikayı değiştirmektir.**
Konum diliyle yazılmış bir niyeti kimlik diliyle yazılmış bir diziyle uygulamaya çalışmak,
iki dilin ayrıldığı her akışta bir hata üretir. Sıfır güvene geçiş bir kural dizisi
düzenlemesi değil, niyetin yeniden yazılmasıdır.

#### Belge Koşulunun Bedeli

Dördüncü satır tek bir koşul ekliyor: belgesiz akış örtük rete düşer. Fazla geçen **1**'de
kalıyor — belge koşulu bu yönü hiç değiştirmiyor, çünkü otuz dördüncü akışın belgesi
vardır ve kimliği geçerlidir. Fazla duran ise **1**'den **4**'e çıkıyor.

Üç akışlık artışın kaynağı alt satırda: kırk akışın **5**'i belgesizdir ve bunların
**3**'ünü niyet geçirecekti. Doğru sayısı **38**'den **35**'e iniyor. Bu, `3/40 = 0,075`'lik
bir paydır ve bandın üç katıdır; ölçülebilir bir maliyettir.

İki yön burada birbirine karışmıyor ve karışmaması dersin sonucudur. **Belge koşulu yalnız
fazla duranı büyütür.** Doğrulamayı zorunlu kılmak, doğrulanamayanı geçirmemek demektir ve
doğrulanamayanların bir bölümü her zaman meşrudur. Belge kapsamasını genişletmek bu üç
akışı geri kazandırır; kapsamayı gevşetmek, yani belgesiz akışı konuma bakarak geçirmek ise
silinen ölçütü arka kapıdan geri getirir ve ikinci satırın hatasını kısmen geri çağırır.

#### Özet

- Konum ölçütü kural dizisinde kimliğin kısaltmasıydı; kısaltma doğru olduğu sürece bedeli
  yoktur ve dar küme kırk akışta **40 doğru, 0 fazla geçen, 0 fazla duran** verir.
- Ölçüt mekanik olarak silindiğinde kural sayısı **7**'de kalır ama tek ölçütü `kaynak` olan
  kural bir **örtük evete** dönüşür: **3** kural gölgelenir, doğru **22**'ye iner, fazla
  geçen **18** olur ve fazla duran **0**'da kalır — tek yönü sayan bir denetim bu diziyi
  kusursuz görürdü.
- Yerine kimlik ölçütü konduğunda kural sayısı **7**'den **10**'a çıkar; artışın tamamı,
  bölgenin taşıdığı örtük güven bildiriminin dört ayrı satır olarak yazılmasından gelir.
- Kimlik ölçütlü dizi **38 doğru, 1 fazla geçen, 1 fazla duran** verir; iki hata kimlikle
  konumun ayrıldığı iki akıştır ve **niyetin yeniden yazılması gereken akış sayısını**
  ölçer, kimliğin yanlışlığını değil.
- Belge koşulu yalnız bir yönü büyütür: fazla duran **1**'den **4**'e çıkar, çünkü belgesiz
  **5** akışın **3**'ünü niyet geçirecekti. Doğrulamayı zorunlu kılmanın bedeli budur.

#### Sonraki Adım

Kurs boyunca altı denetim kuruldu: kablosuz tarafta kuşak ve kapsama, güvenlik tarafında
bölütleme, kural dizisi, tespit, tünel ve konumdan kimliğe geçen ölçüt. Her biri kendi
sınırını iki yönde birden ölçtü. Geriye tek bir soru kaldı ve kursun son dersi onu sorar:
bu altı denetim birlikte açıldığında, ağ saldırılarının hangi sınıfı gerçekten kapanır,
kapanmayan kaç sınıf kalır ve kapanmayanlar için elde ne var?

### Yaygın Ağ Saldırıları

Source: https://academia.sh/tr/kurslar/kablosuz-ve-guvenlik/yaygin-ag-saldirilari

Kursta kurulan altı denetim birlikte açıldığında dört saldırı sınıfının kaç akışta kapandığı sayılır; dar seçicide hiçbiri kırk akışta birden kapanmaz, tam tünelde yalnız biri kapanır ve hizmet engelleme yirmi iki akışta açık kalır.

Kurs boyunca altı denetim kuruldu ve her biri kendi sınırını iki yönde birden ölçtü:
kablosuz tarafta kuşak ve kapsama, güvenlik tarafında bölütleme, kural dizisi, tespit,
tünel ve konumdan kimliğe geçen ölçüt. Geriye tek bir soru kalıyor: bu altı denetim
**birlikte** açıldığında ağ saldırılarının hangi sınıfı gerçekten kapanır, kapanmayan kaç
sınıf kalır ve kapanmayanlar için elde ne var? Ölçülen şey saldırı değil, **savunmanın
kapsamıdır**.

#### Bu Ders Ne Yapmaz

Dinleme, sahtecilik, araya girme ve hizmet engelleme sınıflarının **nasıl yapıldığı** bu
kursun konusu değildir. Dördü de Siber Güvenlik müfredatının Ağ Saldırıları konusunda,
sekiz ders boyunca yordamıyla anlatıldı; yordam, araç, yük ve atlatma orada durur. Burada
dört ad yalnız **sınıf adı** olarak geçer ve karşılıkları bir yordam değil, birer
**koşuldur** — sınıfın hangi akış için erişilebilir kaldığını söyleyen, yalnız savunma
tarafından okunan cümleler.

| Sınıf | Savunma tarafından okunuşu |
|---|---|
| Dinleme | Akışın içeriği yol üstünde okunabilir durumda mı |
| Sahtecilik | Akışın kaynak bildirimi doğrulanabiliyor mu |
| Araya girme | İçerik okunabilir **ve** kaynak doğrulanamaz durumda mı |
| Hizmet engelleme | Hizmet, akışın ulaşabildiği bir yerde duruyor mu |

Bir sınıf, koşulu sağlanmıyorsa o akış için **kapalıdır**; sağlanıyorsa **açıktır**.

#### Denetimin Açık Olması ile Sınıfın Kapanması

Ölçümün taşıdığı asıl ayrım şudur: bir denetimin **kurulmuş olması** ile bir sınıfın **o
akış için kapanmış olması** aynı şey değildir. Tünel kuruludur, ama seçicisinin dışında
kalan akışa değmez. Kimlik ölçütü kuruludur, ama belgesi bulunmayan akış için karar
üretmez. Kuşak yürürlüktedir, ama kablosuz ayağı olmayan akışı ilgilendirmez. Bu yüzden
ölçüm akış düzeyinde yapılır: kırk akış ve dört sınıf, **160 akış-sınıf çifti**.

Ölçümün varsayımları:

- **AG64** — Kırk akış kursun ortak kurgusundan üretilir; kâhin `politika` işlevidir ve bu
  derste **değiştirilmez**. Her akışa iki alan eklenir: `kablosuz`, ilk ayağın kablosuz
  bölütte olduğunu; `belge`, kaynak bildiriminin doğrulanabildiğini söyler. İkisi de
  kurgudandır ve önceki dersin çekilişleriyle aynı akış kümesini korur.
- **AG65** — Dinleme, akış tünel seçicisinin içindeyse **ve** kablosuz ayağı varsa kuşak
  yürürlükteyse kapanır; iki ayaktan biri örtülmemişse kapanmaz.
- **AG66** — Sahtecilik, sıfır güven ölçütü açıksa **ve** akışın belgesi varsa kapanır.
  Araya girme, ikisinin birden kapanmasını gerektirir.
- **AG67** — Hizmet engelleme yalnız hizmet erişilemez olduğunda kapanır: bölütleme ile
  kural dizisi birlikte açıksa ve niyet o akışı zaten durduruyorsa. Erişilebilir kalan
  akışta bu sınıf **tanımı gereği** açıktır.
- **AG68** — Tespit sistemi hiçbir sınıfı kapatmaz; bu kurulumun eksiği değil, düzeneğin
  tanımıdır ve ölçüme sıfır katkı vermesi beklenen sonuçtur.
- **AG69** — İki tünel seçicisi karşılaştırılır: dar seçici ve tam tünel. Kapsama raporu
  ölçümünde kâhin, akış düzeyinde hesaplanan kapanmadır.
- **AG70** — Küme 160 çifttir; ölçülebilen en küçük fark `1/160`. Akış düzeyinde okunan
  satırlarda çözünürlük `1/40 = 0,025`.

#### Ölçüm

```python
"""Savunmanin kapsami: hangi denetim hangi sinifi kapatir, kapanmayan ne kalir.

Bolum 1 - akis duzeyinde kapanma, iki tunel secicisinde.
Bolum 2 - denetim kapatildiginda kaybedilen akis-sinif cifti.
Bolum 3 - kapsama raporunun iki yonlu hatasi.
"""
TOHUM = 20260811
BOLGELER = ("dis", "dmz", "ic", "yonetim")
SINIFLAR = ("dinleme", "sahtecilik", "araya girme", "hizmet engelleme")
DENETIMLER = ("bölütleme", "kural dizisi", "tünel", "tespit", "sıfır güven",
              "kablosuz kuşak")


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def akislar(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)],
                      "hedef": BOLGELER[r(4)],
                      "bnokta": (80, 443, 22, 3306, 8080)[r(5)]})
    return liste


def yuzeyler(liste, tohum=TOHUM + 6, ortam=TOHUM + 11):
    """Akisin kablosuz ayagi var mi, kaynak bildirimi belgeli mi."""
    r, o, cikti = uretec(tohum), uretec(ortam), []
    for a in liste:
        r(9), r(4)      # kimlik cekilisleri; ayni akis kumesi korunur
        cikti.append({**a, "belge": r(8) != 0, "kablosuz": o(3) == 0})
    return cikti


def politika(a):
    if a["kaynak"] == "dis":
        return a["hedef"] == "dmz" and a["bnokta"] in (80, 443)
    if a["kaynak"] == "dmz":
        return a["hedef"] == "ic" and a["bnokta"] == 3306
    if a["kaynak"] == "yonetim":
        return True
    return a["hedef"] != "yonetim"


def fark(olaylar, niyet, duzenek):
    d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0}
    for o in olaylar:
        n, g = niyet(o), duzenek(o)
        if n and g:
            d["dogru_gecti"] += 1
        elif not n and not g:
            d["dogru_durdu"] += 1
        elif g:
            d["yanlis_gecti"] += 1
        else:
            d["yanlis_durdu"] += 1
    return d


def kapanma(a, acik, secici):
    """Akis basina hangi sinif kapali. Yalnizca savunma tarafi okunur."""
    dinleme = ("tünel" in acik and secici(a)
               and (not a["kablosuz"] or "kablosuz kuşak" in acik))
    sahtecilik = "sıfır güven" in acik and a["belge"]
    erisilmez = ("bölütleme" in acik and "kural dizisi" in acik
                 and not politika(a))
    return {"dinleme": dinleme, "sahtecilik": sahtecilik,
            "araya girme": dinleme and sahtecilik,
            "hizmet engelleme": erisilmez}


SECICILER = {"dar seçici": lambda a: a["hedef"] in ("ic", "dmz"),
             "tam tünel": lambda a: True}
DAR = SECICILER["dar seçici"]
HEPSI = set(DENETIMLER)

ak = yuzeyler(akislar())
ciftler = [(a, s) for a in ak for s in SINIFLAR]
print(f"akış {len(ak)} | sınıf {len(SINIFLAR)} | akış-sınıf çifti {len(ciftler)}"
      f" | kablosuz ayaklı {sum(a['kablosuz'] for a in ak)} | belgeli "
      f"{sum(a['belge'] for a in ak)} | bölge sınırı aşan "
      f"{sum(a['kaynak'] != a['hedef'] for a in ak)}")
print()
print(f"{'sınıf':<18s} {'dar seçici':>18s} {'tam tünel':>18s}")
print(f"{'':18s} {'kapalı':>9s} {'açık':>8s} {'kapalı':>9s} {'açık':>8s}")
for s in SINIFLAR:
    h = []
    for sec in SECICILER.values():
        k = sum(kapanma(a, HEPSI, sec)[s] for a in ak)
        h += [k, len(ak) - k]
    print(f"{s:<18s} {h[0]:9d} {h[1]:8d} {h[2]:9d} {h[3]:8d}")

print()
tam = sum(kapanma(a, HEPSI, DAR)[s] for a, s in ciftler)
print(f"{'kapatılan denetim':<18s} {'kapalı çift':>11s} {'kaybedilen':>10s}")
print(f"{'(hiçbiri)':<18s} {tam:11d} {0:10d}")
for d in DENETIMLER:
    n = sum(kapanma(a, HEPSI - {d}, DAR)[s] for a, s in ciftler)
    print(f"{d:<18s} {n:11d} {tam - n:10d}")

print()
RAPORLAR = {"denetim listesi": lambda a, s: s != "hizmet engelleme",
            "yalnız sınır": lambda a, s: kapanma(a, HEPSI - {"kablosuz kuşak",
                                                             "sıfır güven"},
                                                 DAR)[s]}
print(f"{'kapsama raporu':<18s} {'doğru':>6s} {'fazla geçen':>12s} "
      f"{'fazla duran':>12s}")
for ad, rapor in RAPORLAR.items():
    d = fark(ciftler, lambda c: kapanma(c[0], HEPSI, DAR)[c[1]],
             lambda c: rapor(c[0], c[1]))
    print(f"{ad:<18s} {d['dogru_gecti'] + d['dogru_durdu']:6d} "
          f"{d['yanlis_gecti']:12d} {d['yanlis_durdu']:12d}")
```

```
akış 40 | sınıf 4 | akış-sınıf çifti 160 | kablosuz ayaklı 9 | belgeli 35 | bölge sınırı aşan 27

sınıf                      dar seçici          tam tünel
                      kapalı     açık    kapalı     açık
dinleme                   18       22        40        0
sahtecilik                35        5        35        5
araya girme               16       24        35        5
hizmet engelleme          18       22        18       22

kapatılan denetim  kapalı çift kaybedilen
(hiçbiri)                   87          0
bölütleme                   69         18
kural dizisi                69         18
tünel                       53         34
tespit                      87          0
sıfır güven                 36         51
kablosuz kuşak              79          8

kapsama raporu      doğru  fazla geçen  fazla duran
denetim listesi        91           51           18
yalnız sınır          105            0           55
```

#### Kapanan ve Kapanmayan

Üst tablo dört sınıfı iki tünel yapılandırmasında yan yana koyuyor ve **dar seçicide
hiçbir sınıf kırk akışın kırkında birden kapanmıyor.** En iyi satır sahteciliktir: **35
kapalı, 5 açık**. Dinleme **18/22**, araya girme **16/24**, hizmet engelleme **18/22**.

Tünel seçicisi bütün hedefleri kapsadığında dinleme **40 kapalı, 0 açık** oluyor — **bir
sınıf tamamen kapanıyor.** Bedeli tünel dersinde ölçüldü: bir sınıfın tamamen kapanması
denetimin **istisnasız** uygulanmasını gerektirir ve istisnasızlığın fiyatı kural tarafında
ödenir. Araya girme bir kesişim olduğu için hep daha dardır (**16** ve **35**); iki
denetimin **aynı akış kümesini** kapsaması gerekir.

Hizmet engelleme iki sütunda da **18/22** kalıyor ve bu sabitlik yapısaldır: bu sınıf yalnız
hizmet erişilemez olduğunda kapanır, kırk akışın **22**'sini ise niyetin kendisi geçiriyor.
**Erişilebilirlik bu sınıfın kapatılamamasının nedenidir**, bir yapılandırma eksiği değil.

Orta tablo hangi denetimin ne taşıdığını veriyor. Altı denetim açıkken **87** akış-sınıf
çifti kapalıdır. Sıfır güven kapatıldığında **51** çift açılır, tünel kapatıldığında **34**,
bölütleme ya da kural dizisi kapatıldığında **18**, kablosuz kuşak kapatıldığında **8**.
Tespit kapatıldığında **0** çift açılır: tespit hiçbir sınıfı kapatmaz, iki yönlü hatasıyla
birlikte görünürlük verir ve göreceği küme bölge sınırı aşan **27** akıştır.

#### Kapsama Raporunun İki Yönü

Alt tablo dersin asıl uyarısını taşıyor. **Denetim listesine bakan** bir kapsama raporu —
"tünel kurulu, sıfır güven kurulu, kuşak yürürlükte, öyleyse üç sınıf kapalı" diyen rapor —
**91 doğru, 51 fazla geçen, 18 fazla duran** veriyor. Elli bir çiftte kapalı olmayana kapalı
diyor; on sekiz çiftte de kapalı olanı göremiyor, çünkü hizmet engellemenin kural dizisiyle
daraldığını hesaba katmıyor.

**Yalnız sınırdaki denetimleri** sayan rapor — kuşağı ve sıfır güveni başka bir ekibin işi
sayıp dışarıda bırakan rapor — **105 doğru, 0 fazla geçen, 55 fazla duran** veriyor. Hiç
fazla geçeni yok; bütün hatası eksik saymaktan geliyor.

İki rapor da yanlıştır ve **yanlışlıkları zıt yönlerdedir**: biri kapsamayı olduğundan
geniş, öbürü olduğundan dar gösterir. **Tek yönü sayan bir kapsama raporu, öbür yönü
gizler.**

#### Açık Kalan Sınıflar ve Daraltmalar

Dar seçici yapılandırmasında dört sınıfın dördü de açık akış bırakıyor. Her birinin yanına
elde ne olduğu yazılmalıdır.

**Dinleme — 22 akış açık.** Açık kalanlar tünel seçicisinin dışındaki akışlardır.
**Daraltma:** seçiciyi genişletmek; tam tünelde açık kalan **0**'a iner ve bedeli tünel
dersinde ölçüldü. Kablosuz ayağı olan **9** akışta örtü iki koşula birden bağlıdır.

**Sahtecilik — 5 akış açık.** Açık kalanlar belgesi bulunmayan akışlardır. **Daraltma:**
belge kapsamasını genişletmek. Belgesiz akışı örtük rete düşürmek fazla duranı büyütüyordu;
kapsamayı genişletmek iki sayıyı birlikte iyileştiren tek harekettir.

**Araya girme — 24 akış açık.** Kesişim olduğu için en geniş açıklık burada. **Daraltma:**
iki denetimin kapsama kümelerini **hizalamak**; tünel seçicisini belge kapsamasına denk
getirmek, tek bir denetimi genişletmekten daha çok kazandırır.

**Hizmet engelleme — 22 akış açık ve hiçbir yapılandırmayla kapanmıyor.** **Daraltma:**
yüzey, bölütleme ile kural dizisi birlikte **40**'tan **22**'ye iner; kalan yirmi iki,
niyetin geçirdiği ve hizmetin görevi gereği erişilebilir kaldığı akışlardır. Bu sınıfın
kalan yüzeyi **kural tarafında değil, kapasite tarafında** daralır ve o taraf bu kursun
konusu değildir.

#### Özet

- Dört sınıf bu derste yalnız **sınıf adı** olarak geçer; yordamları Siber Güvenlik
  müfredatının Ağ Saldırıları konusunda durur. Burada her sınıf savunma tarafından okunan
  bir koşula indirgenir ve ölçüm **160 akış-sınıf çiftinde** yapılır.
- Bir denetimin kurulu olması ile bir sınıfın kapanması ayrı şeylerdir: dar seçicide
  sahtecilik **35/5**, dinleme **18/22**, araya girme **16/24**, hizmet engelleme
  **18/22**'dir ve hiçbir sınıf kırk akışta birden kapanmaz.
- Tam tünelde yalnız dinleme **40/0**'a çıkar; bir sınıfın tamamen kapanması denetimin
  istisnasız uygulanmasını gerektirir ve bedeli tünel dersinde ölçülmüştür.
- Altı denetim açıkken **87** çift kapalıdır; sıfır güven **51**, tünel **34**, bölütleme ve
  kural dizisi **18**, kuşak **8** çift taşır. Tespit **0** çift kapatır ve bu tanımı
  gereğidir.
- Kapsama raporunun iki yönü ayrı ayrı yanılır: denetim listesine bakan rapor **51 fazla
  geçen**, yalnız sınırı sayan rapor **55 fazla duran** üretir. Hizmet engelleme hiçbir
  yapılandırmayla kapanmaz; kalan **22** akış kapasite tarafında daralır.

#### Kurs Kapanışı

Kurs tek bir soruyu on dört kez sordu: **tasarımın niyet ettiği sınır ile gerçekten geçenin
farkı nedir?** Her ders bir düzenek kurdu, tek bir şeyi değiştirdi ve farkı iki yönde birden
saydı. Aşağıdaki tablo her dersin ölçtüğü sınırı ve iki yönünü topluyor; sayılar dersin
kendi koşumundan gelir.

| Ders | Ölçülen sınır | Fazla geçen | Fazla duran |
|---|---|---|---|
| Kablosuz İletimin Fiziği | 52 gücünde otuz metrelik hücre niyeti | 0 | 4 |
| Erişim Noktaları ve Denetleyiciler | kararın yeri: bağımsız → denetleyici | 2 → 0 | 4 → 4 |
| Kanal Planlama ve Kapsama | güç bütçesi 58 → 40 | 5 → 0 | 1 → 14 |
| Dolaşım ve Bant Yönlendirme | geçiş eşiği 30 → 14 | 8 → 0 | 0 → 8 |
| Kablosuz Güvenlik Protokolleri | kuşak koşulu 1 → 3 | 5 → 2 | 1 → 20 |
| Kısa Menzilli ve Geniş Alan Kablosuz | kısa / yerel / geniş menzil | 3 / 0 / 1 | 0 / 4 / 2 |
| Mobil Ağlar | hücre arası uzaklık 90 → 30 | 5 → 0 | 1 → 0 |
| Güvenlik Duvarı Türleri | yansımasız / aynalı / durum bilgili / uygulama farkındalıklı | 6 / 6 / 0 / 0 | 7 / 4 / 0 / 8 |
| Erişim Denetim Listeleri | dar 7 / geniş 6 / bozuk sıralı 8 / sıkı 7 kural | 0 / 2 / 2 / 0 | 0 / 0 / 0 / 2 |
| Ağ Bölütleme ve DMZ | bölge grafiği 2 → 4, dar / geniş türetim | 0 / 6 → 0 / 0 | 22 / 0 → 0 / 0 |
| Saldırı Tespit ve Önleme | ağ tabanlı eşik 7 → 9; konak tabanlı hiç göremediği 19 akış | 0 → 5 | 7 → 0 |
| VPN Teknolojileri | tünel seçici: tam tünel → bölünmüş | 0 → 6 | 0 → 10 |
| Sıfır Güven Ağ Modeli | konum ölçütü silinmiş → kimlik ölçütlü | 18 → 1 | 0 → 1 |
| Yaygın Ağ Saldırıları | kapsama raporu: denetim listesi / yalnız sınır | 51 / 0 | 18 / 55 |

Tablonun tek bir okuması vardır ve on dört satırın hepsinde görünür: **iki sütun birlikte
hareket etmez.** Bir sütunu sıfırlayan her ayar öbürünü büyütür. Güç bütçesi düşürülünce
sızıntı biter ve eksik on dörde çıkar; kuşak koşulu sertleşince sızıntı beşten ikiye iner ve
eksik yirmiye çıkar; tünel seçicisi daraltılınca ulaşamayan on olur. Tek yönü sayan bir
denetim, on dört dersin on dördünde de kusursuz bir tablo gösterirdi.

İkinci okuma kural sayısıyla ilgilidir. Yedi kural 40/40 doğru verdi, yedi kural 38 verdi;
altı kural sızdırdı, sekiz kural hem sızdırdı hem gölgeledi. **Kural saymak politika
ölçmez** — ve ölçütü silmek, kural sayısını hiç değiştirmeden bir kuralı örtük evete
çevirebilir. İki satırın boş kalmasının nedeni de aynı yerdedir: bu kursta bir sayının
kaynağı ortak tanım değil, **onu koşturan derstir**.

Kursun bıraktığı yer de burasıdır. On dört ders sınırın nasıl **yazıldığını** ölçtü: hangi
güç, hangi eşik, hangi kural dizisi, hangi ölçüt, hangi seçici. Hiçbiri sınırın yazıldıktan
sonra ne olduğunu sormadı. Yazılan bir sınır yaşayan bir sistemde durur: yükü değişir,
kuralları elle düzenlenir, sapması kimseye görünmez ve iki yönlü hatası ancak ölçüldüğünde
bilinir. **Sınırı yazmak ile yazılanı işletmek ayrı işlerdir.**

Sonraki kurs, **Ağ İşletimi ve Otomasyon**, ikincisini üstlenir: trafiğin nasıl
dağıtıldığını, ağın kendi durumunu hangi ölçümlerle bildirdiğini ve yapılandırma kod olarak
yönetildiğinde hangi hata modlarının kapandığını ele alır. Bu kursta sayılan iki sütun orada
bir ölçüm sorunu hâline gelir: **bir sınırın iki yönlü hatası, işletiliyorken nasıl
görülür?**

