İçeriğe geç
academia.sh

Ders 16 / 16

Zaman ve Yönetim Protokolleri

Saat eşitlemenin tek varsayımı ve turun bakışımsızlığı: gidiş ile dönüş gecikmesi eşit değilse saat sapması doğrudan bu farktan doğar ve protokolün elinde farkı görecek hiçbir alan yoktur; yanında yoklayan ile bildiren yönetim modelinin tur ve karar dengesi.

İçindekiler

Önceki iki ders aracının bir iletiden ne okuyabildiğini ölçtü. Okumanın sessiz bir önkoşulu vardı: bir önbelleğin tazelik ömrü, bir sertifikanın geçerlilik aralığı, bir postanın Date: alanı — hepsi iki ucun saatinin birbirine yakın olduğunu varsayar.

Saatleri yakınlaştıran protokol, kursun ölçü ekseninin en saf örneğidir: elinde dört zaman damgası vardır ve tek bir turda saat sapmasını kestirir. Kestirim tek bir varsayıma dayanır — gidiş ile dönüş gecikmesinin eşit olduğuna. Bu dersin sorusu, varsayım tutmazsa ne olduğu ve protokolün tutmadığını görüp göremediğidir.

  • DG51. Kurgu M04/K03’ün ortak kurgusudur: istasyon.ornek ve bir zaman kaynağı. Gerçek bir zaman sunucusu adı yazılmaz, gerçek bir ağ çağrısı yapılmaz.
  • DG52. Ölçülen küme 40 turdur. Kâhin kurguyu biz ürettiğimiz için bilinir: sunucu saati istemciden 12,500 ms ileridedir ve gidiş yolu dönüş yolundan 4,000 ms uzundur. Yollar tur başına oynar ama bakışımsızlık sistematiktir; protokol bu iki sayıyı görmez, yalnız dört damgayı görür.
  • DG53. Aygıt yönetimi tarafında küme 40 aygıt ve 20 tiklik bir penceredir. Her aygıtın durumu pencere içinde bir kez değişir; ölçü, pencere sonunda yöneticinin doğru durumu bilip bilmediğidir.
  • DG54. M03’ün Sistem Yönetimi kursu saat kaymasının günlüklerdeki belirtilerini ölçmüştü; o ölçüm tekrarlanmaz. Buradaki ölçü eşitlemenin kendi hatasıdır.

Dört Damga ve İki Hesap

Saat eşitlemesi tek bir alışverişle yapılır. Her uç, iletiye dokunduğu anda kendi saatini yazar; NTP’nin taşıdığı dört damga budur.

istemci                                  sunucu (zaman kaynağı)
   |                                        |
   |-- t1: istemcinin gönderme anı -------->|
   |                                        t2: sunucunun alma anı
   |                                        t3: sunucunun gönderme anı
   |<---------------------------------------|
   t4: istemcinin alma anı                  |

   t1, t4  istemcinin saatinde okunur
   t2, t3  sunucunun saatinde okunur

Bu döküm çalıştırılmadı; öğretilen biçimdir. İki hesap bu dört sayıdan çıkar:

θ^=(t2t1)+(t3t4)2δ=(t4t1)(t3t2)\hat{\theta} = \frac{(t_2 - t_1) + (t_3 - t_4)}{2} \qquad \delta = (t_4 - t_1) - (t_3 - t_2)

Birincisi saat sapması (clock offset) kestirimidir, ikincisi turun toplam gecikmesi. İkinci hesap saat sapmasından tümüyle bağımsızdır: sapma bir kez artı bir kez eksi girdiği için düşer. Birinci hesap ise gidiş ile dönüşün eşit olduğunu varsayarak ikiye böler.

Varsayım tutmazsa hatanın kapalı biçimi vardır. Gidiş gecikmesi dgd_g, dönüş gecikmesi ddd_d olsun; kestirim ile gerçek sapma arasındaki fark tam olarak şudur:

θ^θ=dgdd2\hat{\theta} - \theta = \frac{d_g - d_d}{2}

Yani hata gürültüden değil, turun bakışımsızlığından doğar ve farkın yarısına eşittir.

Ölçüm: Bakışımsızlık

TOHUM = 20260809
SAPMA = 0.0125          # kâhin: sunucu saati istemciden bu kadar ileride (s)
BAKISIMSIZLIK = 0.0040  # kâhin: gidiş yolu dönüş yolundan bu kadar uzun (s)


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

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


def turlar(sayi=40, tohum=TOHUM):
    r, liste = uretec(tohum), []
    for i in range(sayi):
        ortak = 0.0150 + 0.0001 * r(9)
        gidis = ortak + BAKISIMSIZLIK / 2 + 0.00002 * r(7)
        donus = ortak - BAKISIMSIZLIK / 2 + 0.00002 * r(7)
        t1 = 100.0 + i
        t2 = t1 + gidis + SAPMA
        t3 = t2 + 0.0002
        t4 = t3 + donus - SAPMA
        liste.append((t1, t2, t3, t4))
    return liste


def kestir(d):
    t1, t2, t3, t4 = d
    return ((t2 - t1) + (t3 - t4)) / 2, (t4 - t1) - (t3 - t2)


ol = turlar()
kestirimler = [kestir(d) for d in ol]
hatalar = [s - SAPMA for s, _ in kestirimler]
enaz = min(kestirimler, key=lambda x: x[1])
print(f"tur {len(ol)}, gerçek sapma {SAPMA * 1000:.3f} ms, "
      f"bakışımsızlık {BAKISIMSIZLIK * 1000:.3f} ms")
print(f"kestirim ortalaması {sum(s for s, _ in kestirimler) / len(ol) * 1000:.4f} ms")
print(f"hata: ortalama {sum(hatalar) / len(hatalar) * 1000:.4f}, "
      f"en küçük {min(hatalar) * 1000:.4f}, en büyük {max(hatalar) * 1000:.4f} ms")
print(f"bakışımsızlığın yarısı {BAKISIMSIZLIK / 2 * 1000:.4f} ms")
print(f"en küçük gecikmeli tur: kestirim {enaz[0] * 1000:.4f} ms, "
      f"hata {(enaz[0] - SAPMA) * 1000:.4f} ms")

fark = 0.0
for t1, t2, t3, t4 in ol:
    sapma_ikiz = ((t2 - t1) + (t3 - t4)) / 2
    yari = ((t4 - t1) - (t3 - t2)) / 2
    fark = max(fark, abs(t1 + yari + sapma_ikiz - t2),
               abs(t3 + yari - sapma_ikiz - t4))
print(f"ikiz dünyanın ürettiği damgaların en büyük farkı {fark:.3e} s")
tur 40, gerçek sapma 12.500 ms, bakışımsızlık 4.000 ms
kestirim ortalaması 14.4917 ms
hata: ortalama 1.9917, en küçük 1.9400, en büyük 2.0400 ms
bakışımsızlığın yarısı 2.0000 ms
en küçük gecikmeli tur: kestirim 14.4700 ms, hata 1.9700 ms
ikiz dünyanın ürettiği damgaların en büyük farkı 2.842e-14 s

Protokolün Göremediği

Kestirimlerin ortalaması 14,4917 ms; gerçek sapma 12,500 ms; hata 1,9917 ms ve bakışımsızlığın yarısı 2,0000 ms. En küçük hata 1,9400, en büyük hata 2,0400 — kırk turun tamamı iki milisaniyenin çevresinde dar bir bantta duruyor. Hatanın rastgele olmadığının kanıtı budur: gürültü olsaydı hatalar sıfırın iki yanına dağılırdı.

Standart iyileştirme çok tur ölçüp en küçük gecikmeli turu seçmektir; en az kuyruklanmış tur en temiz ölçüm sayılır. O tur seçildiğinde hata 1,9917’den 1,9700 ms’ye iniyor. Süzme gürültüyü azaltıyor, bakışımsızlığı azaltmıyor — çünkü bakışımsızlık gürültü değil, yolun kendi özelliğidir.

Son satır işin özü. Aynı dört damgayı üreten ikinci bir dünya kuruldu: orada yol bakışımlı ve sunucunun saati gerçekten 14,4917 ms ileride. İki dünyanın damgaları 2,842×10142{,}842 \times 10^{-14} saniyeye kadar aynı — bu da kayan noktalı sayının kendi çözünürlüğü. Dört damga iki farklı gerçeği ayırt edemez; kestirim yanlış hesaplanmış değildir, ikiz dünyada tam olarak doğrudur.

Bakışımsızlığı gösterecek bir alan olmadığı için bu bir tur borcu bile değil: kaç tur atılırsa atılsın kapanmaz. Kapatmanın yolu protokolün dışındadır — yolun bakışımlı olduğunu başka bir kaynaktan bilmek ya da damgaları yola girmeden önce koymak. Kursun dördüncü okuması burada en keskin biçimini alır: iletide yazanı doğrulayan hiçbir şey yoktur; burada iletide yazan doğrudur ve yine de yetmez.

Yoklayan ile Bildiren

Aygıt yönetimi aynı ekseni başka bir soruyla sorar: bir yönetici kırk aygıtın durumunu nasıl öğrenir. SNMP iki modeli birden tanımlar. Yoklayan modelde yönetici düzenli aralıklarla sorar ve her soru bir gidiş–dönüştür. Bildiren modelde aygıt durumu değişince kendisi haber verir; onaysız biçimi bir tur bile istemez, onaylı biçimi bir onay turu ister.

TOHUM = 20260809
AYGIT, PENCERE = 40, 20


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

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


def olaylar():
    r = uretec(TOHUM + 1)
    return [{"aygit": i + 1, "tik": 1 + r(19), "dustu": r(9) == 0}
            for i in range(AYGIT)]


def yoklama(aralik):
    tur = dogru = gecikme = 0
    for o in olaylar():
        tur += PENCERE // aralik
        gorulen = ((o["tik"] - 1) // aralik + 1) * aralik
        if gorulen <= PENCERE:
            dogru += 1
            gecikme += gorulen - o["tik"]
    return tur, dogru, gecikme / max(dogru, 1)


def bildirim(onayli):
    dusen = sum(x["dustu"] for x in olaylar())
    return (AYGIT, AYGIT, 0.0) if onayli else (0, AYGIT - dusen, 0.0)


print(f"{'model':<22s} {'tur':>5s} {'doğru':>6s} {'yanlış':>7s} {'gecikme':>9s}")
for ad, (t, d, g) in (("yoklama, aralık 5", yoklama(5)),
                      ("yoklama, aralık 10", yoklama(10)),
                      ("yoklama, aralık 20", yoklama(20)),
                      ("bildirim, onaysız", bildirim(False)),
                      ("bildirim, onaylı", bildirim(True))):
    print(f"{ad:<22s} {t:5d} {d:6d} {AYGIT - d:7d} {g:6.2f} tik")

print(f"\naygıt {AYGIT}, pencere {PENCERE} tik, "
      f"yolda düşen bildirim {sum(x['dustu'] for x in olaylar())}")
model                    tur  doğru  yanlış   gecikme
yoklama, aralık 5        160     40       0   2.08 tik
yoklama, aralık 10        80     40       0   4.95 tik
yoklama, aralık 20        40     40       0  10.95 tik
bildirim, onaysız          0     34       6   0.00 tik
bildirim, onaylı          40     40       0   0.00 tik

aygıt 40, pencere 20 tik, yolda düşen bildirim 6

Yoklayan modelde tur ile yakalama gecikmesi doğrudan takas edilir: aralık beşten yirmiye çıkınca tur 160’tan 40’a iner, gecikme 2,08 tikten 10,95 tike çıkar. Doğru karar sayısı üçünde de kırktır — yoklama geç öğrenir ama yanlış öğrenmez.

Bildiren model takası kırar. Onaylı biçim en sık yoklamanın doğruluğunu 160 yerine 40 turla ve sıfır gecikmeyle veriyor. Onaysız biçim tur maliyetini sıfıra indiriyor ve altı aygıtta yanlış karar doğuruyor. Bu altı yanlışın niteliği önemli: yönetici sessizlik ile değişmemişlik arasında ayrım yapamaz ve yanıldığını da bilmez. Onay turu tam olarak bu ayrımı satın alır — kursun kuralının bu derse düşen biçimi budur: alınamayan karar bir tur borcudur, ve borç ödenmediğinde kararın yerini bir varsayım alır.

Özet

  • Saat eşitlemesi dört zaman damgasından iki hesap çıkarır: gecikme hesabı saat sapmasından bağımsızdır, sapma kestirimi ise gidiş ile dönüşün eşit olduğunu varsayar.
  • Varsayım tutmazsa hata rastgele değildir: 40 turda gerçek sapma 12,500 ms iken kestirimlerin ortalaması 14,4917 ms, hata 1,9917 ms — bakışımsızlığın tam yarısı. En küçük gecikmeli turu seçmek hatayı ancak 1,9700 ms’ye indirir; süzme gürültüyü alır, bakışımsızlığı almaz.
  • Aynı dört damgayı üreten bakışımlı bir ikiz dünya kurulabiliyor; damgalar kayan nokta çözünürlüğüne kadar aynı, dolayısıyla protokolün bakışımsızlığı görecek alanı yok ve bu eksik tur atarak kapanmıyor.
  • Yönetimde yoklayan model turu gecikmeyle takas eder (160 tur ve 2,08 tik, 40 tur ve 10,95 tik); onaylı bildiren model aynı doğruluğu 40 turla ve sıfır gecikmeyle verir.
  • Onaysız bildirimde tur sıfırdır ama altı aygıtta karar yanlış çıkar; yönetici sessizlik ile değişmemişlik arasında ayrım yapamaz ve onay turu tam olarak bu ayrımı satın alır.

Kurs Kapanışı

ders ölçülen karar gidiş–dönüşsüz alınan yanlış ya da alınamayan
HTTP 01 · Yöntemler yöntemden yinelenebilir, saklanabilir 195/200 doğru, 0 tur 5 yanlış: 2 eksik im, 3 doğrulayıcı
HTTP 02 · Durum kodları ilk basamaktan saklama ve yeniden deneme satır rejimi 309 doğru, 4004 bayt 11 yanlış; gövdenin 6 kararı 673,3 bayt/karar
HTTP 03 · Başlıklar ve pazarlık çözülen alan ile taşınan alanın ayrımı 195 doğru; tam imle 13/13 doğru kopya 5 yanlış; imsiz 9 yanlış kopya; 2960 bayt sıfır karar
HTTP 04 · Çerezler kapsam kuralı ve saklanan yanıtın alıcısı 195 doğru; kapsamlar 11, 24, 40 ileti taşır 2 yanlış; im zarfta 80 karar uçlara, 40 tur
HTTP 05 · Sürümler çerçevelemenin aracıya kazandırdığı aynı 195 doğru, 3524 yerine 427 bayt bağlamsız aracıda 189 alınamayan, 39 tur
HTTP 06 · Önbellekleme doğrulayıcının çözünürlüğü damga rejimi 195 doğru, 12 bayattan 9’u yakalanır 3 kopyada damga kaçar; her seferinde sormak 40 tur
TLS 01 · Simetrik ve asimetrik rolün tura maliyeti tek kalıcı bağlantıda 0,025 tur/alışveriş her iletide kurulumda 1,000 tur
TLS 02 · Sertifika zinciri zincirin yerel doğrulanması 33/40 doğru, 0 gidiş–dönüş; zincir uzasa da 0 7 yanlış, tamamı iptalden; sormak 111 tur, aynı tablo
TLS 03 · El sıkışması tur bütçesi ve zarfın ödettiği karar zarfta 40 karar, hiçbiri yanlış değil 160 alınamayan, 40 tur; bayt 3524’ten 920’ye
TLS 04 · Sertifika yaşam döngüsü iptalin tur borcu olması sormayan istemci 0 tur; ara üç seçeneğin de alışveriş başına turu 0 sormayan 22,02/40 yanlış kabul; her alışverişte sormak 120 tur, 0 yanlış
DİĞER 01 · WebSocket yükseltmenin bir rejim değişimi olması yükseltme isteği 5 kararın 2’sini verir tünelde 200 alınamayan, 40 tur, 0 yanlış
DİĞER 02 · Sunucu akışı akışın HTTP içinde kalması 1 karar noktası, 5 karar, 87 bayt 195 alınamayan, 39 tur; kapsamda 73 yanlış
DİĞER 03 · Yoklama karar başına tur maliyeti dört yaklaşımda da 0,200 tur/karar harcanan tur ile tur borcunun toplamı hepsinde 40
DİĞER 04 · Dosya aktarımı denetim ile veri kanalının eşleşmesi tek kanal açık 195 doğru, 0 tur iki kanalda 8 yanlış, 3’ü bölünmeden; veri zarflı 40 tur
DİĞER 05 · Posta posta zarfı ile başlığın ayrılması zarf 60, başlıkla 140, anahtarla 180 doğru 7 yanlış iletmeden; alınamayan 133’ten 13’e
DİĞER 06 · Zaman ve yönetim turun bakışımsızlığı ve yönetim modeli onaylı bildirim 40 doğru, 40 tur, 0 gecikme hata 1,9917 ms, tur atarak kapanmaz; onaysızda 6 yanlış

Tablodaki her sayı, o satırın kendi dersinin ölçümünden okunmuştur; hiçbir satır ortak tanımdan doldurulmamıştır.

Kursun tek bir cümlesi vardı ve on altı ders onu ölçtü: iletide ne yazıyorsa aracı onu bilir; yazmıyorsa bilmez; yanlış yazıyorsa yanlış bilir. Ölçü hep aynı kaldı — bir protokolün sayısı taşıdığı alan değil, alıcı tarafa fazladan bir gidiş–dönüş olmadan kaç kararı aldırdığıdır — ve alınamayan her karar bir tur borcu olarak yazıldı.

Kapanışta üç sonuç durur. Alan eklemek karar kazandırmaz: bayt büyür, karar tablosu değişmez; kazandıran şey baytın kendisi değil, adı ve anlamı sabitlenmiş bir alan olmasıdır. Gizlemenin bedeli bir kusur değil bir seçimdir: taşıma zarfı kapandığında aracı kararların çoğunu kaybeder, ama kalanların içinde yanlış yoktur. Ve kararı doğrulayan hiçbir şey yoktur: protokol bildirime inanır, çünkü bildirimden başka elinde bir şey yoktur. Son ders bunun en uç biçimini gösterdi — orada bildirim doğruydu ve yine de yetmedi, çünkü eksik olan bir alan değil bir dünyaydı.

Bütün bu kararları alan aracı, kurs boyunca iletiyi okudu. Bir sonraki kurs, Anahtarlama ve Yönlendirme, bir katman aşağı iner ve orada duran cihaza bakar: bir anahtarın çerçeveyi hangi bacaktan çıkaracağını, bir yönlendiricinin paketi hangi komşuya vereceğini, ve bu kararların hangi tablodan okunduğunu. Ölçü de yer değiştirir: burada aracı ne bildiğine göre sayılıyordu, orada cihaz ne kadar doğru ilettiğine göre sayılacak. Kararı alan aracıdan, paketi ileten cihaza.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat