Bölüm 9 · Yazılımın içi · Ders 48
DDoS saldırısı ve hız sınırı
Jeton kovası, filonun sunucusunu bot selinden korur
Veri. 50 teslimat robotu konumlarını ve görev isteklerini saniyede birer kez bulut sunucusuna yollar; sunucu saniyede 100 istek işleyebilir, bekleme kuyruğu 150 istek alır. 10. saniyede 20 bot saniyede toplam 400 istekle saldırır ve bu 30 s sürer. Kuyruk dolunca sunucu hangi isteğin robottan geldiğini ayırmadan düşürür: robotlar görev alamaz.
import numpy as nprng = np.random.default_rng(7)C, QMAX, DT = 100, 150, 0.1 # istek/s, kuyruk, sIYI, KOTU, SIDDET = 50, 20, 400 # robot, bot, saldırı istek/sKOVA, DOLUM = 5, 2.0 # jeton, jeton/shiz = np.r_[np.ones(IYI), np.full(KOTU, SIDDET / KOTU)] # istemci başına istek/sdef benzet(sinir):jeton = np.full(IYI + KOTU, float(KOVA)) # her istemcinin kovasıkuyruk, gonder, ok = 0, 0, 0for k in range(300): # 30 s saldırın = rng.poisson(hiz * DT) # bu 0,1 s içindeki isteklergonder += n[:IYI].sum() # meşru gönderilenjeton = np.minimum(KOVA, jeton + DOLUM * DT) # kova dolarif sinir:n = np.minimum(n, jeton.astype(int)); jeton -= n # jetonu olan geçera, b = n[:IYI].sum(), n[IYI:].sum()kabul = int(min(a + b, QMAX - kuyruk)) # kuyrukta yer kadarok += kabul and rng.hypergeometric(a, b, kabul) # kör seçimkuyruk = max(0, kuyruk + kabul - int(C * DT)) # sunucu 10 istek işlerreturn ok / gonder # meşru başarı oranıprint('sınır yok :', round(benzet(False), 3)) # ≈ 0,22print('jeton kovası:', round(benzet(True), 3)) # ≈ 1,00
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Sunucunun bir kapasitesi vardır. Gelen istek bunu aşarsa kuyruk dolar; dolu kuyruğa gelen istek düşer.
- Sınır yokken düşme kör olur: 450 isteğin 100'ü geçer, meşru robotlar da aynı oranda (yaklaşık %22) kaybeder.
- Jeton kovası: her istemcinin kovası saniyede 2 jetonla dolar; her istek bir jeton harcar, jetonu olmayanın isteği kapıda reddedilir. Robotlar saniyede 1 istekle hiç takılmaz, botlar saniyede 2'ye iner.
- Kova boyu ani patlamaya ne kadar izin verildiğini belirler: büyük kova saldırının ilk saniyesinde kuyruğu doldurur, çok küçük kova meşru robotları da keser.
- Şunu dene: kova boyunu 1 yap, robotların başarısı düşer; 40 yap, saldırının başında kuyruk dolup taşar.
Neden önemli
Bulut API'leri, harita sunucuları ve robot filosu yönetim panelleri istemci başına hız sınırıyla korunur; aynı kova, tek bir hatalı robotun döngüye girip sunucuyu boğmasını da önler. Botlar çok sayıda adresten yavaş yavaş gelirse istemci başına sınır yetmez; o zaman ağ düzeyinde süzme ve kapasite artışı gerekir.
ESOF 323, 11. hafta: robotlarda derin öğrenme →