TCP nasıl çalışır — 2?

Bu flood’da TCP (Transmission Control Protocol) protokolünün nasıl çalıştığını anlatmaya devam edeceğim.

Büyük bir TCP paketinin karşı tarafa gönderilebilmesi için Frame'lere bölünmesi gerekir. MSS - Maximum Segment Size, paketin sahip olabileceği en büyük boyutu ifade eder ve bağlantının iki ucu 3-Way Handshake sırasında hangi MSS değerini destekledikleri gönderebilirler.

Bu noktada farklı ağlarda olan gönderici ve alıcının aradaki ağ elemanları üzerinden taşınması gerekeceği için bu ağ elemanları, kendi destekledikleri değer gönderici ve alıcının gönderdiği MSS değerinden daha düşükse MSS değerini değiştirebilirler. OSI 4. katmandaki MSS değeri tahmin edilebileceği üzere 3. katmandaki MTU - Maximum Transmission Unit'e bağımlıdır o da 2. katmandaki Ethernet Frame Size'a bağımlıdır. MTU'dan (1500), IP Header (20 byte) ve TCP Header (20 byte) çıkarılırsa MSS değeri (1460) bulunmuş olur.

Linux’ta bir ağ arayüzünün (Network Interface) göndereceği IP paketlerine kullandıracağı MTU aşağıdaki gibi öğrenilebilir. Modern sistemlerde bu değer, ağ arayüzü VPN vb için kullanılmıyorsa neredeyse standart gibidir.

Önceki flood’da Window Size'a değinmiş ve ACK beklemeden karşı tarafa gönderilebilecek veri miktarını temsil ettiğini söylemiştik. Window Size'a TCP Header'da tarihsel olarak sadece 2 byte yer ayrılmıştır bu da Windows Size'ı teknik olarak 65535 olarak sınırlamıştır.

Window Scaling adı verilen teknikle anlatılan sınırlamanın üstesinden gelinir. 3-Way Handshake sırasında iki parti de birbirine istediği Window Scale'i söyler. Efektif Window Size, paketteki Window Size değeri ile 2 ^ Window Scale'in çarpımı ile bulunur.

TCP, ortak kullanılan ağlarda sıkışıklık yaratmamak için genel olarak Congestion Control - Sıkışıklık Kontrolü olarak bilinen bazı tedbirler uygular. Bu tedbirlerden biri Slow Start olarak adlandırılır. Bu teknikte bağlantı ilk açıldıktan sonra karşı tarafın deklare ettiği Window Size yerine MSS'in birkaç katına denk gelen bir Window Size ile iletişim başlar. Karşı taraf paketlere ACK gönderdikçe ve paket kaybı yaşanmadıkça Windows Size birer MSS değeri kadar artırılır. Yavaş başlanır ama kısa sürede en yüksek Window Sizea ulaşılır.

Slow Start paket kayıplarının ağdaki sıkışıklıktan kaynaklı olduğunu düşünür fakat kablosuz ağlarda yaşanan kayıplar kapsama alanı problemlerinden de olabilir. Dolayısıyla kablosuz ağlarda ve mobil istemcilerde Slow Start performansı olumsuz etkileyebilir.

Bir başka Congestion Control mekanizması da ECN - Explicit Congestion Notification'dur. Karşı taraftan ECN bitli paket alan gönderici paket kaybı oluştuğunda aldığı aksiyonları uygular ve karşı tarafa CWR - Congestion Window Reduced işaretli paket gönderir.

Partiler 3-Way Handshake sırasında ECN ve CWR destekleyip desteklemediklerini birbirlerine haber verirler. Bu mekanizma sayesinde anlık olarak sıkışıklık yaşayan cihazlar karşı tarafta bulunan cihazlardan paket gönderimlerini yavaşlatmasını isteyebilir.

Son olarak TCP Keep Alive tekniği ile bir parti diğerine boş bir TCP paketi gönderip bağlantının açık olup olmadığını anlayabilir. Yine aynı yöntemle NAT ve Proxy'ler kandırılır ve arkalarındaki cihazların bağlantısını inaktivite dolayısıyla koparmalarının önüne geçilir.

İlerleyen flood’larda TCP bağlantısının kapatılması için kullanılan dört aşamalı proses ve Nagle algoritmasını pratik örneklerle inceleyeceğiz.