TCP (MSS, MTU ve Windowing)
Bir ağ mühendisinin en sık duyduğu şikayet şudur: "Hattım 100 Mbit ama dosya indirirken 2 Mbit'i geçemiyorum." Sorun genellikle bant genişliği değil, TCP'nin fiziğidir.
1. MSS vs. MTU: "Tünelin Tavanı Alçaksa"
FortiGate üzerinde IPsec VPN veya PPPoE kurduğunda en büyük baş belası MTU (Maximum Transmission Unit) ve MSS (Maximum Segment Size) uyumsuzluğudur.
MTU (L3 Sınırı): Ethernet için standart 1500 byte'tır. Yani tırın taşıyabileceği maksimum yük + konteyner ağırlığı.
MSS (L4 Sınırı): TCP payload'unun (faydalı verinin) maksimum boyutu. Yani sadece konteynerin içindeki yük.
Sorun: VPN tüneli (IPsec) araya girdiğinde, paketin başına ek header'lar (ESP, AH vs.) gelir. Eğer gönderici hala 1500 byte'lık paket yollarsa, VPN header'ı eklenince paket 1500'ü geçer ve Fragmentasyon (parçalanma) gerekir. Çoğu firewall (ve "Don't Fragment - DF bit" işaretli paketler) bunu reddeder. Sonuç: Web siteleri açılmaz, SSH kopar.
Çözüm (FortiGate): tcp-mss ayarı. FortiGate, geçen SYN paketini yakalar ve "Kardeşim senin MSS değerin 1460 görünüyor ama tünelden geçeceksin, onu 1350'ye düşür" diyerek paketi manipüle eder (MSS Clamping).
2. TCP Window Size: Hızın Gerçek Limiti
Bant genişliğin ne kadar yüksek olursa olsun, TCP'nin hızını belirleyen şey Latency (Gecikme) ve Window Size çarpımıdır.
Mantık: Alıcı (Receiver), göndericiye (Sender) "Şu an tampon belleğimde (buffer) 64KB yer var, bana onay (ACK) beklemeden 64KB veri gönderebilirsin" der.
Darboğaz: Eğer Türkiye'den Amerika'ya (high latency) veri atıyorsan ve Window Size küçükse, gönderici bir paket atar ve ACK gelene kadar bekler. Hat boşta yatar.
Bandwidth-Delay Product (BDP): Hattı tam doldurmak için gereken Window boyutudur.
Formül: Hız (bit/sec) * Gecikme (sec) / 8 = Gereken Window (Byte)
Pratik Örnek: FortiGate WAN Optimization özelliği veya SD-WAN, bu Window boyutunu sanal olarak manipüle ederek hattı daha verimli kullanmaya çalışır.
3. TCP Flags ve "Zombie" Sessionlar
Siber güvenlikte TCP bayrakları (Flags) hayati önem taşır.
SYN Flood: Klasik DDoS. Sürekli "Merhaba" deyip elini uzatmak ama asla tokalaşmamak.
RST (Reset) vs. FIN (Finish):
Normal kapanış FIN ile olur (karşılıklı vedalaşma).
Ancak FortiGate bir trafiği blokladığında bazen sessizce paketi düşürür (Drop), bazen de RST yollar.
Troubleshooting İpucu: Eğer yazdığın bir Python uygulaması veritabanına bağlanırken aniden hata veriyorsa, aradaki firewall sessizce (silent drop) mi kesiyor yoksa RST mi atıyor? tcpdump veya Wireshark'ta bolca "Kırmızı" (RST) paket görüyorsan, bir güvenlik cihazı araya giriyor demektir.
4. Python ile TCP Socket Yönetimi
Web geliştirmede (Flask) genellikle HTTP kütüphaneleri kullanıyoruz ama alt tarafta socket kütüphanesi çalışır.
Keep-Alive: TCP handshake maliyetli bir işlemdir. Her HTTP isteği için yeni bir el sıkışma yapmak yerine, TCP bağlantısını açık tutmak (Keep-Alive) performansı artırır. Flask/Gunicorn ayarlarında keepalive parametresi bu yüzden kritiktir.
yazar: Asrın Haktan Şahin
