Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-04.01

TCP connection nasıl kurulur?

Three-way handshake’i flags kadar iki peer’in ayrı state ve sequence bilgisi üzerinden oku.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Three-way handshake

  1. Başlangıç: ayrı state’ler

    Listener hazır seçilmiştir. Bu inert state trace’i gerçek socket açmaz.

    Client TCP
    CLOSED; client 192.0.2.10:51000
    Server TCP
    LISTEN; server 198.51.100.200:443
  2. Local active open

    Client SYN-SENT oldu; server henüz SYN almadı. Local hazırlık transfer değildir.

    Client TCP
    SYN-SENT; SYN prepared SEQ=1000
    Server TCP
    LISTEN; server 198.51.100.200:443
  3. SYN server’a ulaştı

    SYN payload’sız olsa da bir sequence position kullanır. Server artık SYN-RECEIVED, client SYN-SENT.

    Client TCP
    SYN-SENT; SYN prepared SEQ=1000
    Server TCP
    SYN-RECEIVED; client next=1001; server ISN=7000
  4. Local SYN+ACK hazırlığı

    Server kendi SYN’i ile client SYN’inin ACK’ini birleştirir. Client state’i değişmedi.

    Client TCP
    SYN-SENT; SYN prepared SEQ=1000
    Server TCP
    SYN-RECEIVED; SYN+ACK prepared SEQ=7000 ACK=1001
  5. SYN+ACK client’a ulaştı

    ACK=1001 client SYN’ini kabul eder. Client ESTABLISHED olur; server final ACK’i henüz almadı.

    Client TCP
    ESTABLISHED; received SYN+ACK; server next=7001
    Server TCP
    SYN-RECEIVED; SYN+ACK prepared SEQ=7000 ACK=1001
  6. Local final ACK hazırlığı

    Payload’sız ACK sequence space tüketmez; sonraki client data başlangıcı 1001 kalır.

    Client TCP
    ESTABLISHED; ACK prepared SEQ=1001 ACK=7001
    Server TCP
    SYN-RECEIVED; SYN+ACK prepared SEQ=7000 ACK=1001
  7. ACK server’a ulaştı

    Server kendi SYN’inin ACK’ini aldı ve ESTABLISHED oldu. Bu yalnız transport synchronization’dır.

    Client TCP
    ESTABLISHED; ACK prepared SEQ=1001 ACK=7001
    Server TCP
    ESTABLISHED; received ACK=7001; client next=1001

Final ACK arrival yok

  1. Başlangıç: ayrı state’ler

    Listener hazır seçilmiştir. Bu inert state trace’i gerçek socket açmaz.

    Client TCP
    CLOSED; client 192.0.2.10:51000
    Server TCP
    LISTEN; server 198.51.100.200:443
  2. Local active open

    Client SYN-SENT oldu; server henüz SYN almadı. Local hazırlık transfer değildir.

    Client TCP
    SYN-SENT; SYN prepared SEQ=1000
    Server TCP
    LISTEN; server 198.51.100.200:443
  3. SYN server’a ulaştı

    SYN payload’sız olsa da bir sequence position kullanır. Server artık SYN-RECEIVED, client SYN-SENT.

    Client TCP
    SYN-SENT; SYN prepared SEQ=1000
    Server TCP
    SYN-RECEIVED; client next=1001; server ISN=7000
  4. Local SYN+ACK hazırlığı

    Server kendi SYN’i ile client SYN’inin ACK’ini birleştirir. Client state’i değişmedi.

    Client TCP
    SYN-SENT; SYN prepared SEQ=1000
    Server TCP
    SYN-RECEIVED; SYN+ACK prepared SEQ=7000 ACK=1001
  5. SYN+ACK client’a ulaştı

    ACK=1001 client SYN’ini kabul eder. Client ESTABLISHED olur; server final ACK’i henüz almadı.

    Client TCP
    ESTABLISHED; received SYN+ACK; server next=7001
    Server TCP
    SYN-RECEIVED; SYN+ACK prepared SEQ=7000 ACK=1001
  6. Local final ACK hazırlığı

    Payload’sız ACK sequence space tüketmez; sonraki client data başlangıcı 1001 kalır.

    Client TCP
    ESTABLISHED; ACK prepared SEQ=1001 ACK=7001
    Server TCP
    SYN-RECEIVED; SYN+ACK prepared SEQ=7000 ACK=1001
  7. Eksik arrival sınırı

    Final ACK server arrival’ı gösterilmedi. Server’ın son modellenmiş state’i SYN-RECEIVED; sonraki davranış bilinmiyor.

    Client TCP
    ESTABLISHED; final ACK arrival unobserved; cause unknown
    Server TCP
    SYN-RECEIVED; SYN+ACK prepared SEQ=7000 ACK=1001

SYN+ACK arrival yok

  1. Başlangıç: ayrı state’ler

    Listener hazır seçilmiştir. Bu inert state trace’i gerçek socket açmaz.

    Client TCP
    CLOSED; client 192.0.2.10:51000
    Server TCP
    LISTEN; server 198.51.100.200:443
  2. Local active open

    Client SYN-SENT oldu; server henüz SYN almadı. Local hazırlık transfer değildir.

    Client TCP
    SYN-SENT; SYN prepared SEQ=1000
    Server TCP
    LISTEN; server 198.51.100.200:443
  3. SYN server’a ulaştı

    SYN payload’sız olsa da bir sequence position kullanır. Server artık SYN-RECEIVED, client SYN-SENT.

    Client TCP
    SYN-SENT; SYN prepared SEQ=1000
    Server TCP
    SYN-RECEIVED; client next=1001; server ISN=7000
  4. Local SYN+ACK hazırlığı

    Server kendi SYN’i ile client SYN’inin ACK’ini birleştirir. Client state’i değişmedi.

    Client TCP
    SYN-SENT; SYN prepared SEQ=1000
    Server TCP
    SYN-RECEIVED; SYN+ACK prepared SEQ=7000 ACK=1001
  5. Trace burada durur

    SYN+ACK arrival yok. State gözlemi gerçek timeout, filtering veya OS error teşhisi değildir.

    Client TCP
    SYN-SENT; SYN+ACK arrival unobserved; cause unknown
    Server TCP
    SYN-RECEIVED; SYN+ACK prepared SEQ=7000 ACK=1001

ROLLER · STATE · VERİ AKIŞI

Transport layer, host içindeki endpoint’i bulur

IP, adreslenmiş host’lar arasında packet taşımaya yardım eder. TCP/UDP ise port alanlarıyla host içindeki transport endpoint’lerini ayırır; protokol de kimliğin parçasıdır. Artifact client 192.0.2.10:51000 ile server 198.51.100.200:443 arasındaki TCP endpoint pair’ini seçer. Aynı sayısal port’taki UDP endpoint’i bu TCP connection değildir.

Port bir prosesin değişmez adı değildir; bir listening endpoint birden çok connection kabul edebilir. Her connection’ın local/remote address ve port bağlamı vardır. Burada DNS, route ve server listener hazır koşuldur; bunları handshake çizgisinden gerçekleşmiş ölçüm gibi çıkarmayız.

TCP connection, iki uçta tutulan durumdur

Connection fiziksel bir hat kurmaz. TCP uçları state, sequence number, acknowledgment ve buffer bilgilerini tutarak ordered reliable byte stream sağlar. Bağlantı yönleri aynı IP path’ını kullanmak zorunda değildir; bu ders aradaki router’ları tekrar çizmek yerine iki transport ucuna odaklanır.

Reliable, karşı uygulamanın veriyi işlediği veya iş kararını onayladığı anlamına gelmez. TCP delivery bilgisi uygulama cevabı, kalıcı kayıt ve authorization sonucundan farklıdır. Bir connection daha sonra hata verebilir; handshake’in tamamlanması sonsuz bağlantı veya sıfır kayıp sözü değildir.

Stream ile message sınırını ayır

TCP application write sınırlarını receiver’ın read çağrılarına aynı biçimde taşımaz. Örnekte NO ve TE01 yazımları N, OTE ve 01 okumalarıyla alınabilir; byte sırası birleştirildiğinde NOTE01’dir. Application protocol message framing’i kendisi tanımlar. Bir TCP segment veya read parçasını tam HTTP message sayma.

UDP datagram sınırını korur fakat kendi başına teslim, sıralama veya duplicate protection sağlamaz. Üst protokol bu özellikleri ekleyebilir: QUIC UDP datagram’ları üzerinde kendi connection ve ordered stream mekanizmasına sahiptir. Bu, QUIC’in TCP three-way handshake kullandığı anlamına gelmez; UDP/QUIC ayrıntıları sonraki konuların kapsamıdır.

Birinci arrival: SYN server’a ulaştı

Başlangıçta client CLOSED, server LISTEN durumundadır. Client local active open ile SYN-SENT’e geçer ve seçilmiş ISN=1000 ile SYN hazırlar. SYN server’a ulaştığında server SYN-RECEIVED olur; client henüz server’dan bir mesaj almamıştır ve SYN-SENT kalır. Tek bir arrival iki uçta eşzamanlı ESTABLISHED üretmez.

SYN, payload olmasa bile sequence space’te bir konum kullanır; server’ın sonraki beklediği client sequence 1001’dir. ISN=1000/7000 bu özgün örneğin sayılarıdır, gerçek ISN üretim algoritması veya güvenlik seçimi değildir. Artifact tam packet encoding’i değil flags/seq/ack özeti verir.

İkinci ve üçüncü arrival: iki uç farklı anda hazır

Server, SYN+ACK ile kendi ISN=7000 değerini ve ACK=1001’i bildirir. Bu geçerli cevap client’a ulaştığında client ESTABLISHED olur, server ise final ACK’i henüz almamışsa SYN-RECEIVED kalır. Client server SYN’ini 7001 ile acknowledge eden ACK hazırlar; bu ACK server’a ulaştığında server ESTABLISHED olur.

Payload’sız final ACK için SEQ=1001, ACK=7001’dir. ACK flag tek başına sequence space tüketmez; client’ın sonraki data byte’ı yine 1001’den başlayabilir. Burada bir active open ve bir passive open ile payload’sız handshake gösterilir. Simultaneous open, SYN içindeki data, options, windows, retransmission timer ve kapanış bu akışın dışında kalır.

Eksik gözlem bir hata nedenini kanıtlamaz

Final ACK arrival’ı bu örneğin trace’inde yoksa son modellenmiş durum client ESTABLISHED, server SYN-RECEIVED’dır. SYN+ACK arrival’ı yoksa client SYN-SENT kalır. Bunlar seçilmiş trace’in sınırlarıdır; packet loss, firewall policy, OS timeout veya server hatası teşhisi değildir. Gerçek TCP daha sonra retransmit, devam veya abort edebilir.

TCP handshake yalnız transport synchronization gösterir. Port 443 seçilmiş olsa bile TLS server identity kontrolü, HTTP request ve application authorization gerçekleşmiş sayılmaz. Animasyon sonunda iki ESTABLISHED etiketi görmek, Atlas Notları’nın başarıyla gösterildiği veya kullanıcının özel veriye yetkili olduğu anlamına gelmez.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

ACK scope

  1. SYN state yalnız bir uçtadır

    Active open client’ı SYN-SENT yapar; server LISTEN kalır. Yerel SYN hazırlığı server receipt’i değildir; iki state aynı anda güncellenmez.

    Transport evidence
    Client SYN-SENT / server LISTEN
    Completion gate
    Completion gate yok
    Application outcome
    Business sonucu yok
  2. SYN+ACK sonrasında asimetri var

    SYN+ACK arrival client’ı ESTABLISHED yapar, server SYN-RECEIVED kalır. Final ACK server’a ulaşmadan server completion sonucu çıkarılamaz.

    Transport evidence
    Client SYN-SENT / server LISTEN
    Completion gate
    Client established / server pending
    Application outcome
    Business sonucu yok
  3. Yanlış success gate’i kapatıldı

    TCP synchronization application receipt veya database commit değildir. TLS handshake ve HTTP request artifact evidenceBoundary’de not-modeled’dır.

    Transport evidence
    Client SYN-SENT / server LISTEN
    Completion gate
    Client established / server pending
    Application outcome
    Transport complete ≠ business complete
  4. Sequence ve payload ayrıldı

    Client SYN’in sequence değeri 1000’dir. Payload olmasa da SYN bir sequence position tüketir ve sonraki beklenen değer 1001 olur. Server SYN 7000 için sonuç 7001’dir; payload’sız final ACK yeni space tüketmez.

    Transport evidence
    SYN consumes one / ACK zero
    Completion gate
    Client established / server pending
    Application outcome
    Transport complete ≠ business complete
  5. Application framing ayrı beklenir

    NO+TE01 writes ile N+OTE+01 reads NOTE01 olarak birleşir. TCP message boundary korumaz; reconstructed bytes’ın varlığından tam application message çıkarılmaz.

    Transport evidence
    SYN consumes one / ACK zero
    Completion gate
    Stream NOTE01 / framing separate
    Application outcome
    Transport complete ≠ business complete
  6. Failure nedeni kanıtsız seçilmedi

    Normal final ACK bütün synchronization state’lerini tamamlayabilir; business success yine ayrı application result ister. Port 443 veya ESTABLISHED identity vermez.

    Transport evidence
    SYN consumes one / ACK zero
    Completion gate
    Stream NOTE01 / framing separate
    Application outcome
    Transport ayrı / application bilinmiyor

Peer state farkı

  1. SYN state yalnız bir uçtadır

    Active open client’ı SYN-SENT yapar; server LISTEN kalır. Yerel SYN hazırlığı server receipt’i değildir; iki state aynı anda güncellenmez.

    Transport evidence
    Client SYN-SENT / server LISTEN
    Completion gate
    Completion gate yok
    Application outcome
    Business sonucu yok
  2. SYN+ACK sonrasında asimetri var

    SYN+ACK arrival client’ı ESTABLISHED yapar, server SYN-RECEIVED kalır. Final ACK server’a ulaşmadan server completion sonucu çıkarılamaz.

    Transport evidence
    Client SYN-SENT / server LISTEN
    Completion gate
    Client established / server pending
    Application outcome
    Business sonucu yok
  3. Yanlış success gate’i kapatıldı

    final-ack-unobserved, iki mesajın tamamlanmış arrival’ını gösterir; cause değeri not-determined’dır. Bu case’te server handshake’i tamamlanmış olarak etiketlenmez.

    Transport evidence
    Client SYN-SENT / server LISTEN
    Completion gate
    Client established / server pending
    Application outcome
    UNKNOWN: final ACK arrival
  4. Sequence ve payload ayrıldı

    Client SYN’in sequence değeri 1000’dir. Payload olmasa da SYN bir sequence position tüketir ve sonraki beklenen değer 1001 olur. Server SYN 7000 için sonuç 7001’dir; payload’sız final ACK yeni space tüketmez.

    Transport evidence
    SYN consumes one / ACK zero
    Completion gate
    Client established / server pending
    Application outcome
    UNKNOWN: final ACK arrival
  5. Beklenen ACK henüz varış değildir

    Client’ın hazırlayacağı final ACK, seq 1001 ve ack 7001 taşır. Bu dalda server’a varışı gözlenmemiştir; doğru alanları hesaplamak server’ın SYN-RECEIVED state’ini ESTABLISHED yapmaz.

    Transport evidence
    SYN consumes one / ACK zero
    Completion gate
    Client ESTABLISHED / server SYN-RECEIVED
    Application outcome
    UNKNOWN: final ACK arrival
  6. Failure nedeni kanıtsız seçilmedi

    Eksik arrival scan/filter/timer/OS error teşhisi değildir. Timeout veya permanent failure claimed=false kalır; gerekli gözlem final ACK receipt’idir.

    Transport evidence
    SYN consumes one / ACK zero
    Completion gate
    Client ESTABLISHED / server SYN-RECEIVED
    Application outcome
    UNKNOWN: server completion cause

VARSAYIM · SINIR · KONTROL

Kırılan varsayım: ACK işin bittiğini söyler

Transport ACK’i application receipt veya database commit yerine kullanan tasarım, iki farklı kabul aşamasını karıştırır. Gerekli koşul transport kanıtının iş sonucu diye yorumlanmasıdır. Etki yanıltıcı başarı bildirimi veya kaybolmuş işlem bilgisidir.

Kontrol, application protocol’ün kendi başarı/error sonucunu ve gerekirse persistence kanıtını tanımlamasıdır. Bu sahne bu üst katmanları üretmez.

Kırılan varsayım: her read bir message’dır

Write/read sınırlarını aynı kabul eden parser, meşru parçalanmış veya birleşmiş stream’i yanlış yorumlayabilir. Gerekli koşul application framing’in transport parçasına bağlanmasıdır. Sorun network saldırısı olmadan normal I/O davranışında da ortaya çıkar.

Kontrol parser’ın byte biriktirmesi ve protocol framing koşuluna göre message tamamlamasıdır. NOTE01 partition karşılaştırması yalnız inert anlam alıştırmasıdır; açık üreten payload veya reproduction workflow içermez.

Kırılan varsayım: bir uç hazırsa ikisi de hazır

Client’ın SYN+ACK almasını server’ın final ACK almasıyla aynı an saymak state ownership’i kaybettirir. Bunun sonucu eksik trace’ten sahte çift yönlü başarı çıkarılmasıdır. Snapshot’ların her endpoint için ayrı tutulması bu hatayı görünür yapar.

Kontrol arrival’a göre receiver state’ini değiştirmek ve gözlenmeyen adım için nedeni bilinmiyor bırakmaktır. Eksik trace’ten scan sonucu, filtering teşhisi veya gerçek OS hatası üretmeyiz.

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

Hareket olmadan bütün senaryoları oku

Sequence hesabı

  1. Tuple listener’dan ayrıldı

    TCP client 192.0.2.10:51000 ↔ server 198.51.100.200:443 tuple’ıdır. serverListenerSelected=true verilmiş koşuldur; accept queue veya kernel socket gözlemi değildir.

    Tuple evidence
    TCP / client51000 / server443
    Sequence / arrival review
    Arithmetic yok
    Layer conclusion
    Review yok
  2. SYN arithmetic bağımsız hesaplandı

    Client SYN 1000 bir position tükettiği için sonraki beklenen değer 1001’dir. Server SYN 7000 için aynı hesap 7001 verir. Bu küçük değerler öğretim içindir; gerçek ISN generation yöntemini sınamaz.

    Tuple evidence
    TCP / client51000 / server443
    Sequence / arrival review
    1000+1=1001 / 7000+1=7001
    Layer conclusion
    Review yok
  3. Final ACK alanları okundu

    Final ACK, seq 1001 ve ack 7001 taşır. Payload içermez ve sequence space tüketmez; bu yüzden sonraki client data’sı yine 1001’den başlar. ACK’in bulunması data payload’ın bulunduğu anlamına gelmez.

    Tuple evidence
    ACK: seq1001 / ack7001 / zero payload
    Sequence / arrival review
    1000+1=1001 / 7000+1=7001
    Layer conclusion
    Review yok
  4. Arrival coverage ayrıca okundu

    Üç verilmiş arrivals sonunda her iki endpoint ESTABLISHED olur. State güncellemesi her receiver arrival’ına aittir; bütün handshake tek local işlem değildir.

    Tuple evidence
    ACK: seq1001 / ack7001 / zero payload
    Sequence / arrival review
    Coverage: three supplied arrivals
    Layer conclusion
    Review yok
  5. Transport aileleri karıştırılmadı

    UDP seçilmiş receives datagram boundaries korur ancak delivery/order guarantee vermez. QUIC UDP carrier üzerinde stream soyutlamasıdır; sameAsTCPHandshake=false ve modeled=false olarak kalır.

    Tuple evidence
    ACK: seq1001 / ack7001 / zero payload
    Sequence / arrival review
    Coverage: three supplied arrivals
    Layer conclusion
    TCP bytes / UDP datagrams / QUIC separate
  6. Completion evidence katmanında bitti

    Sequence ve endpoint state hesapları bu inert transition model’inde uyumludur. Gerçek TCP implementation, TLS identity veya application commit kanıtı değildir.

    Tuple evidence
    ACK: seq1001 / ack7001 / zero payload
    Sequence / arrival review
    Coverage: three supplied arrivals
    Layer conclusion
    Sequence hesabı tutarlı / application bilinmiyor

ACK görülmedi

  1. Tuple listener’dan ayrıldı

    TCP client 192.0.2.10:51000 ↔ server 198.51.100.200:443 tuple’ıdır. serverListenerSelected=true verilmiş koşuldur; accept queue veya kernel socket gözlemi değildir.

    Tuple evidence
    TCP / client51000 / server443
    Sequence / arrival review
    Arithmetic yok
    Layer conclusion
    Review yok
  2. SYN arithmetic bağımsız hesaplandı

    Client SYN 1000 bir position tükettiği için sonraki beklenen değer 1001’dir. Server SYN 7000 için aynı hesap 7001 verir. Bu küçük değerler öğretim içindir; gerçek ISN generation yöntemini sınamaz.

    Tuple evidence
    TCP / client51000 / server443
    Sequence / arrival review
    1000+1=1001 / 7000+1=7001
    Layer conclusion
    Review yok
  3. Beklenen final ACK alanları okundu

    Normal handshake için beklenen final ACK, seq 1001 ve ack 7001 taşır; payload içermez. Bu alanlar karşılaştırma içindir. İki varışlı kayıtta final ACK’in server tarafından alındığına dair gözlem yoktur.

    Tuple evidence
    Beklenen ACK: seq 1001 / ack 7001
    Sequence / arrival review
    1000+1=1001 / 7000+1=7001
    Layer conclusion
    Review yok
  4. Arrival coverage ayrıca okundu

    Bu case yalnız iki mesajın tamamlanmış arrival’ını gösterir. Client ESTABLISHED, server ise SYN-RECEIVED olarak kalır. Final ACK’in beklenen alanlarını bilmek, o ACK’in server’a ulaştığını gözlemekle aynı şey değildir.

    Tuple evidence
    Beklenen ACK: seq 1001 / ack 7001
    Sequence / arrival review
    Coverage: two arrivals
    Layer conclusion
    Review yok
  5. Transport aileleri karıştırılmadı

    UDP seçilmiş receives datagram boundaries korur ancak delivery/order guarantee vermez. QUIC UDP carrier üzerinde stream soyutlamasıdır; sameAsTCPHandshake=false ve modeled=false olarak kalır.

    Tuple evidence
    Beklenen ACK: seq 1001 / ack 7001
    Sequence / arrival review
    Coverage: two arrivals
    Layer conclusion
    TCP bytes / UDP datagrams / QUIC separate
  6. Completion evidence katmanında bitti

    Server tarafında final ACK’in varışını gösteren endpoint kaydı veya uygun capture noktası gerekir. Eldeki iki varış server’ın son state’ini SYN-RECEIVED olarak bırakır; eksikliğin nedeni, TLS ve application sonucu bilinmiyor.

    Tuple evidence
    Beklenen ACK: seq 1001 / ack 7001
    Sequence / arrival review
    Coverage: two arrivals
    Layer conclusion
    UNKNOWN: final arrival

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

Endpoint pair ve state ownership’i takip et

Başlamadan protocol, client/server address ve port alanlarını yaz. Local active open sadece client state’ini değiştirir. SYN, SYN+ACK ve ACK arrival’larında hangi peer’in yeni bilgi aldığını ve hangi peer’in önceki state’te kaldığını anlat.

Bu gözlem connection tuple’ını listener’dan ayırır. Sahnenin yalnız iki uçlu öğretim soyutlaması olduğunu ve router, socket API, accept queue veya kernel result ölçmediğini belirt.

Sequence arithmetic’i bağımsız hesapla

Client SYN için 1000+1=1001, server SYN için 7000+1=7001 hesapla. Final ACK payload’sız olduğu için SEQ sonraki data başlangıcını tüketmez. Sequence space’i payload byte sayısıyla aynı sanma; SYN bu farkı gösterir.

Artifact normal trace’inin iki son state’ini ve eksik arrival branch’lerinin kalan state’lerini karşılaştır. Seçilen küçük sayılar wraparound, window validation veya gerçek ISN üretimini sınamaz.

Başarı kanıtını katmanına bağla

Byte stream partition örneğinde read parçalarını birleştir; uygulama framing’i olmadan her parçaya message etiketi koyma. UDP karşılaştırmasındaki başarılı iki receive yalnız seçilmiş vaka; guaranteed delivery değildir.

TCP synchronization, TLS identity ve uygulama sonucu için ayrı expectation yaz. Yerel state hesabının doğru olması gerçek bir TCP implementation veya browser network davranışının çalıştırıldığı anlamına gelmez.

Örneğin Node.js ile bir TCP client yazarken connection girişimini başlatmak ile connect event’ini almak ayrı aşamalardır. UI, yalnız başlatma çağrısından sonra ‘bağlandı’ göstermesin; error ve close sonuçlarını da işlesin. connect, socket bağlantısının kurulduğunu bildirir; bu dersin ayrı tuttuğu TLS identity veya application yetkisini doğrulamaz. Normal bağlantı ile başarısız girişimde gösterilen durumları karşılaştırırken bu başarı sınırını koru.

ŞİMDİ VAKAYA UYGULA

ACK ve ESTABLISHED hangi başarı katmanına aittir?

Client SYN için 1000, server SYN için 7000 sequence değerleri seçilmiştir. Sonraki beklenen konumlar 1001 ve 7001 olur. Client ESTABLISHED olsa da final ACK server’da gözlenmediyse server’ın synchronization sonucu bilinmez.

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

İki endpoint, üç arrival: TCP state ledger

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

Ham kaydı ve alan açıklamalarını oku
{
  "tuple": {
    "protocol": "TCP",
    "client": {
      "address": "192.0.2.10",
      "port": 51000
    },
    "server": {
      "address": "198.51.100.200",
      "port": 443
    },
    "serverListenerSelected": true
  },
  "initialSequenceNumbers": {
    "client": 1000,
    "server": 7000,
    "kind": "selected-teaching-values-not-real-ISN-algorithm"
  },
  "initialStates": {
    "client": "CLOSED",
    "server": "LISTEN"
  },
  "activeOpen": {
    "localProcess": "client-prepares-SYN",
    "clientStateAfter": "SYN-SENT",
    "serverStateAfter": "LISTEN"
  },
  "arrivals": [
    {
      "from": "client",
      "to": "server",
      "flags": [
        "SYN"
      ],
      "seq": 1000,
      "ack": null,
      "payloadBytes": 0,
      "sequenceSpaceUsed": 1,
      "clientStateAfter": "SYN-SENT",
      "serverStateAfter": "SYN-RECEIVED",
      "receiverNextExpected": 1001
    },
    {
      "from": "server",
      "to": "client",
      "flags": [
        "SYN",
        "ACK"
      ],
      "seq": 7000,
      "ack": 1001,
      "payloadBytes": 0,
      "sequenceSpaceUsed": 1,
      "clientStateAfter": "ESTABLISHED",
      "serverStateAfter": "SYN-RECEIVED",
      "receiverNextExpected": 7001
    },
    {
      "from": "client",
      "to": "server",
      "flags": [
        "ACK"
      ],
      "seq": 1001,
      "ack": 7001,
      "payloadBytes": 0,
      "sequenceSpaceUsed": 0,
      "clientStateAfter": "ESTABLISHED",
      "serverStateAfter": "ESTABLISHED",
      "receiverNextExpected": 1001
    }
  ],
  "nextClientDataSeq": 1001,
  "observationalBranches": [
    {
      "case": "final-ack-unobserved",
      "completedArrivals": 2,
      "clientLastModeledState": "ESTABLISHED",
      "serverLastModeledState": "SYN-RECEIVED",
      "cause": "not-determined",
      "timeoutOrPermanentFailureClaimed": false
    },
    {
      "case": "synack-unobserved",
      "completedArrivals": 1,
      "clientLastModeledState": "SYN-SENT",
      "serverLastModeledState": "SYN-RECEIVED",
      "cause": "not-determined",
      "timeoutOrPermanentFailureClaimed": false
    }
  ],
  "framingComparison": {
    "tcp": {
      "applicationWrites": [
        "NO",
        "TE01"
      ],
      "possibleApplicationReads": [
        "N",
        "OTE",
        "01"
      ],
      "reconstructedBytes": "NOTE01",
      "messageBoundaryPreservedByTCP": false
    },
    "udp": {
      "sentDatagrams": [
        "NO",
        "TE01"
      ],
      "selectedSuccessfulReceives": [
        "NO",
        "TE01"
      ],
      "datagramBoundaryPreserved": true,
      "deliveryOrOrderingGuaranteedByUDP": false
    },
    "quic": {
      "carrier": "UDP datagrams",
      "streamAbstraction": "ordered bytes within a stream",
      "sameAsTCPHandshake": false,
      "modeled": false
    }
  },
  "evidenceBoundary": {
    "tcpSynchronization": "selected-inert-transition-model",
    "tlsHandshake": "not-modeled",
    "httpRequest": "not-modeled",
    "applicationAuthorization": "not-modeled",
    "packetChecksumsOptionsWindowsTimers": "omitted"
  }
}
tuple
Protocol dahil local/remote endpoint pair; listener farklı kavram.
arrivals.flags/seq/ack
Seçilmiş payload’sız handshake alanları; ACK flag yokken ack=null anlamsal boşluğu gösterir.
arrivals.sequenceSpaceUsed
SYN 1, payload’sız pure ACK 0 konum tüketir.
observationalBranches
Trace sonundaki ayrı peer state’leri; gerçek timeout/error teşhisi değil.
framingComparison
TCP write/read parçalarıyla UDP datagram sınırı arasındaki fark.

Tam packet, pcap veya kernel sonucu değildir. ISN’ler seçilmiş küçük sayılardır; checksum, options, window, timer, retransmission, simultaneous open, TLS, HTTP ve uygulama yetkisi modellenmez.

İki yanlış kanı

TCP her write’ı aynı sınırla receiver’a teslim eder.

TCP ordered byte stream sağlar. Read parçalarının sınırı değişebilir; application protocol message framing’i belirler.

SYN+ACK client’a gelince server da ESTABLISHED olur.

Seçilmiş ordinary handshake’te client ESTABLISHED olur; server final ACK arrival’ına kadar SYN-RECEIVED kalı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.

SYN+ACK client’a ulaştı; final ACK server’da henüz gözlenmedi. İki endpoint hangi state’te?

  1. Client ESTABLISHED; server SYN-RECEIVED.
  2. İkisi de ESTABLISHED; client state server’a otomatik geçer.
Gerekçeli cevabı oku

Client ESTABLISHED; server SYN-RECEIVED. — Client SYN+ACK aldıktan sonra ilerler. Server final ACK arrival’ını henüz işlememiştir.

Payload yokken ACK neden 1001?

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

arrivals[0].seq
1000
arrivals[0].payloadBytes
0
arrivals[0].sequenceSpaceUsed
1
arrivals[1].ack
1001
  1. SYN bir sequence number tüketir: 1000+1.
  2. ACK 1001 bir byte application body alındığını kanıtlar.
Gerekçeli cevabı oku

SYN bir sequence number tüketir: 1000+1. — Payload yoktur, fakat SYN için sequenceSpaceUsed=1. Sonraki beklenen number 1001 olur.

Başlangıç state’leri CLOSED/LISTEN. Bu normal handshake’in ilerlemesi için adımları sırala.

  1. Client SYN’i hazırlar; SYN-SENT olur.
  2. SYN server’a ulaşır; server SYN-RECEIVED olur.
  3. SYN+ACK client’a ulaşır; client ESTABLISHED olur.
  4. Final ACK server’a ulaşır; server ESTABLISHED olur.
Gerekçeli cevabı oku

Client SYN’i hazırlar; SYN-SENT olur. → SYN server’a ulaşır; server SYN-RECEIVED olur. → SYN+ACK client’a ulaşır; client ESTABLISHED olur. → Final ACK server’a ulaşır; server ESTABLISHED olur. — Client’ın SYN hazırlaması remote server’ı değiştirmez. Her endpoint ilgili mesaj kendisine ulaştığında ilerler. Bu branch data, TFO veya simultaneous open içermez.

TCP handshake tamamlandı. Kitap endpoint’i için TLS ve authorization hakkında hangi kanıt hâlâ eksik?

Gerekçeli cevabı oku

Handshake iki TCP endpoint’in sequence state’ini senkronize eder. TLS handshake, certificate kontrolü, HTTP request ve application authorization bu artifact’te modellenmez. TCP ESTABLISHED, resource’un teslim edileceğini veya kullanıcının yetkili olduğunu kanıtlamaz.

□ TCP sonucu ile TLS identity kontrolünü ayırdım.

□ Authorization için ayrı application kararı gerektiğini belirttim.

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

Kaynaklar ve kapsam