WEB / WEB-04.04
QUIC’in transport modeli
QUIC v1’in UDP, TLS ve stream rollerini; packet recovery ile application outcome sınırını birlikte oku.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Crypto handshake
- QUIC v1 başlangıç context’i
ClientHello Initial CRYPTO olarak hazırlanmış seçilir; identity henüz doğrulanmış değildir.
- Client transport
- Initial ready; TLS complete=false; confirmed=false
- Server transport
- awaiting Initial; TLS complete=false; confirmed=false
- Initial flight server’a ulaştı
Server ClientHello/transport context’i aldı; Initial protection peer-secret confidentiality değildir.
- Client transport
- Initial ready; TLS complete=false; confirmed=false
- Server transport
- Initial received; TLS complete=false; confirmed=false
- Local server crypto flight
Server kendi Finished dahil selected response flight’ını gönderime hazırlar. Peer Finished henüz yok.
- Client transport
- Initial ready; TLS complete=false; confirmed=false
- Server transport
- server Finished emitted; awaiting client Finished; TLS complete=false; confirmed=false
- Server crypto flight client’ta
Initial/Handshake response özeti alındı; örnekte server identity ve Finished doğrulanır. Client’ın kendi Finished’ini göndermesi ayrı bir koşuldur.
- Client transport
- peer Finished verified; own Finished pending; TLS complete=false; confirmed=false
- Server transport
- server Finished emitted; awaiting client Finished; TLS complete=false; confirmed=false
- Local Finished emission
Client TLS kendi Finished’ini göndermeye verdi ve local completion bildirdi; server arrival’ı henüz yok.
- Client transport
- own Finished emitted; TLS complete=true; confirmed=false
- Server transport
- server Finished emitted; awaiting client Finished; TLS complete=false; confirmed=false
- Client Finished server’da
Server peer Finished’i doğruladı; TLS complete ve server confirmed=true.
- Client transport
- own Finished emitted; TLS complete=true; confirmed=false
- Server transport
- peer Finished verified; TLS complete=true; confirmed=true
- Local HANDSHAKE_DONE hazırlığı
Completion sonrası server 1-RTT HANDSHAKE_DONE hazırlar; client henüz confirmation almadı.
- Client transport
- own Finished emitted; TLS complete=true; confirmed=false
- Server transport
- confirmed=true; 1-RTT HANDSHAKE_DONE prepared
- HANDSHAKE_DONE client’ta
Client seçilmiş confirmation yolunu tamamladı. HTTP request veya application authorization bu sahnede yok.
- Client transport
- TLS complete=true; confirmed=true; app outcome unmodeled
- Server transport
- confirmed=true; 1-RTT HANDSHAKE_DONE prepared
Stream gap
- Established 1-RTT context
İki uç confirmed durumundadır. Client, stream 0 için PN10 ile NO göndermiştir ama varışı gözlenmemiştir. Ayrıca PN11’de stream 0 offset 2 için TES, PN12’de stream 4 offset 0 için OK hazırdır; receiver henüz bu byte’ları bilmiyor.
- Client transport
- 1-RTT confirmed; PN10 unacknowledged; PN11/12 ready
- Server transport
- 1-RTT confirmed; stream0 empty; stream4 empty
- PN11 / stream0 offset2 geldi
TES range tutulur; stream0 offset0 gap nedeniyle contiguous prefix boş.
- Client transport
- 1-RTT confirmed; PN10 unacknowledged; PN11/12 ready
- Server transport
- PN11 received; s0 held[2,5); s0 prefix empty; s4 empty
- Local stream0 read gate
Stream0 ordered data henüz application’a hazır değil; bu local bekleme diğer stream’i zorunlu durdurmaz.
- Client transport
- 1-RTT confirmed; PN10 unacknowledged; PN11/12 ready
- Server transport
- s0 gap blocks local read; held[2,5); s4 empty
- PN12 / stream4 offset0 geldi
OK stream4’te contiguous olur, stream0 gap’i sürer.
- Client transport
- 1-RTT confirmed; PN10 unacknowledged; PN11/12 ready
- Server transport
- PN12 received; s4 prefix OK; s0 gap; held[2,5)
- Local stream4 tüketimi
Application stream4 OK’yi tüketir; stream0 ordered prefix hâlâ yok.
- Client transport
- 1-RTT confirmed; PN10 unacknowledged; PN11/12 ready
- Server transport
- s4 app read OK; s0 gap; ACK range[11,12] prepared
- Packet-range ACK arrival
Client PN11–12 alındığını öğrendi; bu PN10 veya business completion ACK’i değildir.
- Client transport
- ACK range[11,12] received; PN10 unacknowledged
- Server transport
- s4 app read OK; s0 gap; ACK range[11,12] prepared
- Local time-threshold recovery
Geçen süre 100 ms, threshold 90 ms’den büyüktür ve daha sonraki PN acknowledge edilmiştir. Bu koşullar PN10 için lost kararı verir; gereken NO bilgisi yeni PN13’e konur.
- Client transport
- PN10 declared lost by selected time threshold; PN13 s0@0 NO prepared
- Server transport
- s4 app read OK; s0 gap; ACK range[11,12] prepared
- PN13 information arrival
Offset0 NO gap’i kapatır; stream0 prefix NOTES olur. Yeni packet number eski stream byte’larına yeni offset üretmez. Sonraki ACK model dışında.
- Client transport
- PN10 declared lost by selected time threshold; PN13 s0@0 NO prepared
- Server transport
- PN13 received; s0 prefix NOTES; s0 app unread; s4 consumed OK
PTO probe
- PTO context
Confirmed connection’da PN20 unacknowledged seçilir; loss henüz ilan edilmez.
- Client transport
- 1-RTT confirmed; PN20 unacknowledged
- Server transport
- 1-RTT confirmed; no probe received
- Local PTO expiry
PTO yeni ack-eliciting probe arar; PN20’yi otomatik lost saymaz. Seçilmiş PN21 PING hazırlanır.
- Client transport
- PTO selected; PN21 PING prepared; PN20 fate unknown
- Server transport
- 1-RTT confirmed; no probe received
- Probe arrival
Yeni PN21 PING receiver’a geldi; application data yok.
- Client transport
- PTO selected; PN21 PING prepared; PN20 fate unknown
- Server transport
- PN21 PING received; ACK21 prepared
- Probe ACK arrival
Client PN21 bilgisini aldı; PN20 veya application işi için sonuç üretilmez.
- Client transport
- ACK21 received; PN20 fate remains unknown; app outcome unmodeled
- Server transport
- PN21 PING received; ACK21 prepared
Early-data kararı
- Resumption context seçilmiş
Önceki context early data ihtimalini açar; application policy henüz değerlendirilmedi.
- Client transport
- prior context selected; change-setting pending
- Server transport
- no early-data request received
- Local operation sınıfı
Tekrarlandığında istenmeyen etki koşulu seçilmiştir; network request gönderilmez.
- Client transport
- change-setting repetition-sensitive; early policy pending
- Server transport
- no early-data request received
- Local early-data deny
Policy, bu işi 0-RTT için uygun bulmaz; işlemi 1-RTT application aşamasına erteler. Henüz işi yapan request gönderilmez.
- Client transport
- 0-RTT disallowed for operation; deferred to ordinary phase
- Server transport
- no early-data request received
- Ayrı uygulama sonucu gerekir
Erteleme başarılmış iş veya replay üretmez. 1-RTT sonrası transaction/retry semantics yine ayrı gerekir.
- Client transport
- request not sent; no business outcome; retry semantics separate
- Server transport
- no early-data request received
ROLLER · STATE · VERİ AKIŞI
QUIC, UDP’nin üzerinde kendi transport’unu kurar
QUIC v1 UDP datagram’larını carrier olarak kullanır fakat UDP’ye reliability eklenmiş basit bir socket etiketi değildir. Connection context, stream multiplexing, flow/loss/congestion control ve packet protection QUIC mekanizmalarıdır. UDP header port’ları taşır; QUIC bu payload’un içinde kendi packet/frame modelini kurar.
TCP ile TLS-over-TCP modelinde TCP ordered stream’i, TLS record katmanı güvenli aktarımı sağlar. QUIC TLS 1.3 handshake’ini authentication ve key negotiation için kullanır; TLS record’larını aynen bir QUIC stream’ine koymak yerine QUIC packet protection sorumluluğunu üstlenir. “TLS yerine QUIC” veya “TCP’nin üstüne QUIC” ifadeleri bu rolleri yanlış kurar.
Handshake complete ile confirmed ayrı peer bilgisidir
Normal sahne Initial ve Handshake CRYPTO mesajlarını aggregated flight özetiyle gösterir; gerçek packet sayısı, padding veya tam TLS message encoding’i değildir. Client server flight’ını alınca selected identity/Finished doğrulamasını yapar; kendi Finished’i de gönderildiğinde TLS completion bildirilir. Server client Finished’i alınca completion/confirmation kazanır.
Client için seçilmiş confirmation, server’ın 1-RTT HANDSHAKE_DONE frame’ini almakla olur. Server bunu completion’dan önce göndermez. Client’ın bir kendi 1-RTT packet’inin ACK’inden confirmation çıkarması başka izinli yoldur, bu sahnede seçilmemiştir. Initial packet protection’ın herkesçe türetilebilen başlangıç bilgisi gerçek peer-secret confidentiality sözü değildir; güçlü Handshake/1-RTT protection ile eşitleme.
Packet number, stream offset değildir
Artifact’in PN10 packet’i stream0 offset0’da NO; PN11 aynı stream’in offset2’sinde TES; PN12 stream4 offset0’da OK taşır. Packet number belirli packet-number space içindeki transmission’ı, offset ise belirli stream’deki byte yerini anlatır. Initial, Handshake ve Application Data space’leri ayrıdır; aynı küçük sayı farklı space’lerde aynı olay değildir.
PN10 arrival’ı görünmezken PN11 receiver’da tutulur ve stream0 ordered prefix’i boş kalır. PN12 gelince stream4 OK verisi ilerleyebilir; stream0’daki gap bunu transport seviyesinde zorunlu olarak durdurmaz. Her stream kendi içinde ordered’dır, farklı stream’lerin byte’ları arasında QUIC bir sıra garantisi vermez. 0 ve 4 burada client-initiated bidirectional stream ID’leridir.
Loss recovery bilgi taşır; eski packet’i kopyalamaz
ACK frame, alınan packet range’lerini bildirir; PN11–12’nin ACK’i PN10’u kabul etmiş sayılmaz. RFC 9002 time-threshold örneğinde daha büyük PN12 acknowledge edilmiştir. RTT 80 ms ve 9/8 çarpanı threshold’u 90 ms yapar; geçen 100 ms bu sınırı aşar. Sender PN10’u lost ilan eder ve gereken stream byte’larını yeni PN13 packet’inde offset 0’dan taşır.
Bütün eski packet/frame byte’ları bire bir yeniden gönderilmez; gereken information yeni frame/packet’lere konur. PTO ise tek başına packet loss ilanı değildir: ack-eliciting probe gönderip yeni bilgi arar. Ayrı PTO dalında PN20’nin fate’i bilinmiyor kalır ve yeni PN21 PING/ACK exchange’i seçilir. Bunlar gerçek clock, recovery implementation veya kayıp nedenini ölçmez.
Bağımsız stream, sınırsız bağımsız kaynak demek değildir
QUIC receiver hem stream hem connection flow-control limit’leri bildirir. Örnekte stream0 limit5, stream4 limit2, connection MAX_DATA7’dir; final offset toplamı 5+2=7. Aynı stream offset’lerinin recovery’si flow credit’i ikinci kez tüketmez. Congestion ve wire byte yükü yine dikkate alınır; bu, retransmission’ın bedelsiz olduğu anlamına gelmez.
Stream4 gap’ten bağımsız ilerlese de connection congestion/flow bütçesi, CPU ve application bağımlılıkları paylaşılabilir. HTTP/3 header compression bağımlılıkları da üst katmanda bekleme yaratabilir. Sahnedeki küçük stream örneği “QUIC’te hiçbir head-of-line blocking yok” veya her request her koşulda hızlıdır sonucunu vermez.
Web’de kazanım, multiplexing’i transport’a görünür kılmaktır
HTTP/2 application stream’leri tek TCP byte stream’i üzerinden multiplex eder; TCP için bu farklı request sınırları görünmez. Eksik TCP byte aralığı o connection’ın ilerleyen ordered teslimini bekletebilir. HTTP/3 aynı HTTP semantics’i QUIC’e map eder; QUIC stream’leri loss recovery’nin kapsamına görünür hale gelir.
Integrated crypto/transport handshake ve connection ID ile path değişimine uygun mimari de motivasyonlardır; bu derste migration/path validation çalıştırılmaz. Kazanç ağ koşulu, server/client desteği ve application bağımlılıklarına bağlıdır. UDP/HTTP3 yolu kullanılamadığında client başka desteklenen HTTP transport’una dönebilir; sürüm seçimi otomatik evrensel performans garantisi değildir.
0-RTT erken data’dır; once-only işlem sözü değildir
Önceki resumption context’i varsa client bazı application verisini yeni handshake tamamlanmadan gönderebilir; server bunu kabul etmek zorunda değildir. 0-RTT replay riski özellikle application side effect’leri için değerlendirilir. QUIC transport state’inin frame duplicate işlemesi, application’ın business işini bir kez yapmasını otomatik sağlamaz.
Örnekteki local policy, change-setting işlemi tekrarlandığında istenmeyen etki doğabileceğini belirler. Bu yüzden early data’ya izin vermez; işlemi 1-RTT application aşamasına erteler. Burada gerçek request veya replay üretilmez. 1-RTT’ye ertelemek early-data riskini azaltır; application-level retry, transaction ve idempotency kararları ayrıca gerekir.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
ACK scope
- Packet ranges stream offset’lerden ayrıldı
ApplicationData ACK range 11–12 inclusive’dır; PN10 acknowledged false kalır. PN11 stream 0 offset 2’de TES taşır. ACK’in büyük packet number’ı göstermesi daha önceki stream prefix’ini tamamlamaz.
- Packet/policy ledger
- ACK11–12 / PN10 not acknowledged
- Transport/action gate
- Gate bekliyor
- Business boundary
- Hüküm yok
- Gap varken stream acceptance bekledi
Stream 0 prefix’i boş, held range [2,5) olur. TES alınmıştır fakat NO eksiktir. Packet receipt ile contiguous stream bytes aynı state değildir; bu bekleme malformed input veya application deny olarak yorumlanmaz.
- Packet/policy ledger
- ACK11–12 / PN10 not acknowledged
- Transport/action gate
- Stream0 prefix empty / held [2,5)
- Business boundary
- Hüküm yok
- ACK application processing’e yükseltilmedi
businessCompletionProven false’tur. ACK, transport receipt bilgisi sağlar; application read, persistence veya user setting değişimini kanıtlamaz. Resource permission da packet protection veya stream ID’den çıkarılmaz.
- Packet/policy ledger
- ACK11–12 / PN10 not acknowledged
- Transport/action gate
- Stream0 prefix empty / held [2,5)
- Business boundary
- Packet receipt known / business outcome unknown
- Information recovery yeni PN ile gösterildi
PN13 offset 0’da NO taşır ve PN10 information’ını recover eder. Packet number yeniden kullanılmaz; aynı stream offset’teki bytes tekrar taşınır. PN13 ACK’i bu branch’in kapsamı dışındadır.
- Packet/policy ledger
- New PN13 / existing offset0 NO
- Transport/action gate
- Stream0 prefix empty / held [2,5)
- Business boundary
- Packet receipt known / business outcome unknown
- Prefix tamamlanınca flow accounting ayrı kaldı
NO ve TES birleşince stream 0 NOTES olur; stream 4 OK kalır. Existing offset recovery yeni flow credit tüketmez. Unique final offsets 5+2=7’dir; connection credit hesabı transmission byte toplamı değildir.
- Packet/policy ledger
- New PN13 / existing offset0 NO
- Transport/action gate
- Stream0 NOTES / unique offsets sum7
- Business boundary
- Packet receipt known / business outcome unknown
- Transport sonucu business hükmü olmadan kapandı
Contiguous content bu ledger’da kurulmuştur. Gerçek QUIC, crypto, certificate veya application işleme çalıştırılmaz. Independent stream progress, shared congestion/credit ve application dependencies’i kaldırmaz.
- Packet/policy ledger
- New PN13 / existing offset0 NO
- Transport/action gate
- Stream0 NOTES / unique offsets sum7
- Business boundary
- Stream prefix complete / business unmeasured
Early action
- Operation’ın repeated effect’i policy input’u oldu
change-setting tekrarlandığında unwanted effects oluşabileceği verilmiştir. Prior resumption context bulunması bu işi early data’ya uygun yapmaz. Operation semantics, transport encryption’dan ayrı değerlendirilir.
- Packet/policy ledger
- change-setting / repeated effects unwanted
- Transport/action gate
- Gate bekliyor
- Business boundary
- Hüküm yok
- Early gate hassas işi erteledi
permittedInEarlyData false’tur; deferUntil normal seçilmiş 1-RTT application phase’idir. actual0RTTRequestSent false kalır. Local policy kararı, request’in gönderildiğini veya başarıyla uygulandığını göstermez.
- Packet/policy ledger
- change-setting / repeated effects unwanted
- Transport/action gate
- Early action withheld / no 0-RTT request sent
- Business boundary
- Hüküm yok
- Şifreleme once-only garantisi sayılmadı
replayProtectionPerfect false ve oneRttGuaranteesBusinessOnceOnly false’tur. Erteleme early risk scope’unu daraltır; business idempotency ve current authorization yine gerekir. Normal phase tek başına exactly-once vaat etmez.
- Packet/policy ledger
- change-setting / repeated effects unwanted
- Transport/action gate
- Early action withheld / no 0-RTT request sent
- Business boundary
- Deferred / business once-only not guaranteed
- Crypto phase’lerin güven koşulları ayrıldı
Initial protection peer-secret confidentiality sağlamaz. Handshake ve 1-RTT negotiated protection farklı context’lerdir. Encrypted packet label’ını doğrulanmış service identity veya application grant diye okumak yanlış boundary kurar.
- Packet/policy ledger
- Initial ≠ negotiated peer-secret protection
- Transport/action gate
- Early action withheld / no 0-RTT request sent
- Business boundary
- Deferred / business once-only not guaranteed
- Completion ve confirmation endpoint’e göre ayrıldı
Client TLS completion peer Finished verification ve kendi Finished mesajının gönderilmiş olması koşullarını ister. Seçilmiş client confirmation HANDSHAKE_DONE arrival’ıdır; server confirmation kendi TLS completion’ında oluşur. Bu semantic şartlar crypto execution değildir.
- Packet/policy ledger
- Initial ≠ negotiated peer-secret protection
- Transport/action gate
- Endpoint-local completion / selected confirmation separate
- Business boundary
- Deferred / business once-only not guaranteed
- Action sonucu bilinmeyen olarak korundu
Bu review early operation’ı erteleyen policy ve phase koşullarını gösterir. Request, replay veya business mutation çalıştırılmaz. Current user/resource policy ile gerçek application result, normal phase’te ayrıca kanıtlanmalıdır.
- Packet/policy ledger
- Initial ≠ negotiated peer-secret protection
- Transport/action gate
- Endpoint-local completion / selected confirmation separate
- Business boundary
- Policy defers / actual action outcome unknown
VARSAYIM · SINIR · KONTROL
Kırılan varsayım: PN ACK application delivery’dir
QUIC packet ACK’i stream’in tüm önceki offset’lerinin contiguous veya uygulamaca işlenmiş olduğunu kanıtlamaz. Gap içeren stream, ACK edilmiş sonraki packet’lere rağmen bekleyebilir.
Kontrol packet receipt, stream prefix ve business outcome kanıtlarını ayırmaktır. PN11–12 ACK’i, stream0 boşluğunu kapatmaz.
Kırılan varsayım: her encrypted QUIC packet aynı güven düzeyindedir
Initial protection ile negotiated Handshake/1-RTT protection’ı aynı confidentiality koşulu saymak doğrulanmış peer state’ini yanlış erkene taşır. TLS completion ve QUIC confirmation farklı endpoint bilgisi taşır.
Kontrol encryption level, packet-number space ve verification/confirmation durumunu açık tutmaktır. Wire’da güçlü koruma application resource yetkisini kendi başına vermez.
Kırılan varsayım: early data side effect’leri bir kez yapar
0-RTT içinde repeated effect’e hassas işlem kabul etmek replay riskini application katmanına taşır. Gerekli koşul operation’ın tekrarında istenmeyen etki ve izin veren early-data policy’dir.
Kontrol replay-safe scope’u tanımlamak, uygun olmayan işi ertelemek veya early data’yı kapatmaktır. Şifreleme tek başına business idempotency sağlamaz.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Offset ledger
- İki numbering family kendi sütununda tutuldu
PN11 stream 0 offset 2, PN12 stream 4 offset 0, PN13 stream 0 offset 0 taşır. Packet number connection space’e, offset stream’e aittir. PN sırasını string concatenation sırası yapmak yanlış content üretir.
- Packet/timer record
- PN11:S0@2 / PN12:S4@0 / PN13:S0@0
- Recovery comparison
- Gate bekliyor
- Evidence verdict
- Hüküm yok
- Stream prefix ledger bağımsız yeniden kuruldu
PN11 sonrasında stream 0 prefix’i boştur; PN12 sonrasında stream 4’te OK vardır. PN13, stream 0’daki gap’i kapatıp NOTES byte’larını tamamlar. Stream 4’ün byte sırası stream 0’daki gap’e bağlı değildir; ortak connection sınırları yine geçerlidir.
- Packet/timer record
- PN11:S0@2 / PN12:S4@0 / PN13:S0@0
- Recovery comparison
- Prefixes: S0 NOTES / S4 OK
- Evidence verdict
- Hüküm yok
- ACK range scope’u stream bytes’tan ayrıldı
inclusivePacketRanges [11,12], PN11 ve PN12 receipt’ini bildirir; PN10’u içermez. Stream 0 completion’ı bu range’den çıkarmak yerine offset ledger’a bakılır. ApplicationData space başka packet spaces ile karıştırılmaz.
- Packet/timer record
- ACK receipt only / space ApplicationData
- Recovery comparison
- Prefixes: S0 NOTES / S4 OK
- Evidence verdict
- Hüküm yok
- Flow credit unique information üzerinden hesaplandı
Final offsets stream 0 için 5 ve stream 4 için 2’dir; sumUniqueFinalOffsets 7 olur. PN13 recovery aynı offset information’ını taşır. Duplicate transmission yeni unique flow data olarak sayılmaz.
- Packet/timer record
- ACK receipt only / space ApplicationData
- Recovery comparison
- Unique final offsets 5+2=7
- Evidence verdict
- Hüküm yok
- Local reconstruction wire capture sayılmadı
Bu semantic packet summaries için prefix ve accounting tutarlıdır. Wire encoding, cryptographic verification veya gerçek delivery ölçülmez. Connection alias gerçek wire ID değildir; mapping yalnız bu record scope’undadır.
- Packet/timer record
- ACK receipt only / space ApplicationData
- Recovery comparison
- Unique final offsets 5+2=7
- Evidence verdict
- Ledger consistent / QUIC runtime unmeasured
- Business outcome için yeni evidence gerekti
Transport receipt için QUIC endpoint’inin aynı packet-number space içindeki ACK kaydı; ordered data için ilgili stream’in offset/prefix bilgisi gerekir. Business completion ise application’ın ilişkilendirilebilen sonucu veya commit kaydıyla gösterilir. Birinin alanları diğerinin yerine geçmez.
- Packet/timer record
- ACK receipt only / space ApplicationData
- Recovery comparison
- Unique final offsets 5+2=7
- Evidence verdict
- Needed: scoped application outcome
Loss/PTO scope
- Time-threshold input’ları ölçümden ayrıldı
latestRttMs ve smoothedRttMs 80, granularity 1 verilmiştir. Profile seçilmiş RFC9002 threshold hesabıdır; measured timer değildir. Missing PN10 ve largest acknowledged PN12 aynı ApplicationData context’inde değerlendirilir.
- Packet/timer record
- RTT80/80 / granularity1 / missingPN10
- Recovery comparison
- Gate bekliyor
- Evidence verdict
- Hüküm yok
- Selected loss threshold bağımsız hesaplandı
max(9/8 × max(80,80),1) sonucu 90 ms’dir. Elapsed 100 ms bu threshold’u aşar; selectedDeclaredLost true olur. Bu local classification packet arrival veya gerçek kayıp nedeni değildir.
- Packet/timer record
- RTT80/80 / granularity1 / missingPN10
- Recovery comparison
- Threshold90ms / elapsed100ms / declared lost
- Evidence verdict
- Hüküm yok
- PTO başka context ve event olarak okundu
PTO record original PN20 için probe PN21 ve PING frame’i verir. timeoutSeconds not-computed’dır. Probe gönderimi PN20’yi yalnız PTO nedeniyle lost ilan etmez; priorPnMarkedLostFromPtoAlone false kalır.
- Packet/timer record
- PN21 probe / PTO-alone loss false
- Recovery comparison
- Threshold90ms / elapsed100ms / declared lost
- Evidence verdict
- Hüküm yok
- Probe ACK business işlem sonucu olmadı
probeAckBusinessOutcome false’tur. PING probe progress hakkında transport bilgi verebilir, fakat note persistence veya action completion kanıtı değildir. Timeout, declared loss ve application failure ayrı reason’lar olarak tutulur.
- Packet/timer record
- PN21 probe / PTO-alone loss false
- Recovery comparison
- Probe receipt ≠ business completion
- Evidence verdict
- Hüküm yok
- Missing arrival cause unknown bırakıldı
actualCauseOfMissingArrival not-determined’dır. Seçilmiş threshold’un aşılması cause attribution sağlamaz. Gerçek packet-loss, congestion algorithm veya timing observation bulunmadan ağın nedenini kesinleştirmek bu evidence scope’unu aşar.
- Packet/timer record
- PN21 probe / PTO-alone loss false
- Recovery comparison
- Probe receipt ≠ business completion
- Evidence verdict
- UNKNOWN: cause of missing arrival
- Recovery regression doğru owner’da kaldı
Kayıp kararı incelenirken sender’ın send/ACK zamanı, RTT hesabı ve packet-number space’i birlikte gerekir. PTO probe’unun ACK’i, eski PN20’nin durumunu veya application sonucunu açıklamaz. Bu verilen sayıların karşılaştırmasıdır; gerçek loss recovery, migration veya HTTP/3 işleyişi ölçülmemiştir.
- Packet/timer record
- PN21 probe / PTO-alone loss false
- Recovery comparison
- Probe receipt ≠ business completion
- Evidence verdict
- Recheck threshold/space/offset; runtime separate
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
İki numara ailesini ayrı hesapla
Packet ledger’da PN10/11/12/13 aynı Application Data space’indedir. Stream0 offset0+2 ve offset2+3 ile NOTES; stream4 offset0+2 ile OK kurulur. PN13 yeni transmission olsa da offset0’daki NO aynı information’dır.
Time-threshold örneğini max(9/8×max(80,80),1)=90 ms olarak hesapla. Bu local karar packet arrival değildir; PTO tek başına aynı kararı vermez.
Complete/confirmed sınırını izle
Client peer Finished’i doğrulamış olsa da kendi Finished gönderimi ayrı koşuldur. Server ancak peer Finished geldikten sonra selected completion/confirmation kazanır; client selected HANDSHAKE_DONE arrival’ında confirmed olur.
Sahnenin flight özeti tam TLS/QUIC parser veya certificate kontrolü değildir. Snapshot ownership’i protokol rolünü açıklar; gerçek crypto sonucu üretmez.
Performance ve early policy için koşul yaz
Stream bağımsızlığıyla connection kaynaklarını birlikte değerlendir. MAX_DATA7’ye ulaşılması veya congestion baskısı iki stream’in de yeni veri gönderimini etkileyebilir; üst application bağımlılıkları ayrıca vardır.
Operation’ın replay-safe olup olmadığını business semantics üzerinden belirle. Early policy branch’inin ertelemesi bir request’in başarıyla yapıldığı anlamına gelmez; ordinary phase ve uygulama sonucu ayrıca gerekir.
ŞİMDİ VAKAYA UYGULA
Packet receipt, stream prefix, crypto phase ve business policy nasıl ayrılır?
PN11 TES’i stream 0 offset 2’de taşır; NO eksikken prefix boş kalır. Stream 4 OK ile ilerler, PN13 ise NO information’ını yeni packet number ile recover eder. change-setting işi early data’da kabul edilmez; business outcome ayrıca gerekir.
Vakadaki response’u taşıyan bağlantı ile application sonucu hangi sınırlarda ayrılır? Network ve transport bilgisini body parsing veya DOM başarısı yerine kullanma.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Packet/offset, crypto phase ve early-policy ledger
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"version": "QUIC v1 (RFC9000/9001/9002)",
"carrier": "UDP datagrams",
"addresses": [
"192.0.2.10:54000",
"198.51.100.200:443"
],
"tlsVersion": "TLS 1.3",
"fullCryptoOrHTTP3Implementation": false,
"certificateVerification": "selected-success-condition-not-executed",
"connectionId": "teaching-alias-only-no-wire-ID"
},
"handshake": {
"cryptoFlights": "aggregated semantic arrivals, not one packet per flight",
"clientCompletionCondition": [
"peer Finished verified",
"own Finished sent"
],
"serverCompletionCondition": [
"own Finished sent",
"peer Finished verified"
],
"serverConfirmation": "on server TLS completion",
"clientSelectedConfirmation": "HANDSHAKE_DONE arrival in 1-RTT",
"alternativeClientConfirmation": "optional ACK of client 1-RTT packet; not selected",
"initialPacketsProvidePeerSecretConfidentiality": false
},
"streamPackets": [
{
"pn": 10,
"space": "ApplicationData",
"protection": "1-RTT",
"streamId": 0,
"offset": 0,
"payload": "NO",
"bytes": 2,
"selectedArrival": false
},
{
"pn": 11,
"space": "ApplicationData",
"protection": "1-RTT",
"streamId": 0,
"offset": 2,
"payload": "TES",
"bytes": 3,
"selectedArrival": true
},
{
"pn": 12,
"space": "ApplicationData",
"protection": "1-RTT",
"streamId": 4,
"offset": 0,
"payload": "OK",
"bytes": 2,
"selectedArrival": true
},
{
"pn": 13,
"space": "ApplicationData",
"protection": "1-RTT",
"streamId": 0,
"offset": 0,
"payload": "NO",
"bytes": 2,
"selectedArrival": true,
"informationRecoveryOfPn": 10
}
],
"streamSnapshots": [
{
"afterPn": 11,
"stream0Prefix": "",
"stream0Held": [
2,
5
],
"stream4Prefix": ""
},
{
"afterPn": 12,
"stream0Prefix": "",
"stream0Held": [
2,
5
],
"stream4Prefix": "OK"
},
{
"afterPn": 13,
"stream0Prefix": "NOTES",
"stream0Held": null,
"stream4Prefix": "OK"
}
],
"ackRanges": {
"space": "ApplicationData",
"inclusivePacketRanges": [
[
11,
12
]
],
"largestAcknowledged": 12,
"pn10Acknowledged": false,
"businessCompletionProven": false
},
"timeThresholdDecision": {
"profile": "selected RFC9002 recommended threshold, no measured timer",
"missingPn": 10,
"largestAcknowledged": 12,
"latestRttMs": 80,
"smoothedRttMs": 80,
"timerGranularityMs": 1,
"multiplierNumerator": 9,
"multiplierDenominator": 8,
"thresholdMs": 90,
"elapsedSincePn10SentMs": 100,
"selectedDeclaredLost": true,
"actualCauseOfMissingArrival": "not-determined"
},
"pto": {
"context": "established confirmed connection; ApplicationData space",
"originalUnacknowledgedPn": 20,
"probePn": 21,
"probeFrame": "PING",
"priorPnMarkedLostFromPtoAlone": false,
"probeAckBusinessOutcome": false,
"timeoutSeconds": "not-computed"
},
"flowControl": {
"streamLimits": {
"0": 5,
"4": 2
},
"connectionMaxData": 7,
"uniqueStreamFinalOffsets": {
"0": 5,
"4": 2
},
"sumUniqueFinalOffsets": 7,
"recoveryAtExistingOffsetConsumesNewFlowCredit": false,
"congestionControlSharedAcrossConnection": true
},
"comparison": {
"tcpTransportOrdering": "one ordered byte stream per connection",
"http2StreamsVisibleToTCP": false,
"quicOrdering": "ordered bytes within each stream; no cross-stream order",
"independentProgressUnlimited": false,
"sharedConstraints": [
"connection congestion",
"connection flow credit",
"CPU/application dependencies",
"HTTP3 QPACK dependencies if present"
]
},
"earlyPolicy": {
"priorResumptionContextSelected": true,
"operation": "change-setting",
"unwantedEffectsIfRepeated": true,
"permittedInEarlyData": false,
"deferUntil": "ordinary selected 1-RTT application phase",
"actual0RTTRequestSent": false,
"replayProtectionPerfect": false,
"oneRttGuaranteesBusinessOnceOnly": false
},
"limits": {
"streamIds": "0 and 4 are selected client-initiated bidirectional streams",
"streamBranchStarts": "established confirmed 1-RTT context",
"recoveryPn13Ack": "outside branch",
"migrationAndPathValidation": "not-simulated",
"wireEncodingCryptoKeysCongestionAlgorithm": "omitted"
}
}- handshake
- Endpoint-local completion ile selected HANDSHAKE_DONE confirmation ayrımı.
- streamPackets
- Yeni packet number ile aynı stream offset information recovery’si.
- ackRanges
- Inclusive packet ranges; stream prefix veya business outcome değil.
- flowControl
- Unique stream offset toplamı connection credit’e katılır.
- earlyPolicy
- Repeated effect’e hassas işi local olarak early data’dan çıkarır.
QUIC v1 için inert anlamsal summary. Tam datagram, cipher, certificate, handshake message, recovery implementation, migration, HTTP3/QPACK veya request/replay çalıştırılmaz.
İki yanlış kanı
QUIC UDP kullandığı için reliability yoktur.
UDP carrier’dır; QUIC kendi ordered stream, ACK/loss recovery ve congestion mekanizmalarını kurar.
Bağımsız QUIC stream’leri her türlü beklemeyi kaldırır.
Bir stream gap’i diğer stream’i transport ordering açısından zorunlu durdurmaz; connection kaynakları ve üst application bağımlılıkları yine paylaşılır.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Stream 0 offset=0 eksik, offset=2 tutuluyor. Stream 4 offset=0 için OK aldı. Stream 4 ilerleyebilir mi?
- Evet. Bu snapshot’ta stream 4 prefix’i OK.
- Hayır. QUIC bütün stream’leri tek ordered byte queue’da bekletir.
Gerekçeli cevabı oku
Evet. Bu snapshot’ta stream 4 prefix’i OK. — Stream 0 gap’i stream 4’ün byte sırasını bozmaz. Shared congestion, flow ve application sınırları yine geçerlidir.
PN13, offset=0 konumundaki NO bilgisini kurtarıyor. PN10 yeniden mi kullanılır?
Dersten seçilen artifact alanları; öğretim örneği
- streamPackets[0]
- {"pn":10,"space":"ApplicationData","protection":"1-RTT","streamId":0,"offset":0,"payload":"NO","bytes":2,"selectedArrival":false}
- streamPackets[3]
- {"pn":13,"space":"ApplicationData","protection":"1-RTT","streamId":0,"offset":0,"payload":"NO","bytes":2,"selectedArrival":true,"informationRecoveryOfPn":10}
- Hayır. Aynı stream offset bilgisi yeni packet number ile gider.
- Evet. Stream offset aynıysa packet number da aynı olmalıdır.
Gerekçeli cevabı oku
Hayır. Aynı stream offset bilgisi yeni packet number ile gider. — PN13, PN10’daki bilgiyi taşır. Stream offset korunur; bu byte’ların yeniden gönderimi yeni unique flow credit tüketmez.
change-setting early data’ya kapalı. Neden resumption context veya 1-RTT business exactly-once garantisi değildir?
Gerekçeli cevabı oku
Önceki context, early-data replay riskini kaldırmaz. Tekrarlandığında istenmeyen effect oluşturabilecek işlem normal 1-RTT phase’ine ertelenir. Bu erteleme application retry ve duplicate’leri için exactly-once garantisi değildir. Business invariant ve idempotency ayrıca sağlanmalıdır.
□ Early-data policy’sini operation effect’ine bağladım.
□ 1-RTT’yi exactly-once garantisi saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- RFC 9000 — QUIC: A UDP-Based Multiplexed and Secure Transport1 Overview; 2 Streams; 2.1 Stream Types and Identifiers · 4.1 Data Flow Control; 5 Connection ID; 7 Cryptographic and Transport Handshake · 12.3 Packet Number Spaces; 13.3 Retransmission of Information; 19.20 HANDSHAKE_DONE Frames
- RFC 9001 — Using TLS to Secure QUIC3 Protocol Overview; 4.1.1 Handshake Complete; 4.1.2 Handshake Confirmed · 4.6 0-RTT; 5 Packet Protection; 9.2 Replay Attacks with 0-RTT
- RFC 9002 — QUIC Loss Detection and Congestion Control3 Design of the QUIC Transmission Machinery · 6.1.2 Time Threshold; 6.2 Probe Timeout; 7 Congestion Control
- RFC 9114 — HTTP/31.1 Prior Versions of HTTP; 1.2 Delegation to QUIC · 2 HTTP/3 Protocol Overview; 3.1 Discovering an HTTP/3 Endpoint; 3.3 Connection Reuse
- RFC 9293 — Transmission Control Protocol (TCP)3.1 Header Format; 3.4 Sequence Numbers · 3.3.2 State Machine Overview; 3.5.3 Reset Processing; 3.6 Closing a Connection; 3.6.1 Half-Closed Connections · 3.7 Segmentation; 3.8.1 Retransmission Timeout; 3.8.6 Managing the Window
- RFC 768 — User Datagram ProtocolIntroduction; Format; Fields; User Interface
- RFC 5737 — IPv4 Address Blocks Reserved for Documentation3 Documentation Address Blocks