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.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Fresh positive hit
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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ı
- 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
- 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
- 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ı
- 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ı
- 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ı
- 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ı
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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?
- Hayır. remaining=0; fresh=false.
- 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}
- Hayır. Glue authority’ye ulaştırır; child answer notes için address verir.
- 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
- RFC 1034 — Domain Names: Concepts and Facilities4.2.1 Technical considerations; 4.2.2 Administrative considerations · 4.3.5 Zone maintenance and transfers
- RFC 1035 — Domain Names: Implementation and Specification3.2.1 Format; 3.3.13 SOA RDATA format · 4.1.3 Resource record format
- RFC 2308 — Negative Caching of DNS Queries3 Negative answers from authoritative servers · 4 SOA Minimum Field; 5 Caching Negative Answers; 6 Negative answers from the cache
- RFC 8767 — Serving Stale Data to Improve DNS Resiliency4 Standards Action · 5 Example Method; 6 Implementation Considerations; 7 Implementation Caveats
- RFC 9499 — DNS Terminology7 Zones; delegation, zone cut, glue · 9 Registration model; registrar and DNS operator
- RFC 2606 — Reserved Top Level DNS Names3 Reserved Example Second Level Domain Names
- RFC 5737 — IPv4 Address Blocks Reserved for Documentation3 Documentation Address Blocks