Linux sunucularında ağ performansı, modern veri merkezleri ve bulut altyapılarında kritik bir öneme sahiptir.
Linux sunucularında ağ performansı, modern veri merkezleri ve bulut altyapılarında kritik bir öneme sahiptir. TCP Window Size ayarı, TCP protokolünün veri akışını yöneten temel parametrelerden biridir. Bu ayar, alıcı tarafın ne kadar veriyi tamponlayabileceğini belirleyerek bant genişliği kullanımını optimize eder. Özellikle yüksek hızlı ağlar ve büyük veri transferlerinde, varsayılan değerler yetersiz kalabilir. Bu makalede, TCP Window Size’in ne olduğunu, Linux’ta nasıl yapılandırılacağını ve en iyi uygulamaları adım adım inceleyeceğiz. Sunucu yöneticileri için pratik rehberlik sağlayarak, ağ gecikmelerini azaltma ve throughput’ü artırma yollarını ele alacağız.
TCP Window Size, TCP başlıklarında yer alan bir alan olup, göndericiye alıcının mevcut tampon kapasitesini bildirir. Bu değer dinamik olarak değişebilir ve TCP’nin akış kontrolü mekanizmasını destekler. Linux kernel’inde, varsayılan window boyutu genellikle 64KB civarındadır, ancak Gigabit Ethernet veya 10Gbps bağlantılarda bu değer yetersiz kalır. Window scaling özelliği etkinleştirildiğinde (RFC 7323’e göre), window boyutu 16 bite kadar ölçeklenebilir, böylece 1GB’a varan değerler desteklenir.
Büyük window boyutları, özellikle uzun mesafeli bağlantılarda (high BDP – Bandwidth Delay Product) fayda sağlar. Örneğin, bir sunucuda gecikme 100ms ve bant genişliği 1Gbps ise, BDP yaklaşık 12MB olur. Varsayılan ayarlar bu değeri karşılayamazsa, ağ tıkanıklığı oluşur. Window Size’i artırmak, pipelining’i iyileştirir ve genel throughput’ü %50’ye varan oranlarda yükseltebilir. Ancak, aşırı büyük değerler bellek tüketimini artırır, bu yüzden sunucu RAM kapasitesine göre dengelenmelidir.
Linux’ta window scaling varsayılan olarak etkindir, ancak sysctl ile doğrulanmalıdır. Komut: sysctl net.ipv4.tcp_window_scaling. Değer 1 olmalıdır. Etkinleştirmek için echo 1 > /proc/sys/net/ipv4/tcp_window_scaling kullanılır. Bu, TCP handshake sırasında WSOPT seçeneğini etkin kılar ve shift değerini belirler. Pratikte, 10Gbps ağlar için shift 7-10 arası idealdir, yani window 128KB-1MB aralığına çıkar.
BDP = Bant Genişliği (bps) x RTT (saniye). Örneğin, 10Gbps (10^10 bps) ve 50ms RTT için BDP = 10^10 * 0.05 = 500MB. Window Size en az bu değere yakın tutulmalıdır. Araçlarla RTT ölçümü: ping veya mtr. Bu hesaplama, rmem ve wmem buffer’larını belirlemede kullanılır, böylece kernel otomatik tuning yapabilir.
Linux kernel parametreleri /proc/sys/net/ipv4/ altında yönetilir. Ana parametreler: tcp_rmem (alıcı buffer: min default max), tcp_wmem (gönderici buffer) ve tcp_adv_win_scale. Kalıcı ayar için /etc/sysctl.conf dosyasını düzenleyin, ardından sysctl -p ile uygulayın. Geçici testler için doğrudan echo komutu yeterlidir. Değerler KB cinsindendir ve max 16MB’ı aşmamalıdır.
net.ipv4.tcp_rmem = 4096 87380 16777216: Min 4KB, default 87KB, max 16MB.net.ipv4.tcp_wmem = 4096 65536 16777216: Benzer şekilde gönderici için.net.ipv4.tcp_adv_win_scale = 1: Reklam window’u %12.5 küçültür, verimliliği artırır.Bu ayarlar sonrası sunucuyu yeniden başlatmayın, sysctl ile anında geçerlidir. Değişiklikleri doğrulamak için sysctl -a | grep tcp_rmem kullanın. Yüksek trafik sunucularda (web, veritabanı), max değeri RAM’in %1-2’sine göre ayarlayın; örneğin 64GB RAM için 64MB max uygundur.
1. Mevcut değerleri not alın: cat /proc/sys/net/ipv4/tcp_rmem. 2. /etc/sysctl.conf’a ekleyin. 3. sysctl -p çalıştırın. 4. ss -m ile bağlantı buffer’larını izleyin. Örnek: Yüksek yükte window 1MB’a ulaşıyorsa başarılıdır. Firewall (iptables/ufw) kuralları etkilemez, sadece kernel seviyesindedir.
Sık hata: Max değer aşımı, OOM killer tetiklenir. Çözüm: ulimit ve vm.overcommit_memory=1 ayarlayın. Başka hata: Auto-tuning devre dışı; net.ipv4.tcp_mtu_probing=1 etkinleştirin. Test için iperf3 kullanın: iperf3 -s sunucu, iperf3 -c host -w 1M istemci. Throughput artışı gözlemlenir.
Ayar sonrası izleme şarttır. Araçlar: netstat, ss, tcpdump. ss -tulnmp socket detaylarını, cat /proc/net/sockstat TCP istatistiklerini gösterir. Yüksek retransmit varsa window küçültün. Grafik araçlar için Prometheus + Grafana entegrasyonu önerilir, tcp_rmem metriklerini scrape edin.
Optimizasyon: Jumbo frames (MTU 9000) ile birleştirin, net.core.rmem_max artırın. Bulut ortamlarında (AWS, GCP), instance tipiyle uyumlu tutun. Düzenli test: WAN bağlantılarında before/after iperf karşılaştırması yapın. Uzun vadede, kernel tuning ile %30-40 throughput kazancı standarttır.
Sonuç olarak, TCP Window Size ayarı Linux sunucularında ağ performansını dönüştüren basit ama güçlü bir araçtır. Bu rehberdeki adımları uygulayarak, gecikmeleri minimize edip veri transfer hızlarını maksimize edebilirsiniz. Sunucu ortamınıza özel testler yaparak ince ayarlar yapmayı unutmayın; düzenli izleme ile stabilite sağlayın. Bu optimizasyonlar, kurumsal altyapılarda rekabet avantajı yaratır.