Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-04.03

Connection kapanışı ve UDP

TCP yönlerinin ayrı kapanışını FIN/RST ile izle; UDP datagram’ının farklı kapsamını oku.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Ordinary FIN close

  1. İki yön açık

    Bu fixture önceki data’yı acknowledge edilmiş olarak başlatır; kalan adımlar seçilmiş FIN ve half-close sınırlarını izler.

    Client transport
    ESTABLISHED; next SEQ=1007
    Server transport
    ESTABLISHED; next SEQ=7001
  2. Client local close

    Client send yönünü bitirdi; peer henüz FIN almadı.

    Client transport
    FIN-WAIT-1; FIN prepared SEQ=1007
    Server transport
    ESTABLISHED; next SEQ=7001
  3. Client FIN server’da

    Server sender EOF’unu öğrendi ve CLOSE-WAIT oldu; kendi application close’u henüz yok.

    Client transport
    FIN-WAIT-1; FIN prepared SEQ=1007
    Server transport
    CLOSE-WAIT; client EOF; ACK=1008 prepared
  4. FIN ACK client’ta

    Client kendi FIN’inin kabulünü öğrendi; server yönünden hâlâ receive edebilir.

    Client transport
    FIN-WAIT-2; ACK1008 received
    Server transport
    CLOSE-WAIT; client EOF; ACK=1008 prepared
  5. Server local close

    Server application da göndermeyi bitirdi; LAST-ACK ve FIN7001 hazırlanır.

    Client transport
    FIN-WAIT-2; ACK1008 received
    Server transport
    LAST-ACK; FIN prepared SEQ=7001
  6. Server FIN client’ta

    Client karşı EOF’u aldı, TIME-WAIT’e girdi ve ACK7002 hazır.

    Client transport
    TIME-WAIT; server EOF; ACK7002 prepared
    Server transport
    LAST-ACK; FIN prepared SEQ=7001
  7. Final ACK server’da

    Server FIN’inin ACK’ini aldı ve CLOSED oldu; client TIME-WAIT kalır.

    Client transport
    TIME-WAIT; server EOF; ACK7002 prepared
    Server transport
    CLOSED; final ACK7002 received
  8. Local 2×MSL sınırı

    Seçilmiş 60 saniye elapsed koşulu local’dır, packet değildir; gerçek OS clock çalıştırılmaz.

    Client transport
    CLOSED; selected 2MSL elapsed
    Server transport
    CLOSED; final ACK7002 received

Half-close yanıtı

  1. İki yön açık

    Bu fixture önceki data’yı acknowledge edilmiş olarak başlatır; kalan adımlar seçilmiş FIN ve half-close sınırlarını izler.

    Client transport
    ESTABLISHED; next SEQ=1007
    Server transport
    ESTABLISHED; next SEQ=7001
  2. Client local close

    Client send yönünü bitirdi; peer henüz FIN almadı.

    Client transport
    FIN-WAIT-1; FIN prepared SEQ=1007
    Server transport
    ESTABLISHED; next SEQ=7001
  3. Client FIN server’da

    Server sender EOF’unu öğrendi ve CLOSE-WAIT oldu; kendi application close’u henüz yok.

    Client transport
    FIN-WAIT-1; FIN prepared SEQ=1007
    Server transport
    CLOSE-WAIT; client EOF; ACK=1008 prepared
  4. FIN ACK client’ta

    Client kendi FIN’inin kabulünü öğrendi; server yönünden hâlâ receive edebilir.

    Client transport
    FIN-WAIT-2; ACK1008 received
    Server transport
    CLOSE-WAIT; client EOF; ACK=1008 prepared
  5. Server local response hazır

    CLOSE-WAIT durumundaki server, application response’u OK’yi hazırladı; kendi FIN’ini henüz göndermedi.

    Client transport
    FIN-WAIT-2; ACK1008 received
    Server transport
    CLOSE-WAIT; OK prepared SEQ7001 len2
  6. Response data arrival

    Client send yönü kapalı olsa da OK’yi receive eder; server next expected=7003.

    Client transport
    FIN-WAIT-2; received OK; ACK7003 prepared
    Server transport
    CLOSE-WAIT; OK prepared SEQ7001 len2
  7. Response ACK arrival

    Server data ACK’ini aldı; trace full close’dan önce biter.

    Client transport
    FIN-WAIT-2; received OK; ACK7003 prepared
    Server transport
    CLOSE-WAIT; OK acknowledged; own FIN not sent

Local application abort

  1. Established abort context

    Bu dal yalnız mevcut connection için seçilmiş local abort’u anlatır.

    Client transport
    ESTABLISHED; next SEQ=1007
    Server transport
    ESTABLISHED; next SEQ=7001
  2. Server local abort

    Server application abort’u seçti; local state kapandı ve geçerli reset bildirimi hazır.

    Client transport
    ESTABLISHED; next SEQ=1007
    Server transport
    CLOSED; local application abort; reset prepared
  3. Valid reset arrival

    Geçerlilik önkoşulu seçilmiş reset client’a geldi. Client CLOSED; bu graceful FIN exchange değil.

    Client transport
    CLOSED; accepted valid reset; app not yet notified
    Server transport
    CLOSED; local application abort; reset prepared
  4. Local application bildirimi

    Application abort sonucunu öğrenir; business rollback veya peer commit bilgisi üretmez.

    Client transport
    CLOSED; application notified of abort
    Server transport
    CLOSED; local application abort; reset prepared

UDP datagram

  1. UDP datagram context

    UDP endpoint pair seçilir; TCP state isimleri uygulanmaz.

    Client transport
    UDP 192.0.2.10:53000; datagram absent
    Server transport
    UDP 198.51.100.200:53001; datagram absent
  2. Local PING hazırlığı

    ASCII PING dört byte, UDP header sekiz byte’tır; toplam length 12 olur. Tam datagram kodlanmadığı için checksum sayısı verilmemiştir.

    Client transport
    UDP PING prepared; length=12
    Server transport
    UDP 198.51.100.200:53001; datagram absent
  3. UDP datagram arrival

    Seçilmiş datagram server’a ulaştı; UDP otomatik ACK veya application reply oluşturmaz.

    Client transport
    UDP PING prepared; length=12
    Server transport
    UDP PING received; boundary preserved; app unread
  4. Local datagram read

    Application PING’i tüketir; PONG ve delivery guarantee eklenmez.

    Client transport
    UDP PING prepared; length=12
    Server transport
    UDP app read PING; no response modeled

ROLLER · STATE · VERİ AKIŞI

Established’tan çıkış iki yön için ayrı ilerler

TCP full-duplex’tir; bir uç kendi gönderimini bitirirken diğer yönden veri almayı sürdürebilir. CLOSE niyeti ile FIN’in peer’e ulaşması aynı olay değildir. Bu örnekte önceki veriler acknowledge edilmiş, client’ın sonraki sequence konumu 1007, server’ınki 7001 ve iki uç ESTABLISHED seçilmiştir.

Client local close ile FIN-WAIT-1’e geçer. Payload’sız FIN SEQ=1007 bir sequence position tüketir. FIN server’a ulaştığında server CLOSE-WAIT olur; client kendi FIN’inin ACK’ini alana kadar FIN-WAIT-1 kalır. State isimleri connection’ın her uçtaki bilgisini anlatır, bütün ağda paylaşılan tek etiket değildir.

FIN, senden artık data gelmeyeceğini söyler

Server client FIN’ini ACK=1008 ile acknowledge eder. Bu ACK client’a geldiğinde client FIN-WAIT-2 olur. Server’ın application’ı henüz kendi gönderimini kapatmadıysa CLOSE-WAIT kalabilir ve response byte’ları gönderebilir. Half-close dalında server SEQ=7001 ile OK taşır; client’ın beklediği sonraki konum 7003’tür.

FIN, connection’ın diğer yönünde artık hiçbir veri olmayacağını veya application response’unun doğru olduğunu kanıtlamaz. Half-close’u destekleyen application tasarımı, sende EOF gördüğünde hâlâ kendi yanıtını tamamlayabilir. Application ve bazı API/implementation seçenekleri bu davranışı sınırlayabilir; seçilmiş örneği her socket API’ye genelleme.

Ordinary kapanışta TIME-WAIT hâlâ durumdur

Normal dalda server application local close yapar ve LAST-ACK’e geçer. Server FIN SEQ=7001 client’a geldiğinde client TIME-WAIT olur; ACK=7002 server’a ulaştığında server CLOSED olur. Client’ın final ACK gönderimi bütün yerel connection state’ini hemen silmez.

TIME-WAIT eski duplicate segmentlerin yaşam süresini ve gerektiğinde yeniden gelen FIN’e son ACK’in tekrar gönderilmesini gözetir. Temel TCP sınırı 2×MSL’dir; artifact’te MSL=30 saniye yalnız görünür hesap örneği, gerçek OS default’u değildir. Gerçekte FIN ve ACK birleşebilir, simultaneous close başka state yolu izleyebilir; kapanışı evrensel dört ayrı packet kuralına çevirme.

RST, graceful close’dan farklı bir bitiştir

RST, geçerli connection context’inde kabul edilirse abort yolu izlenir; güvenilir bütün-buffer teslimi sağlayan graceful FIN exchange ile aynı değildir. Örnekte server application’ın local abort kararı seçilmiştir. Server local state’i kapanır; peer ancak varsayılan geçerli reset’i alınca kendi state’ini CLOSED yapar ve application’a abort bilgisi aktarır.

Gerçek trace’te yalnız RST flag görmek business hata nedenini tek başına vermez. Endpoint’in state’i, sequence validation ve application/OS bilgisi gerekir. Burada reset’in geçerliliği seçilmiş koşuldur; packet encoding veya validation algoritması yürütülmez. RST görülmemesi de uygulamanın yanıtını başarıyla tamamladığını kanıtlamaz.

UDP datagram’ı TCP lifecycle taşımaz

UDP, source/destination port, length ve checksum alanlarından oluşan sekiz byte header ile datagram taşır. Örneğin ASCII PING payload’u dört byte, UDP length’i header dahil 12 byte’tır. IP header bu UDP length hesabına girmez. Bu özet checksum sayısı uydurmaz; pseudoheader ve tam datagram hesaplaması burada yoktur.

UDP tek başına handshake, cumulative ACK, retransmission, ordered stream veya FIN/RST lifecycle sunmaz. Bir application UDP socket’ine local peer seçimi yapabilir; bu wire’da TCP handshake gerçekleştiği anlamına gelmez. Üst protokol request/response, timeout ve retry tanımlayabilir; bu özellikler UDP’nin kendisinden gelmez.

Datagram receipt uygulama işlemi değildir

UDP normal dalında bir PING datagram’ının server’a başarılı gelişi seçilir. Application’ın onu local olarak okuması sonraki adımdır; server otomatik PONG üretmez. Tek başarılı geliş teslim garantisi veya bütün UDP trafiğinin davranışı değildir.

Application kendi duplicate/reordering ve retry kapsamını tasarlamalıdır. Transport seçimi kullanıcı yetkisini veya işin bir kez yapılmasını kanıtlamaz. Connection lifecycle ve datagram yaşamını ayırmak, üst protocol davranışını yanlış katmana yazmayı önler.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Half-close

  1. Yönün kapanışı scope taşır

    Client FIN ile send yönünü kapatır, fakat clientCanStillReceive=true kalır. Peer EOF bütün iki yönlü exchange’in sonu değildir.

    Transport evidence
    Send closed / receive open
    Lifecycle boundary
    Application tamamlanmadı
    Business outcome
    Business outcome yok
  2. Erken business sonucu verilmedi

    Server CLOSE-WAIT state’indedir ve OK cevabı gönderebilir. Application kendi protocol completion koşulunu tek-yönlü EOF’tan ayrı tutar.

    Transport evidence
    Send closed / receive open
    Lifecycle boundary
    Server response still possible
    Business outcome
    Business outcome yok
  3. Data history hesaba katıldı

    Half-close örneğinde server, seq 7001’den OK cevabının iki byte’ını gönderir; beklenen ACK 7003 olur. Normal payload’sız server FIN için ACK 7002 başka data history’sine aittir. Aynı sayılar farklı branch’lere körlemesine taşınmaz.

    Transport evidence
    OK +2 → ACK7003 / FIN +1 ayrı
    Lifecycle boundary
    Server response still possible
    Business outcome
    Business outcome yok
  4. Retry sonucu transport’tan türetilmedi

    OK’nin transport katmanında ACK alması, yanıtın application açısından yeterli olduğunu göstermez. Bu half-close dalında RST yoktur; business completion veya aynı işlemi yeniden deneme kararı application sözleşmesiyle belirlenir.

    Transport evidence
    OK +2 → ACK7003 / FIN +1 ayrı
    Lifecycle boundary
    Server response still possible
    Business outcome
    Commit / retry authority unknown
  5. Half-close kendi son state’inde kaldı

    Bu dal server’ın kendi FIN’inden önce biter. Client FIN-WAIT-2, server CLOSE-WAIT durumundadır; OK yanıtı acknowledge edilmiştir. Normal kapanıştaki TIME-WAIT ve 2×MSL hesabı bu tamamlanmamış exchange’in son state’i değildir.

    Transport evidence
    OK +2 → ACK7003 / FIN +1 ayrı
    Lifecycle boundary
    Client FIN-WAIT-2 / server CLOSE-WAIT
    Business outcome
    Commit / retry authority unknown
  6. Kapanış business scope’u genişletmedi

    Half-close trace full close’tan önce biter. Receive yönünün açık olması protocol’ün normal parçası olabilir; kalıcı failure sonucu iddia edilmez.

    Transport evidence
    OK +2 → ACK7003 / FIN +1 ayrı
    Lifecycle boundary
    Client FIN-WAIT-2 / server CLOSE-WAIT
    Business outcome
    Half-close valid / completion separate

Abort sınırı

  1. Yönün kapanışı scope taşır

    Abort seçilmiş local-server-application-abort koşuludur; existing connection için reset validity varsayılır. RST flag’i gerçek root cause’u göstermez.

    Transport evidence
    Selected abort / cause supplied
    Lifecycle boundary
    Application tamamlanmadı
    Business outcome
    Business outcome yok
  2. Erken business sonucu verilmedi

    Transport reset application’ın önceki işlemini geri almaz. Hangi byte’ın işlendiği veya commit olduğu application outcome kanıtından anlaşılır, CLOSED state’inden değil.

    Transport evidence
    Selected abort / cause supplied
    Lifecycle boundary
    Rollback not proven
    Business outcome
    Business outcome yok
  3. Local abort peer receipt değildir

    Server application’ın local abort kararı önce kendi TCP state’ini CLOSED yapar. Client, geçerli olduğu varsayılan reset’i henüz almamışsa ESTABLISHED kalır. Kapanış bilgisi iki uçta aynı anda oluşmaz; bu dal OK veya FIN alışverişi içermez.

    Transport evidence
    Server CLOSED / client reset bekliyor
    Lifecycle boundary
    Rollback not proven
    Business outcome
    Business outcome yok
  4. Retry sonucu transport’tan türetilmedi

    Reset sonrası queued data reliably delivered claimed=false’dur. Business completion bilinmezken tekrarın safe/idempotent olması application sözleşmesine bağlıdır; bu trace once-only işlem kanıtı değildir.

    Transport evidence
    Server CLOSED / client reset bekliyor
    Lifecycle boundary
    Rollback not proven
    Business outcome
    Commit / retry authority unknown
  5. Valid reset graceful FIN yolunu atlar

    Varsayılan geçerli RST client’a ulaştığında client CLOSED olur ve local application abort sonucunu öğrenir. Graceful FIN, LAST-ACK veya TIME-WAIT yolu bu abort dalında yürütülmez. CLOSED state’i önceki business işleminin geri alındığı anlamına gelmez.

    Transport evidence
    Server CLOSED / client reset bekliyor
    Lifecycle boundary
    Valid RST sonrası iki uç CLOSED
    Business outcome
    Commit / retry authority unknown
  6. Kapanış business scope’u genişletmedi

    Abort graceful FIN exchange değildir ve hiçbir transaction rollback sonucu üretmez. Transport closure bilinir; önceki application etkisi ayrı evidence ister.

    Transport evidence
    Server CLOSED / client reset bekliyor
    Lifecycle boundary
    Valid RST sonrası iki uç CLOSED
    Business outcome
    Transport closed / business unknown

VARSAYIM · SINIR · KONTROL

Kırılan varsayım: EOF bütün exchange’i bitirir

Peer FIN’ini görünce kendi response yönünü de otomatik kapatan application, tasarlanmış half-close exchange’ini yarıda kesebilir. Gerekli koşul tek yöndeki EOF’un iki yönlü son durum sanılmasıdır.

Kontrol send/receive lifecycle’ını ve application protocol tamamlanma koşulunu ayrı tutmaktır. CLOSE-WAIT tek başına başarısızlık nedeni değildir; anlamı süre ve application context ile değerlendirilir.

Kırılan varsayım: reset bütün önceki işi geri alır

TCP abort application’ın daha önce yaptığı işlemi kendiliğinden geri almaz. Karşı uç bazı byte’ları işlemiş olabilir; RST transport state’in bitişidir. Gerekli koşul transport abort’un transaction rollback gibi yorumlanmasıdır.

Kontrol application outcome ve retry semantics’ini kendi katmanında belirlemektir. Reset flag tek başına ne business commit’i ne de kaynak hatasını kanıtlar.

Kırılan varsayım: UDP checksum reliability’dir

Checksum error detection ile teslim/sıralama garantisi farklıdır. Datagram checksum alanını görmek kayıp verinin tekrar gönderildiğini veya application’ın veriyi kullandığını kanıtlamaz.

Kontrol required transport/application özelliklerini açık yazmaktır. Eksik response, UDP’nin kendisinin bir error packet üretmesi gerektiği anlamına gelmez.

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

Hareket olmadan bütün senaryoları oku

FIN ledger

  1. Transport evidence tipi seçildi

    normal active close initialStates ESTABLISHED/ESTABLISHED ve unacknowledgedDataAtStart=0 koşullarında başlar. Simultaneous close bu trace’in kapsamı değildir.

    Lifecycle evidence
    Ordinary close / no outstanding data
    Arithmetic review
    Calculation yok
    Outcome review
    Conclusion yok
  2. Byte veya sequence hesabı yapıldı

    Client FIN 1007 bir sequence tüketir ACK 1008 ister; server FIN 7001 ACK 7002 ister. PayloadBytes=0, sequenceSpaceUsed=1 farklı alanlardır.

    Lifecycle evidence
    Ordinary close / no outstanding data
    Arithmetic review
    FIN1007→ACK1008 / FIN7001→ACK7002
    Outcome review
    Conclusion yok
  3. Arrival yerel hazırlıktan ayrıldı

    Local client close FIN-WAIT-1 yapar, server ESTABLISHED kalır. Client FIN arrival server’ı CLOSE-WAIT yapar; karşı state gelmeden ACK sonucu taşınmaz.

    Lifecycle evidence
    Local close ≠ peer arrival
    Arithmetic review
    FIN1007→ACK1008 / FIN7001→ACK7002
    Outcome review
    Conclusion yok
  4. Normal son state kapsamı korundu

    Final ACK server’a ulaşınca server CLOSED, client TIME-WAIT olur; seçilmiş 2MSL local expiry client’ı ayrıca CLOSED yapar. Her state’in owner’ı ayrıdır.

    Lifecycle evidence
    Local close ≠ peer arrival
    Arithmetic review
    Server closed / client waits separately
    Outcome review
    Conclusion yok
  5. Eksik üst katman iddiası eklenmedi

    FIN/ACK segments birleştirilebilir; dört ayrı segment universal değildir. Abort veya UDP branch’ine graceful TCP closure state’leri taşınmaz; gerçek socket/API ölçümü bu ledger’dan türetilmez.

    Lifecycle evidence
    Local close ≠ peer arrival
    Arithmetic review
    Server closed / client waits separately
    Outcome review
    Different lifecycle profiles retained
  6. Review aritmetik scope’unda bitti

    FIN sequence hesabı ve uçların state sırası verilen normal kapanış örneğinde tutarlıdır. Gerçek kanıt, ilgili tuple için iki uçtaki FIN/ACK gözlemlerini ve yerel CLOSE/timer kayıtlarını ister. Bu hesap application completion veya gerçek OS TIME-WAIT süresini ölçmez.

    Lifecycle evidence
    Local close ≠ peer arrival
    Arithmetic review
    Server closed / client waits separately
    Outcome review
    FIN states consistent / business unknown

UDP length

  1. Transport evidence tipi seçildi

    UDP örneğinde client port 53000, server port 53001 kullanır. PING payload’ı dört ASCII byte’tır. Header’ın sourcePort, destinationPort, length ve checksum alanları vardır; TCP lifecycle state’leri burada uygulanmaz.

    Lifecycle evidence
    UDP / PING / no TCP states
    Arithmetic review
    Calculation yok
    Outcome review
    Conclusion yok
  2. Byte veya sequence hesabı yapıldı

    Sekiz byte UDP header’a dört byte PING eklendiğinde length 12 olur. Numeric checksum verilmemiştir. Bu uzunluk hesabı, complete datagram encoding veya başarılı checksum verification kanıtı değildir.

    Lifecycle evidence
    UDP / PING / no TCP states
    Arithmetic review
    8+4=12 / checksum unknown
    Outcome review
    Conclusion yok
  3. Arrival yerel hazırlıktan ayrıldı

    selectedSuccessfulArrival=true yalnız seçilen datagram’a aittir. Local read ve applicationResponseProduced=false ayrı kalır; transport ACK veya otomatik reply üretilmez.

    Lifecycle evidence
    Selected arrival / application response absent
    Arithmetic review
    8+4=12 / checksum unknown
    Outcome review
    Conclusion yok
  4. Normal son state kapsamı korundu

    orderedReliableDeliveryProvidedByUDP=false’dur. Checksum alanının varlığı retransmission, ordering veya application acceptance kanıtı değildir.

    Lifecycle evidence
    Selected arrival / application response absent
    Arithmetic review
    Checksum ≠ reliable delivery
    Outcome review
    Conclusion yok
  5. Datagram ve uygulama gözlemi ayrıldı

    Length alanını görmek yalnız header ve payload boyutunu ilişkilendirir. Gerçek receipt için ilgili endpoint/tuple’daki datagram gözlemi, application read için ayrı uygulama kaydı gerekir. Bu örnek bir başarılı varış seçer; kayıp, duplicate veya retry davranışını kapsamaz.

    Lifecycle evidence
    Selected arrival / application response absent
    Arithmetic review
    Checksum ≠ reliable delivery
    Outcome review
    Datagram receipt ≠ application sonucu
  6. Review aritmetik scope’unda bitti

    UDP length=12 verilen field sözleşmesiyle uyumludur; network reliability ve application response UNKNOWN kalır. Tek successful arrival bütün loss/duplicate durumlarının testi değildir.

    Lifecycle evidence
    Selected arrival / application response absent
    Arithmetic review
    Checksum ≠ reliable delivery
    Outcome review
    Length tutarlı / teslim garantisi yok

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

FIN ledger’ında +1’i takip et

Client FIN=1007 için ACK1008; server FIN=7001 için ACK7002 hesapla. Her arrival’da receiver’ın state’ini değiştir; ACK daha karşı peer’e ulaşmadan onun state’ini ilerletme.

Half-close dalındaki OK iki byte’tır, ACK7003 gerektirir. Aynı FIN değerlerini farklı data history’si olan connection’a körlemesine kopyalama.

Graceful ve abort kanıtını ayır

Normal dal FIN-WAIT-1/2, CLOSE-WAIT, LAST-ACK ve TIME-WAIT sırasını ordinary close için gösterir. Abort dalında aynı sıralama yoktur; seçilen geçerli reset farklı olaydır.

Gerçek uygulama incelemesinde transport trace’i application completion ve shutdown intent bilgisiyle ilişkilendir. Bu örneğin seçilmiş local timer’ını gerçek OS ölçümü sayma.

UDP length ve kapsamını elle kontrol et

PING’in ASCII byte uzunluğuna sekiz-byte header ekle; sonuç 12’dir. Scene datagram arrival ile local read’i ayırır; transport ACK, FIN veya otomatik application reply eklemez.

Reliability gerekiyorsa üst protocol’ün nasıl sağladığını ayrıca açıkla. Burada tek datagram’ın başarıyla gelişi bütün kayıp/duplicate durumlarını kapsayan implementation değildir.

ŞİMDİ VAKAYA UYGULA

FIN, RST ve UDP length hangi kabul aşamalarını tamamlamaz?

Client FIN gönderdikten sonra server hâlâ OK cevabını gönderebilir. Abort, daha önce yapılmış business işlemini kendiliğinden geri almaz. UDP PING örneğinin 12 byte uzunluğu ise yalnız seçilmiş datagram’ın field hesabıdır.

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

Directional close ve datagram ledger

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

Ham kaydı ve alan açıklamalarını oku
{
  "context": {
    "tcpClient": "192.0.2.10:51000",
    "tcpServer": "198.51.100.200:443",
    "clientNextSeq": 1007,
    "serverNextSeq": 7001,
    "unacknowledgedDataAtStart": 0,
    "initialStates": [
      "ESTABLISHED",
      "ESTABLISHED"
    ]
  },
  "normalFin": [
    {
      "from": "client",
      "to": "server",
      "seq": 1007,
      "payloadBytes": 0,
      "sequenceSpaceUsed": 1,
      "expectedAck": 1008
    },
    {
      "from": "server",
      "to": "client",
      "seq": 7001,
      "payloadBytes": 0,
      "sequenceSpaceUsed": 1,
      "expectedAck": 7002
    }
  ],
  "normalStates": [
    {
      "event": "initial",
      "owner": 0,
      "client": "ESTABLISHED",
      "server": "ESTABLISHED"
    },
    {
      "event": "local-client-close",
      "owner": 0,
      "client": "FIN-WAIT-1",
      "server": "ESTABLISHED"
    },
    {
      "event": "client-fin-arrival",
      "owner": 1,
      "client": "FIN-WAIT-1",
      "server": "CLOSE-WAIT"
    },
    {
      "event": "fin-ack-arrival-at-client",
      "owner": 0,
      "client": "FIN-WAIT-2",
      "server": "CLOSE-WAIT"
    },
    {
      "event": "local-server-close",
      "owner": 1,
      "client": "FIN-WAIT-2",
      "server": "LAST-ACK"
    },
    {
      "event": "server-fin-arrival",
      "owner": 0,
      "client": "TIME-WAIT",
      "server": "LAST-ACK"
    },
    {
      "event": "final-ack-arrival-at-server",
      "owner": 1,
      "client": "TIME-WAIT",
      "server": "CLOSED"
    },
    {
      "event": "selected-2MSL-local-expiry",
      "owner": 0,
      "client": "CLOSED",
      "server": "CLOSED"
    }
  ],
  "timeWait": {
    "duration": "2*MSL",
    "selectedMslSeconds": 30,
    "selectedWaitSeconds": 60,
    "actualOsDefaultClaimed": false,
    "purpose": [
      "old-duplicate-lifetime",
      "allow-final-ACK-again-if-FIN-retransmitted"
    ]
  },
  "halfClose": {
    "clientSendClosed": true,
    "clientCanStillReceive": true,
    "serverStateAfterClientFin": "CLOSE-WAIT",
    "serverReply": {
      "seq": 7001,
      "payload": "OK",
      "payloadBytes": 2,
      "expectedAck": 7003
    },
    "serverFinNotYetSent": true,
    "traceEndsBeforeFullClose": true
  },
  "abort": {
    "selectedCause": "local-server-application-abort",
    "resetValidity": "assumed-valid-for-existing-connection-not-encoded",
    "receiverStateAfterValidReset": "CLOSED",
    "gracefulFinExchange": false,
    "queuedDataReliablyDeliveredClaimed": false,
    "realResetCauseDerivableFromFlagAlone": false
  },
  "udp": {
    "client": "192.0.2.10:53000",
    "server": "198.51.100.200:53001",
    "headerFields": [
      "sourcePort",
      "destinationPort",
      "length",
      "checksum"
    ],
    "headerBytes": 8,
    "payload": "PING",
    "payloadBytes": 4,
    "length": 12,
    "checksumNumericValue": "not-supplied; no complete datagram encoding",
    "selectedSuccessfulArrival": true,
    "orderedReliableDeliveryProvidedByUDP": false,
    "tcpLifecycleStatesApply": false,
    "applicationResponseProduced": false
  },
  "lifecycleScope": {
    "ordinaryActiveClose": true,
    "simultaneousClose": "not-modeled",
    "FINAndAckMayBeCombined": true,
    "fourSeparateSegmentsUniversal": false,
    "RSTInjectionOrLiveSocket": "not-performed"
  }
}
normalFin
FIN payload’sızken de sequence space 1 kullanır.
normalStates
Ordinary active close için ayrı peer state’leri.
timeWait
2×MSL; seçilmiş süre OS default’u değil.
halfClose
Client send kapalıyken response yönü açık kalabilir.
udp.length
UDP header+payload byte sayısı; IP header dahil değil.

FIN/RST alanları ve UDP header yalnız anlamsal özetlerdir. Gerçek socket, pcap, checksum, timer veya OS sonucu üretilmez.

İki yanlış kanı

Peer FIN’i gelince iki yönde de data biter.

FIN sender yönünü bitirir. Half-close destekleyen uç diğer yönde response göndermeyi/almayı sürdürebilir.

UDP socket’te peer seçmek TCP benzeri handshake kurar.

Local peer seçimi UDP wire format’ına SYN/ACK, FIN veya teslim garantisi eklemez. Üst protocol davranışı ayrıdı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.

Client FIN gönderdi; server CLOSE-WAIT’te. Server hâlâ OK verisini gönderebilir mi?

  1. Evet. Half-close sırasında client’ın receive yönü açık.
  2. Hayır. Bir FIN iki yönü aynı anda kapatır.
Gerekçeli cevabı oku

Evet. Half-close sırasında client’ın receive yönü açık. — clientSendClosed=true ve clientCanStillReceive=true. Server henüz kendi FIN mesajını göndermedi.

UDP length=12 nasıl oluşur? Application response hakkında ne söyler?

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

udp.headerBytes
8
udp.payloadBytes
4
udp.length
12
udp.applicationResponseProduced
false
  1. 8 byte header + 4 byte PING; application response kanıtı yok.
  2. 12 byte payload alındı ve TCP ACK döndürüldü.
Gerekçeli cevabı oku

8 byte header + 4 byte PING; application response kanıtı yok. — Arrival verilmiş olsa da applicationResponseProduced=false. UDP ACK veya reliable reply sağlamaz.

Gerçek kayıtta RST görmek ile bu örneğin local-server-application-abort nedeni arasındaki kanıt farkı nedir?

Gerekçeli cevabı oku

Örnek abort nedenini local application abort olarak verir ve mevcut connection için reset geçerliliğini varsayar. Gerçek RST flag’i tek başına aynı nedeni kanıtlamaz. Reset, graceful FIN exchange değildir; sırada bekleyen data’nın reliable delivery’sini garanti etmez.

□ Önceden verilen nedeni gözlenen flag’den ayırdım.

□ Reset sonucundan data delivery garantisi çıkarmadım.

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

Kaynaklar ve kapsam