Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-03.03

TTL, cache ve delegation

Bir DNS cevabının süre ve authority kapsamını, fresh cache ile stale fallback’i ayırarak oku.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Fresh positive hit

  1. t=30: sorgu hazır

    A entry resolver’da 30 saniyelik; parent/child verisi bu dalda sorgulanmayacak.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    cache age=30; TTL=120
    Parent authority
    example.org authority
    Child authority
    lab.example.org authority
  2. Query resolver’a ulaştı

    notes.lab.example.org A query alındı; cache kararı henüz ayrı adımdır.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    query received; cache age=30
    Parent authority
    example.org authority
    Child authority
    lab.example.org authority
  3. Local fresh lookup

    30<120; kalan 90 saniye. Clock hesabı local’dir, authority’ye paket göndermez.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    fresh A=198.51.100.210; remaining=90
    Parent authority
    example.org authority
    Child authority
    lab.example.org authority
  4. Cached cevap geldi

    Client A adresini TTL=90 ile aldı; yeni authoritative refresh yapılmadı.

    Client stub
    A=198.51.100.210; TTL=90
    Recursive resolver
    fresh A=198.51.100.210; remaining=90
    Parent authority
    example.org authority
    Child authority
    lab.example.org authority

Expiry sonrası delegation

  1. t=120: equality sınırı

    Fresh entry süresi tamamlandı; parent context seçilmiş modelde biliniyor.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    age=120; TTL=120
    Parent authority
    example.org ready
    Child authority
    lab.example.org ready
  2. Query alındı

    Resolver yeni A query’sini aldı. Entry’nin age’i 120 olarak verilmiştir; cache değerlendirmesi bir sonraki local adımda yapılır.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    query received; age=120
    Parent authority
    example.org ready
    Child authority
    lab.example.org ready
  3. Fresh miss

    120<120 false. Parent authority’ye başvurulacak; bu karar local.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    fresh miss; parent selected
    Parent authority
    example.org ready
    Child authority
    lab.example.org ready
  4. Parent query arrival

    Parent notes.lab.example.org A query’sini aldı.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    fresh miss; parent selected
    Parent authority
    query received; referral available
    Child authority
    lab.example.org ready
  5. Referral resolver’a geldi

    NS target ve gerekli glue alındı; final A cevabı henüz yok.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    referral ns1.lab.example.org; glue 192.0.2.54
    Parent authority
    query received; referral available
    Child authority
    lab.example.org ready
  6. Child seçimi local

    192.0.2.54 child authority endpoint’i seçildi.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    child selected: 192.0.2.54
    Parent authority
    query received; referral available
    Child authority
    lab.example.org ready
  7. Child query arrival

    Resolver’ın ayrı query’si child’a ulaştı; parent forwarding yapmadı.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    child selected: 192.0.2.54
    Parent authority
    query received; referral available
    Child authority
    query received; A=198.51.100.210
  8. Authoritative answer geldi

    Resolver child cevabını TTL=120 ile aldı; local cache yazımı sonraki adımdır.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    authoritative A received; TTL=120
    Parent authority
    query received; referral available
    Child authority
    query received; A=198.51.100.210
  9. Yeni received entry

    Model entry yaşını yeni alınışa göre 0 yaptı; parent/glue timer’larını bu olayla sıfırlamaz.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    fresh cache age=0; A=198.51.100.210
    Parent authority
    query received; referral available
    Child authority
    query received; A=198.51.100.210
  10. Client cevabı aldı

    Yeni A cevabı client’a TTL=120 ile ulaştı; app bağlantısı bu sahnede yok.

    Client stub
    A=198.51.100.210; TTL=120
    Recursive resolver
    fresh cache age=0; A=198.51.100.210
    Parent authority
    query received; referral available
    Child authority
    query received; A=198.51.100.210

Type kapsamlı negative hit

  1. AAAA query, t=59

    NODATA entry TTL=60 ile alındı; mevcut A verisi başka RRset.

    Client stub
    AAAA cevabı bekleniyor
    Recursive resolver
    NODATA age=59; type=AAAA
    Parent authority
    no query in this branch
    Child authority
    no query in this branch
  2. AAAA query alındı

    Resolver v4only.lab.example.org AAAA query’sini aldı.

    Client stub
    AAAA cevabı bekleniyor
    Recursive resolver
    AAAA query received; age=59
    Parent authority
    no query in this branch
    Child authority
    no query in this branch
  3. Type kapsamlı hit

    Name/type/class eşleşir; remaining=1. Bu karar A yokluğu üretmez.

    Client stub
    AAAA cevabı bekleniyor
    Recursive resolver
    NOERROR/NODATA; SOA remaining=1
    Parent authority
    no query in this branch
    Child authority
    no query in this branch
  4. NODATA cevabı geldi

    Client AAAA için NODATA aldı; A RRset mevcut kalır.

    Client stub
    AAAA NODATA; A still exists
    Recursive resolver
    NOERROR/NODATA; SOA remaining=1
    Parent authority
    no query in this branch
    Child authority
    no query in this branch

İzinli stale fallback

  1. Retained positive, t=150

    Entry expired; serve-stale açık ve child context biliniyor.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    retained age=150; original TTL=120
    Parent authority
    no parent query selected
    Child authority
    child endpoint known
  2. Query resolver’da

    Client query alındı; stale henüz cevaplanmadı.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    query received; retained expired entry
    Parent authority
    no parent query selected
    Child authority
    child endpoint known
  3. Refresh query child’da

    Refresh girişiminin query arrival’ı gösterilir; başarılı response varsayılmaz.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    query received; retained expired entry
    Parent authority
    no parent query selected
    Child authority
    refresh query received; outcome unavailable
  4. Yerel sonuç: refresh yapılamadı

    Fixture refresh’i başarısız seçer; bu bir reply paketi veya ölçülen timeout değildir. Retention/policy fallback’e izin verir.

    Client stub
    A cevabı bekleniyor
    Recursive resolver
    stale fallback selected; returned TTL=30
    Parent authority
    no parent query selected
    Child authority
    refresh query received; outcome unavailable
  5. Stale cevap geldi

    Client eski positive adresi TTL=30 ile aldı. Yeni authoritative freshness kanıtı yok.

    Client stub
    A=198.51.100.210; stale fallback TTL=30
    Recursive resolver
    stale fallback selected; returned TTL=30
    Parent authority
    no parent query selected
    Child authority
    refresh query received; outcome unavailable

ROLLER · STATE · VERİ AKIŞI

Bir cevap ne kadar süre fresh kalır?

TTL, recursive resolver’ın aldığı RRset’i kaç saniye fresh cache verisi olarak kullanabileceğini sınırlar. Örneğimizde notes.lab.example.org A cevabı t=0 anında TTL=120 ile alınır. t=30’da kalan süre 90; t=119’da 1; t=120’de 0’dır. Eşitlik sınırı önemlidir: 120 saniye tamamlandığında sıradan fresh-cache dalı artık seçilmez.

Saatin ilerlemesi kendi başına bir DNS query paketi değildir. Yeni sorgu, prefetch veya resolver politikası refresh’i başlatabilir. Cache daha erken evict edilebilir; TTL elde tutulacağına dair söz vermez. Authoritative server’daki zone kaydı ise bir recursive cache entry değildir: cevapta TTL vermesi, kendi zone verisini 120 saniye sonra sileceği anlamına gelmez.

Olumsuz cevap da cache edilir; anahtarı farklıdır

NXDOMAIN, bu yalın örnekte sorgulanan ismin olmadığını; NODATA ise ismin bulunduğunu fakat istenen type için RRset olmadığını anlatır. Alias zinciri olmayan missing.lab.example.org için NXDOMAIN anahtarı name/class; A kaydı bulunan v4only.lab.example.org için AAAA NODATA anahtarı name/type/class’tır. AAAA yokluğunu A yokluğu gibi taşımak bu kapsamı bozar.

Authoritative negative cevapta taşınan SOA’nın TTL’i 300, MINIMUM alanı 60 ise negative cache süresi min(300,60)=60 olur. Cache’ten dönen SOA TTL’i geçen zamanla azalır; bu örnekte t=60’ta tekrar kullanılmaz. MINIMUM’u bütün zone kayıtlarının güncel minimum TTL’i diye okumayız. SERVFAIL veya cevap alınamaması da otomatik NXDOMAIN değildir.

Delegation, alt ağacı başka authority’ye bırakır

example.org parent zone’u lab.example.org için NS target olarak ns1.lab.example.org adını yayımlar. Zone cut’ın altında child zone kendi SOA ve apex NS verisine sahiptir. Resolver parent’ın referral cevabından sonra child authority’ye ayrı query gönderir; parent query’yi child’a proxy etmiş sayılmaz.

NS target child’ın içinde olduğundan başlangıç adresine ihtiyaç vardır: parent’taki 192.0.2.54 glue bu döngüyü açar. Glue, notes.lab.example.org için authoritative A cevabı değildir. Artifact’te parent NS, glue adresi ve child’ın 198.51.100.210 cevabı ayrı alanlardır. Registrar kayıt işinin aracısıdır; authoritative DNS operator ile aynı kuruluş olabilir ama resolver’ın bu sorgu zincirinde registrar hop’u yoktur.

SOA timer’ları ikinci bir saat ailesidir

SOA REFRESH, RETRY ve EXPIRE, secondary authoritative server’ın zone kopyasını primary ile güncel tutmasıyla ilgilidir. Artifact’te REFRESH=3600, RETRY=600, EXPIRE=86400 seçilmiştir; bunlar ürün default’u değildir. Başarılı SOA kontrolünde SERIAL aynıysa yeni transfer gerekmeyebilir ve refresh zamanı yeniden başlar. Bu, recursive A cache TTL’ini yeniden başlatmaz.

Başarılı güncellik kontrolü EXPIRE süresi boyunca yapılamazsa secondary eski zone kopyasını authoritative veri olarak kullanamaz. Seçilmiş model, son başarılı kontrolden 86399 saniye sonra süre dolmamış, 86400’de dolmuş kabul eder. Bu nedenle “TTL bitti” cümlesinin hangi veri, hangi server rolü ve hangi timer için söylendiğini yazmadan teşhis tamamlanmaz.

Serve-stale, fresh olmakla aynı şey değildir

RFC 8767, authoritative refresh yapılamadığında elde tutulmuş expired verinin belirli politikayla kullanılmasına izin verir. Bu dersin özel dalında positive entry’nin yaşı 150, ilk TTL’i 120’dir; refresh girişimi başarısızdır ve serve-stale açıktır. Resolver eski adresi TTL=30 ile döndürür: entry hâlâ stale’dır, yeni authoritative başarı uydurulmaz. 30 saniye RFC’nin önerdiği değerdir, bütün resolver’ların zorunlu default’u değildir.

Retention süresi, fresh TTL ve cevapta verilen stale TTL farklı ölçülerdir. RFC ayrıntılı tek bir zorunlu algoritma tanımlamaz; yerel policy ve timer’lar sonucu etkiler. TTL=0 ile alınan RR yalnız mevcut işlem içindir; stale depoya dönüştürülmez. Buradaki negative örnekler sıradan expiry uygular; animasyon negative serve-stale davranışı modellemez.

Değişiklik tek anda bütün cache’lere ulaşmaz

Delegation NS, nameserver adresi, CNAME ve terminal A/AAAA RRset’leri bağımsız cache ömürlerine sahip olabilir. Artifact’in 600/300/120 saniyeleri bu ayrımı görünür kılar. Yeni zone verisi hazır olduğunda daha önce alınmış fresh cevapların kalan süresi bir anda sıfırlanmaz; farklı resolver’lar farklı zamanlarda cevap almıştır.

Bu yüzden “DNS propagation 5 dakika” gibi tek süreli açıklama yerine değişen RRset’i, parent/child kapsamını ve gözlenen cache yaşını belirle. Child NS target’ının adresiyle parent glue uyuşmazlığı ya da yanlış alias zinciri erişimi bozabilir; fresh/stale ve authoritative/cached ayrımı olmadan görülen eski adresin kaynağı anlaşılamaz.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Stale sınırı

  1. Availability ile freshness ayrıldı

    Positive kayıt 120 saniyelik TTL ile alınmıştır; t=150 anında fresh değildir. Stale fallback’in cevap verebilmesi, authoritative refresh’in başarılı olduğunu veya adresin hâlâ güncel olduğunu göstermez.

    Resolver evidence
    Stale positive / t=150
    Classification gate
    Interpretation yok
    Application interpretation
    Application acceptance yok
  2. Necessary conditions birlikte okundu

    Fallback policy açıktır, positive kayıt tutulmuştur ve authoritative refresh yapılamamıştır. Bu üç koşul stale cevabı açıklar. Döndürülen 30 saniyelik TTL, eski kaydı fresh olarak yeniden sınıflandırmaz.

    Resolver evidence
    Stale positive / t=150
    Classification gate
    Fallback policy / not fresh
    Application interpretation
    Application acceptance yok
  3. Application’a yanlış kesinlik verilmedi

    Fallback address sağlanabilir, ancak moved service için hâlâ uygun endpoint olduğunu varsaymak desteklenmez. Application peer identity ve intended resource policy’sini ayrıca değerlendirir.

    Resolver evidence
    Stale positive / t=150
    Classification gate
    Fallback policy / not fresh
    Application interpretation
    Freshness/identity ayrı
  4. Timer’lar birbirine aktarılmadı

    Delegation NS kaydı 600, glue adresi 300, answer kaydı ise 120 saniyelik lifetime taşır. Bunlar ayrı RRset’lere aittir. Tek bir global propagation timer kullanmak, bu bağımsız cache state’lerini kaybettirir.

    Resolver evidence
    NS 600 / glue 300 / answer 120
    Classification gate
    Fallback policy / not fresh
    Application interpretation
    Freshness/identity ayrı
  5. Secondary EXPIRE ayrı gate’tir

    Son başarılı secondary check t=0’dadır ve EXPIRE 86400 saniyedir. Equality’ye ulaşıldığında bu model zone’u kullanmayı durdurur. Recursive positive serve-stale policy’si bu ayrı authority gate’ini kendiliğinden geçersiz kılamaz.

    Resolver evidence
    NS 600 / glue 300 / answer 120
    Classification gate
    Secondary EXPIRE ≠ cache TTL
    Application interpretation
    Freshness/identity ayrı
  6. Desteklenen fallback sınırı korundu

    Bu dal retained positive veriyi stale-fallback olarak sınıflandırır; fresh=false kalır. Negative serve-stale davranışı bu örnekte modellenmez. TTL=0 ile alınan kayıt ise sonraki stale reuse için tutulamaz. Dönen cevap, yeni authoritative freshness veya service başarısını kanıtlamaz.

    Resolver evidence
    NS 600 / glue 300 / answer 120
    Classification gate
    Secondary EXPIRE ≠ cache TTL
    Application interpretation
    Stale fallback; freshness doğrulanmadı

Glue sınırı

  1. Availability ile freshness ayrıldı

    Parent example.org. child lab.example.org. için NS target ns1.lab.example.org. ve glue 192.0.2.54 sağlar. Glue notların final A cevabı değildir.

    Resolver evidence
    Glue 192.0.2.54
    Classification gate
    Interpretation yok
    Application interpretation
    Application acceptance yok
  2. Necessary conditions birlikte okundu

    Glue role=bootstrap-address-not-child-answer olarak verilmiştir. Child authority’ye ulaşma desteği final resource location kararı değildir.

    Resolver evidence
    Glue 192.0.2.54
    Classification gate
    Bootstrap ≠ child answer
    Application interpretation
    Application acceptance yok
  3. Application’a yanlış kesinlik verilmedi

    notes.lab.example.org. childAnswer address=198.51.100.210’dur. Glue .54 adresini kitap endpoint’i diye application’a taşımak authority geçişini kaybettirir.

    Resolver evidence
    Glue 192.0.2.54
    Classification gate
    Bootstrap ≠ child answer
    Application interpretation
    Final A .210; not glue .54
  4. Timer’lar birbirine aktarılmadı

    Delegation NS kaydı 600, glue adresi 300, answer kaydı ise 120 saniyelik lifetime taşır. Bunlar ayrı RRset’lere aittir. Tek bir global propagation timer kullanmak, bu bağımsız cache state’lerini kaybettirir.

    Resolver evidence
    NS 600 / glue 300 / answer 120
    Classification gate
    Bootstrap ≠ child answer
    Application interpretation
    Final A .210; not glue .54
  5. Secondary EXPIRE ayrı gate’tir

    Son başarılı secondary check t=0’dadır ve EXPIRE 86400 saniyedir. Equality’ye ulaşıldığında bu model zone’u kullanmayı durdurur. Recursive positive serve-stale policy’si bu ayrı authority gate’ini kendiliğinden geçersiz kılamaz.

    Resolver evidence
    NS 600 / glue 300 / answer 120
    Classification gate
    Secondary EXPIRE ≠ cache TTL
    Application interpretation
    Final A .210; not glue .54
  6. Desteklenen fallback sınırı korundu

    Parent referral, glue bootstrap ve child answer ayrı tutuldu. Bu authority map DNSSEC veya gerçek delegation değişikliği kanıtı değildir.

    Resolver evidence
    NS 600 / glue 300 / answer 120
    Classification gate
    Secondary EXPIRE ≠ cache TTL
    Application interpretation
    Glue bootstrap; child answer ayrı

VARSAYIM · SINIR · KONTROL

Kırılan varsayım: yokluk bütün type’lara taşınır

AAAA NODATA’yı name-level NXDOMAIN gibi yorumlayan uygulama, mevcut A verisini de yok sayabilir. Gerekli koşul, negative sonucun type kapsamının kaybolmasıdır; ağda özel bir işlem gerektirmez. Etki yanlış fallback veya meşru erişimin reddidir.

Kontrol sınırı negative cache key ve sonuç sınıflandırmasıdır. Artifact’te iki anahtar ailesinin ayrı durması, bir cevabın neyi kanıtlamadığını da gösterir.

Kırılan varsayım: referral final cevaptır

NS target veya glue adresini uygulamanın aradığı host adresi diye taşımak authority geçişini siler. Parent’taki nameserver adresi child verisine ulaşmak içindir; notların server adresini kanıtlamaz. Parent/child uyumsuzluğu çözümlemeyi kesebilir.

Savunma burada referral ile answer’ı ayrı veri türü olarak ele almak, değişiklikte parent NS, gerekli glue ve child authority tutarlılığını incelemektir. Bu ders dış hedefte delegation keşfi yaptırmaz.

Kırılan varsayım: cevap varsa refresh başarılıdır

Serve-stale fallback availability sağlar fakat adresin hâlâ güncel olduğunu kanıtlamaz. Gerekli koşullar expired verinin tutulması, refresh yapılamaması ve izin veren policy’dir. Bu ayrım kaybolursa taşınmış servis için eski endpoint kullanımı gizlenebilir.

İzlenen kontrol fresh/stale sınıflandırması ve refresh sonucudur. Secondary zone EXPIRE için aynı fallback’i varsaymak farklı mekanizmaları karıştırır; bu örnek recursive positive fallback ile sınırlıdır.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

TTL eşitliği

  1. Clock’un anlamı açıklandı

    clock.kind=synthetic-relative-time ve unit=seconds’tır. receivedAt=0 bu seçilmiş cache örneğinin başlangıcıdır; gerçek wall clock veya distributed ordering iddiası değildir.

    Timer evidence
    Relative seconds / start 0
    Lifetime calculation
    Calculation yok
    Regression review
    Review yok
  2. Equality branch’i hesaplandı

    120 saniyelik TTL için t=119 anında bir saniye kalır ve entry fresh’tir. t=120 anında remaining sıfıra iner; equality’de fresh değildir. Remaining değeri sıfırın altına düşmez, fakat sıfır olması yeniden kullanılabilir freshness sağlamaz.

    Timer evidence
    Relative seconds / start 0
    Lifetime calculation
    TTL equality → not fresh
    Regression review
    Review yok
  3. Başarılı eşit SERIAL check ayrıdır

    t=3600 anındaki check aynı SERIAL değerini, 2026100801, bulur. Transfer gerekmez; yine de check başarılıdır. Son başarılı check zamanı 3600 olarak güncellenir ve sonraki refresh 7200 için planlanır.

    Timer evidence
    Equal serial / check successful
    Lifetime calculation
    TTL equality → not fresh
    Regression review
    Review yok
  4. Negative key scope hesaplandı

    NXDOMAIN name ve class kapsamında tutulur; NODATA’ya requested type da eklenir. İkisinin seçilmiş TTL hesabı min(300, 60) ile 60 saniyedir. t=59 fresh, t=60 ise expired’dır; type-specific yokluk name-wide yokluğa genişletilmez.

    Timer evidence
    Equal serial / check successful
    Lifetime calculation
    NXDOMAIN vs NODATA / t=60
    Regression review
    Review yok
  5. Refresh kanıtı cevapla değiştirilmedi

    Stale fallback refreshAttemptOutcome=unable-to-authoritatively-refresh ile birlikte okunur. Cevap alındı gözlemi authoritative refresh başarı kanıtı değildir; eksik outcome varsa UNKNOWN kalır.

    Timer evidence
    Equal serial / check successful
    Lifetime calculation
    NXDOMAIN vs NODATA / t=60
    Regression review
    Reply ≠ successful refresh
  6. Regression bağımsız gate’leri korudu

    Positive/negative equality, secondary equal-SERIAL success ve expiry, glue/answer lifetimes ayrı kontrol edilir. Local arithmetic gerçek cache eviction, resolver veya secondary transfer davranışı kanıtı değildir.

    Timer evidence
    Equal serial / check successful
    Lifetime calculation
    NXDOMAIN vs NODATA / t=60
    Regression review
    Timer kapsamları ayrı; runtime ölçülmedi

Secondary clock

  1. Clock’un anlamı açıklandı

    Secondary modeli lastSuccessfulCheck=0 başlangıcını kullanır; expire=86400 saniye bu kontrolün üzerinden hesaplanır. Bu, recursive cache’in receivedAt saatinden ayrı bir authority yaşam döngüsüdür. Verilen zamanlar gerçek wall clock veya eşzamanlı sunucu ölçümü değildir.

    Timer evidence
    Secondary lastSuccessfulCheck=0
    Lifetime calculation
    Calculation yok
    Regression review
    Review yok
  2. Equality branch’i hesaplandı

    Secondary zone, son başarılı check’ten 86399 saniye sonra hâlâ kullanılabilir. EXPIRE sınırı olan 86400 saniyeye ulaşıldığında bu modelde kullanılmaz. Bu hesap record TTL’ye değil son başarılı check zamanına dayanır.

    Timer evidence
    Secondary lastSuccessfulCheck=0
    Lifetime calculation
    EXPIRE equality → false
    Regression review
    Review yok
  3. Başarılı eşit SERIAL check ayrıdır

    Ayrı equalSerialCheck örneğinde t=3600 kontrolü aynı SERIAL değerini, 2026100801, alır. Transfer gerekmez ama check başarılıdır; lastSuccessfulCheckAfter=3600 ve nextRefreshAt=7200 olur. Önceki expiry karşılaştırması check yapılmayan başlangıç durumuna aittir; iki senaryonun saatlerini tek kayıt gibi birleştirme.

    Timer evidence
    Equal serial / check successful
    Lifetime calculation
    EXPIRE equality → false
    Regression review
    Review yok
  4. Record cache saatiyle karıştırma

    Negative RRset cache’i SOA TTL 300 ve MINIMUM 60 üzerinden 60 saniye kullanır; bu secondary zone EXPIRE süresi değildir. NXDOMAIN name/class, NODATA name/type/class kapsamında kalır. Bu karşılaştırma secondary’nin başarılı check zamanını değiştirmez.

    Timer evidence
    Equal serial / check successful
    Lifetime calculation
    Cache TTL 60 ≠ secondary EXPIRE 86400
    Regression review
    Review yok
  5. Refresh kanıtı cevapla değiştirilmedi

    Stale fallback refreshAttemptOutcome=unable-to-authoritatively-refresh ile birlikte okunur. Cevap alındı gözlemi authoritative refresh başarı kanıtı değildir; eksik outcome varsa UNKNOWN kalır.

    Timer evidence
    Equal serial / check successful
    Lifetime calculation
    Cache TTL 60 ≠ secondary EXPIRE 86400
    Regression review
    Reply ≠ successful refresh
  6. Regression bağımsız gate’leri korudu

    Positive/negative equality, secondary equal-SERIAL success ve expiry, glue/answer lifetimes ayrı kontrol edilir. Local arithmetic gerçek cache eviction, resolver veya secondary transfer davranışı kanıtı değildir.

    Timer evidence
    Equal serial / check successful
    Lifetime calculation
    Cache TTL 60 ≠ secondary EXPIRE 86400
    Regression review
    Timer kapsamları ayrı; runtime ölçülmedi

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Cache kararını yeniden hesapla

Artifact’in receivedTtl ve elapsed alanlarından remaining=max(0,TTL−elapsed) hesapla. 119, 120 ve 150 sınırlarında fresh dalını seçmeden önce elapsed<TTL koşulunu kontrol et. Negative entry’de min(SOA TTL,MINIMUM) ve doğru anahtar ailesini uygula.

Bu bir yerel hesaplama alıştırmasıdır; JSON gerçek resolver’a gönderilmez. Saat ilerlemesini, cache lookup’ı ve cevabın client’a ulaşmasını üç ayrı olay olarak açıklayabilmek başarı ölçütüdür.

Authority ve timer için ayrı kanıt tut

Bir değişiklik kaydında RR owner/type, parent zone, child zone, NS target ve gerekli glue alanlarını ayır. Cevap cache’ten mi authority’den mi geldi; seçilmiş örnekte yaşı kaç; stale policy kullanıldı mı sorularına ayrı cevap ver.

Secondary için SERIAL kontrolünün başarısı, son başarılı kontrol zamanı ve EXPIRE hesabı gerekir. SERIAL eşitliğini “kontrol yapılmadı” diye yorumlama; başarılı eşit kontrol tazelik takvimini yenileyebilir.

Sınırları regression vakasına çevir

Positive TTL equality, negative TTL equality, type-specific NODATA, farklı parent/child verisi ve izinli stale fallback ayrı vakalardır. TTL=0 kaydın sonradan retained stale olarak kullanılamaması da ayrı kontrol olmalıdır.

Scene query ve cevap arrival’larını çizer; secondary transfer, DNSSEC proof, gerçek zamanlayıcı veya cache eviction algoritması çalıştırmaz. Bu alanlar için inert örnekten gerçek ürün davranışı sonucu çıkarma.

ŞİMDİ VAKAYA UYGULA

Cache fallback, authority bootstrap ve secondary lifetime neyi ayrı kanıtlar?

notes.lab.example.org. A kaydının cache lifetime’ı 120 saniyedir. t=150 anında stale fallback kullanılsa bile kayıt fresh sayılmaz. Glue adresi 192.0.2.54, child authority’ye ulaşmak içindir; aranan host’un cevabı değildir.

Bir DNS cevabı, vakadaki doğru kitap sonucunu tek başına kanıtlar mı? Name resolution bilgisinin nerede bittiğini, HTTP ve application gözlemlerinin nerede başladığını ayır.

Bağlı vaka dosyasını aç ↗

ÖRNEĞİ BİRLİKTE OKUYALIM

Üç saat, iki authority: cache/delegation ledger

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "clock": {
    "unit": "seconds",
    "receivedAt": 0,
    "kind": "synthetic-relative-time"
  },
  "positive": {
    "qname": "notes.lab.example.org.",
    "qtype": "A",
    "qclass": "IN",
    "address": "198.51.100.210",
    "receivedTtl": 120,
    "evaluations": [
      {
        "elapsed": 30,
        "remaining": 90,
        "fresh": true
      },
      {
        "elapsed": 119,
        "remaining": 1,
        "fresh": true
      },
      {
        "elapsed": 120,
        "remaining": 0,
        "fresh": false
      },
      {
        "elapsed": 150,
        "remaining": 0,
        "fresh": false
      }
    ]
  },
  "negative": [
    {
      "kind": "NXDOMAIN",
      "qname": "missing.lab.example.org.",
      "qclass": "IN",
      "cacheKeyFields": [
        "qname",
        "qclass"
      ],
      "soaTtl": 300,
      "soaMinimum": 60,
      "selectedTtl": 60
    },
    {
      "kind": "NODATA",
      "qname": "v4only.lab.example.org.",
      "qtype": "AAAA",
      "qclass": "IN",
      "cacheKeyFields": [
        "qname",
        "qtype",
        "qclass"
      ],
      "existingA": "198.51.100.211",
      "soaTtl": 300,
      "soaMinimum": 60,
      "selectedTtl": 60
    }
  ],
  "negativeEvaluations": [
    {
      "elapsed": 59,
      "remaining": 1,
      "fresh": true
    },
    {
      "elapsed": 60,
      "remaining": 0,
      "fresh": false
    }
  ],
  "delegation": {
    "parentZone": "example.org.",
    "childZone": "lab.example.org.",
    "parentNs": {
      "owner": "lab.example.org.",
      "target": "ns1.lab.example.org."
    },
    "glue": {
      "owner": "ns1.lab.example.org.",
      "address": "192.0.2.54",
      "role": "bootstrap-address-not-child-answer"
    },
    "childNs": {
      "owner": "lab.example.org.",
      "target": "ns1.lab.example.org."
    },
    "childAnswer": {
      "owner": "notes.lab.example.org.",
      "type": "A",
      "address": "198.51.100.210",
      "ttl": 120
    },
    "rootAndTld": "omitted-known-parent-context"
  },
  "secondary": {
    "refresh": 3600,
    "retry": 600,
    "expire": 86400,
    "lastSuccessfulCheck": 0,
    "serial": 2026100801,
    "evaluations": [
      {
        "elapsed": 86399,
        "zoneUsable": true
      },
      {
        "elapsed": 86400,
        "zoneUsable": false
      }
    ],
    "equalSerialCheck": {
      "at": 3600,
      "receivedSerial": 2026100801,
      "transferNeeded": false,
      "lastSuccessfulCheckAfter": 3600,
      "nextRefreshAt": 7200
    }
  },
  "serveStale": {
    "enabled": true,
    "retainedPositive": true,
    "elapsed": 150,
    "receivedTtl": 120,
    "refreshAttemptOutcome": "unable-to-authoritatively-refresh",
    "returnedTtl": 30,
    "fresh": false,
    "classification": "stale-fallback",
    "zeroTtlEligible": false,
    "negativeFallbackModeled": false
  },
  "independentLifetimes": {
    "delegationNsTtl": 600,
    "glueAddressTtl": 300,
    "answerTtl": 120,
    "meaning": "selected-independent-RRset-lifetimes-not-global-propagation-timer"
  }
}
positive.evaluations
Alınmış positive RRset için elapsed, remaining ve equality sınırındaki fresh kararı.
negative.cacheKeyFields
NXDOMAIN name/class; NODATA name/type/class kapsamı.
delegation
Parent referral, bootstrap glue ve child answer’ın ayrı rolleri.
secondary
Authoritative secondary zone timer’ları; recursive TTL değil.
serveStale
Yalnız seçilen positive fallback: fresh=false, cevap TTL=30.

Zamanlar, SERIAL ve adresler özgün sentetik veridir. RRset özetleri tam DNS packet veya zone file değildir; DNSSEC, gerçek clock, transfer, cache policy implementation ve negative stale fallback çalıştırılmaz.

İki yanlış kanı

TTL dolduysa eski veri hiçbir koşulda kullanılamaz.

Sıradan fresh dalı biter; RFC 8767 belirli refresh başarısızlığı ve retention/policy koşullarında stale kullanıma izin verir. TTL=0 bu depoya girmez.

SOA EXPIRE ile recursive cevap TTL’i aynı sayaçtır.

EXPIRE secondary zone kopyasının güncellik sınırıdır; received RRset TTL’i recursive cache kapsamındadır. Başarılı eşit SERIAL kontrolü ilkini yenileyebilir.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

Positive entry receivedTtl=120; elapsed=120. Entry hâlâ fresh mi?

  1. Hayır. remaining=0; fresh=false.
  2. Evet. Yalnız elapsed>120 olduğunda expire olur.
Gerekçeli cevabı oku

Hayır. remaining=0; fresh=false. — TTL tüketilmiştir. Eşitlik bir ek saniye freshness sağlamaz.

Glue address ile notes address aynı bilgi mi?

Dersten seçilen artifact alanları; öğretim örneği

delegation.glue
{"owner":"ns1.lab.example.org.","address":"192.0.2.54","role":"bootstrap-address-not-child-answer"}
delegation.childAnswer
{"owner":"notes.lab.example.org.","type":"A","address":"198.51.100.210","ttl":120}
  1. Hayır. Glue authority’ye ulaştırır; child answer notes için address verir.
  2. Glue 192.0.2.54 kitap resource’unun final IP’sidir.
Gerekçeli cevabı oku

Hayır. Glue authority’ye ulaştırır; child answer notes için address verir. — Glue, ns1.lab için 192.0.2.54; notes A cevabı ise 198.51.100.210.

Serve-stale branch’i elapsed=150 iken eski positive answer döndürüyor. Neden TTL freshness ve secondary SOA expire aynı saat değil?

Gerekçeli cevabı oku

120 saniyelik entry artık fresh değildir. Refresh başarısızken etkin stale policy sınırlı fallback sağlar. Secondary expire ise son başarılı authority kontrolünden beri zone’un kullanılabilirliğini belirler; answer TTL yerine geçmez. Dönen TTL’nin 30 olması eski entry’nin fresh olduğunu kanıtlamaz.

□ Stale fallback’u fresh cache hit saymadım.

□ SOA expire ile RRset TTL’yi ayırdım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam