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.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Ordinary FIN close
- İ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
- 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
- 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
- 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
- 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
- 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
- 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
- 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ı
- İ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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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ı
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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?
- Evet. Half-close sırasında client’ın receive yönü açık.
- 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
- 8 byte header + 4 byte PING; application response kanıtı yok.
- 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
- RFC 9293 — Transmission Control Protocol (TCP)3.1 Header Format; 3.4 Sequence Numbers · 3.3.2 State Machine Overview; 3.5.3 Reset Processing; 3.6 Closing a Connection; 3.6.1 Half-Closed Connections · 3.7 Segmentation; 3.8.1 Retransmission Timeout; 3.8.6 Managing the Window
- RFC 768 — User Datagram ProtocolIntroduction; Format; Fields; User Interface
- RFC 5737 — IPv4 Address Blocks Reserved for Documentation3 Documentation Address Blocks