Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

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.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Crypto handshake

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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

  1. 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
  2. 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
  3. 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
  4. 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)
  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
  6. 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
  7. 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
  8. 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

  1. 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
  2. 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
  3. 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
  4. 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ı

  1. 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
  2. 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
  3. 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
  4. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. Ş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
  4. 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
  5. 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
  6. 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

  1. İ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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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?

  1. Evet. Bu snapshot’ta stream 4 prefix’i OK.
  2. 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}
  1. Hayır. Aynı stream offset bilgisi yeni packet number ile gider.
  2. 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