28/11/2018

TCP Protocol Sayaçları

TCP Protokolü en çok kullanılan iletişim protokollerinden biridir.
Şimdi bu protokölün çalışması esnasında gelip giden paketlerde ki bir detayı inceleyeceğiz.
Tabii bu konuda pek çok detay mevcuttur ancak bu yazıda ki limit sadece ACK ve SEQ sayaçlarının nasıl çalıştığı üzerine.
Başlamadan önce örneği nasıl çıkarttığımı açıklayayım.
Evde ki bilgisayarımda Wireshark kurulu. (ücretsiz süper bişi gidin kurun)
Önce wireshark ile capture ı başlattım.
Sonra modemimin web arayüzü ile iletişim kurmayı sağlamak için browserıma 192.168.0.1 yazıp enter a bastım.
Sonrada ip.addr == 192.168.0.1 ile filtreleyerek sadece bu iletişimin görünmesini sağladım.
Kullandığım sistem virtualbox ta “NAT” bağlantısı bu nedenle modemin IPsi 192 grubunda iken sistemin IPsi 10 grubunda. ama buna takılmayın.
sonuçta aşağıda ki resim ortaya çıktı.

Burada incelediğimiz TCP pakette ki sayaçlar SEQ ve ACK numaralarının nasıl oluştuğudur. Wireshark ile diğer pek çok detay görülebilmekte ancak konumuz bunlar değil.
SEQ gönderilen paketin sıra numarası
ACK bir önce gönderdiğini aldım (SEQ+ Payload) bir sonra beklediğim (Payload+1)

Şimdi daha detaylı adım adım inceleyelim. Resimde en sol sütunda paket numaraları ve o numaralara göre adım adım gideceğiz.
TCP’de 3-way handshake denilen işlem en önce yapılır.
1nci paket –> istemci(client 10.0.2.15) sunucuya(server 192.168.0.1) e bir istek gönderir. Bu gönderdiği ilk pakettir ve TCP standartlarında tanımlanmış olan SYN bitini set etmiştir. SEQ numarasıda ilk paket olduğu için 0 dır.
2nci paket –> Server client in isteğini alır ve yine TCp standardında belirtildiği gibi SYN ve ACK bitlerini set eder. Kendi gönderdiği ilk paket olduğu için SEQ=0 ancak ilkini aldım bir sonra beklediğim 1 anlamında ACK 1 gönderir. NOT : ilerde göreceğiz SYN biti her zaman 1 payload olarak hesaplanıyor. Yani aslında burada olan Payload+1 gibidir.
3üncü paket –> client server ACK ine ACK ile cevap veriyor. gönderdiği ikinci paket olduğu için SEQ = 1 ve aldığını beklediğini göstermek için ACK 1 gönderiyor. yani ilk paketini aldım bir sonra beklediğim SEQ = 1
Ve böylece Handshake işlemi tamamlanmış oluyor.
4ncü paket –> Client handshake tamamlandığı için yapması gereken HTTP istediğini gönderiyor. şimdi bu noktada resmi incelerseniz üstte (açık yeşil bölümde) 4 nolu paketin seçilmiş olduğu altta ise detaylarını göreceksiniz. Burada önemli olan LEN değeridir. TCP Segment Len= 319
Server a gönderdiği ACK a ACK beklemediğinden paketin SEQ numarası halen 1 dir ve Server a bir önce gönderdiğinden sonra birşey gelmediğinden ACK numarası da halen 1 dir ve değişmemiştir.
5inci paket –> Şimdi server 319 byte lık HTTP/GET istediğini almıştır ve buna ACK gönderecektir. SEQ halen 1 dir çünkü gelen HTTP isteğinde öyle belirtilmiş (ACK 1). Ancak şimdi ACK gönderirken 320 olmuştur. payload+1 –> 319+1 yani diyor ki 319 byte lık paketi aldım bir sonra beklediğim SEQ nosu 320. ACK 320

6ıncı paket –> Ve server hemen ardından HTTP cevabını gönderiyor. SEQ ve ACK numaraları değişmedi çünkü karşıdan birşey gelmedi (server beklemedi gerek olmadığı için) Ayrıca bu pakette ki LEN değeride 225.
7inci paket –> Client ACK gönderir. SEQ 320 ve ACK 226 (225+1).
Eh buraya kadar client istedi server gönderdi iş bitti artık iletişimi kapatma zamanı.
Bu nedenle
8inci paket –> Server FIN,ACK bitleri set edilmiş paketi gönderir. SEQ 226 ve ACK 320
9uncu paket –> Client da serverın kapatma isteğini alır SEQ 320 ACK 227 gönderir (FIN = payload 1)
10uncu paket –> Server Clientin paketi aldığını ack eder SEQ 227 ACK 321 (FIN = payload 1)
Artık başka iletişim olmaz.

Leave a Reply