Ağ sorunlarını tespit etmek için onlarca araç var ama bant genişliği ölçümü söz konusu olduğunda iperf3, sistem yöneticilerinin vazgeçilmezi haline gelmiş durumda. “Neden yavaş?” sorusuna somut bir cevap vermek istiyorsanız, tahminlerle değil gerçek ölçümlerle konuşmanız gerekiyor. İşte tam bu noktada iperf3 devreye giriyor.
iperf3 Nedir ve Neden Kullanmalısınız?
iperf3, ağ bant genişliği ölçümü için kullanılan açık kaynaklı bir araçtır. Orijinal iperf projesinden tamamen yeniden yazılmış olan bu versiyon, daha temiz bir kod tabanı, daha iyi JSON çıktısı ve tek sunucu üzerinde birden fazla test desteği gibi özellikler sunuyor.
Gerçek hayatta karşılaştığınız şu senaryoları düşünün:
- Veri merkezi içi sunucular arası transfer hızı beklenenden düşük
- VPN tüneli üzerinden geçen trafiğin yavaş olduğundan şüpheleniyorsunuz
- Yeni kurulan 10GbE switch’in gerçekten 10Gbps verip vermediğini doğrulamak istiyorsunuz
- Bulut sağlayıcınızın vaat ettiği bant genişliğini aldığınızı kontrol etmek istiyorsunuz
Bu durumların hepsinde iperf3, size somut sayılar verir. “Yavaş gibi hissettiriyor” yerine “1.2 Gbps çıkıyor, 10GbE hattında sorun var” diyebilirsiniz.
Kurulum
iperf3 neredeyse tüm Linux dağıtımlarında ve Windows’ta kullanılabilir.
Debian/Ubuntu:
sudo apt update && sudo apt install iperf3
RHEL/CentOS/Rocky Linux:
sudo dnf install iperf3
# veya eski sistemlerde
sudo yum install iperf3
Windows: Windows için resmi iperf3 sitesinden (iperf.fr) pre-compiled binary indirebilirsiniz. Zip dosyasını çıkarıp PATH’e eklemek yeterli.
macOS:
brew install iperf3
Kurulum sonrası versiyonu doğrulayın:
iperf3 --version
Temel Kullanım: Sunucu ve İstemci Modları
iperf3, client-server mimarisinde çalışır. Bir uçta sunucu modunda çalıştırırsınız, diğer uçtan istemci modunda bağlanırsınız. Test etmek istediğiniz iki nokta arasında bu rollerden birini üstlenecek bir makineye ihtiyacınız var.
Sunucu Tarafı
# Temel sunucu başlatma (varsayılan port 5201)
iperf3 -s
# Belirli bir port üzerinde dinleme
iperf3 -s -p 9000
# Daemon modunda çalıştırma
iperf3 -s -D
# Çıktıyı log dosyasına yönlendirme
iperf3 -s --logfile /var/log/iperf3.log
Sunucu başladığında şuna benzer bir çıktı görürsünüz:
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
İstemci Tarafı
# Temel bant genişliği testi (10 saniye, varsayılan)
iperf3 -c 192.168.1.100
# Test süresini belirtme (30 saniye)
iperf3 -c 192.168.1.100 -t 30
# Belirli bir port kullanma
iperf3 -c 192.168.1.100 -p 9000
# İnsan tarafından okunabilir format
iperf3 -c 192.168.1.100 -f m
-s: Sunucu modunda çalıştır -c [host]: Belirtilen adrese istemci olarak bağlan -t [saniye]: Test süresini belirle -p [port]: Port numarasını belirle -f [format]: Çıktı formatı (b=bits, B=bytes, k, K, m, M, g, G) -D: Daemon modunda çalıştır –logfile: Log dosyası yolu
Firewall Ayarları
iperf3 testleri başlamadan önce firewall’un 5201 portuna (veya belirlediğiniz porta) izin verdiğinden emin olun.
# Ubuntu/Debian - UFW
sudo ufw allow 5201/tcp
sudo ufw allow 5201/udp
# RHEL/CentOS - firewalld
sudo firewall-cmd --permanent --add-port=5201/tcp
sudo firewall-cmd --permanent --add-port=5201/udp
sudo firewall-cmd --reload
# Geçici iptables kuralı
sudo iptables -I INPUT -p tcp --dport 5201 -j ACCEPT
sudo iptables -I INPUT -p udp --dport 5201 -j ACCEPT
UDP Testleri
Varsayılan olarak iperf3 TCP kullanır ama UDP testleri, özellikle VoIP ve video streaming altyapısı için kritik önem taşır. UDP testlerinde bant genişliğinin yanı sıra jitter ve paket kaybı da ölçülür.
# UDP testi, 100 Mbps hedef bant genişliği
iperf3 -c 192.168.1.100 -u -b 100M
# 1 Gbps UDP testi
iperf3 -c 192.168.1.100 -u -b 1G -t 60
# UDP ile jitter ve paket kaybı ölçümü
iperf3 -c 192.168.1.100 -u -b 500M -t 30 -i 5
-u: UDP protokolünü kullan -b [bant genişliği]: Hedef bant genişliği (UDP için önemli, yoksa varsayılan 1 Mbps) -i [saniye]: Ara rapor aralığı
UDP testinden tipik bir çıktı şöyle görünür:
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-30.00 sec 1.74 GBytes 498 Mbits/sec 0.182 ms 12/1256783 (0.00096%)
Burada jitter değeri 0.5ms altındaysa iyidir, paket kaybı ise yüzde 0.1’in altında olmalıdır. VoIP uygulamaları için bu değerler çok daha kritik hale gelir.
Paralel Stream’ler ile Gerçekçi Ölçüm
Tek bir TCP akışı, genellikle gerçek ağ kapasitesini tam olarak yansıtmaz. Üretim ortamında aynı anda onlarca bağlantı olur. Paralel stream’ler kullanarak daha gerçekçi sonuçlar elde edebilirsiniz.
# 4 paralel stream ile test
iperf3 -c 192.168.1.100 -P 4
# 8 paralel stream, 30 saniye
iperf3 -c 192.168.1.100 -P 8 -t 30
# 10GbE test için önerilen ayarlar
iperf3 -c 192.168.1.100 -P 8 -t 60 -f g
-P [sayı]: Paralel stream sayısı
10GbE veya 25GbE bağlantıları test ederken tek stream ile saturation’a ulaşamazsınız. Paralel stream kullanmak bu durumu ortadan kaldırır.
Ters Yön Testi (Reverse Mode)
Normalde istemci gönderir, sunucu alır. Ama download hızını test etmek istiyorsanız, reverse mode’u kullanmanız gerekir.
# Reverse mode: sunucu gönderir, istemci alır
iperf3 -c 192.168.1.100 -R
# Bidirectional test (iperf3 3.7+)
iperf3 -c 192.168.1.100 --bidir
-R: Reverse modda çalış (download testi için) –bidir: Eş zamanlı çift yönlü test
Bu özellik özellikle internet bağlantısını test ederken çok kullanışlıdır. ISP’nize “upload ve download hızı şu kadar” diyebilmek için bidirectional test yapın.
JSON Çıktısı ve Otomasyon
Otomasyon scriptleri veya monitoring sistemleri için JSON çıktısı hayat kurtarır. iperf3’ün JSON desteği bu konuda oldukça yeteneklidir.
# JSON çıktısı
iperf3 -c 192.168.1.100 -J
# JSON çıktısını dosyaya kaydetme
iperf3 -c 192.168.1.100 -J > /tmp/iperf_result.json
# jq ile parse etme
iperf3 -c 192.168.1.100 -J | jq '.end.sum_received.bits_per_second'
# Mbps cinsinden çıktı
iperf3 -c 192.168.1.100 -J | jq '.end.sum_received.bits_per_second / 1000000'
Bu JSON çıktısını Grafana veya Prometheus’a beslemek için aşağıdaki gibi basit bir script yazabilirsiniz:
#!/bin/bash
# Bant genişliği izleme scripti
# /usr/local/bin/bandwidth_check.sh
TARGET_HOST="192.168.1.100"
LOG_FILE="/var/log/bandwidth_monitor.log"
THRESHOLD_MBPS=800 # 1GbE için minimum 800 Mbps bekleniyor
RESULT=$(iperf3 -c $TARGET_HOST -J -t 10 2>/dev/null)
if [ $? -ne 0 ]; then
echo "$(date): HATA - $TARGET_HOST adresine ulaşılamıyor" >> $LOG_FILE
exit 1
fi
BITS=$(echo $RESULT | jq '.end.sum_received.bits_per_second')
MBPS=$(echo "scale=2; $BITS / 1000000" | bc)
echo "$(date): $TARGET_HOST -> $MBPS Mbps" >> $LOG_FILE
# Threshold altındaysa uyarı
if (( $(echo "$MBPS < $THRESHOLD_MBPS" | bc -l) )); then
echo "$(date): UYARI - Bant genişliği düşük: $MBPS Mbps (beklenen: $THRESHOLD_MBPS Mbps)" >> $LOG_FILE
# Buraya mail veya Slack notification eklenebilir
fi
Gerçek Dünya Senaryosu: Veri Merkezi Ağ Testleri
Bir veri merkezinde yeni sunucular kurduğunuzu düşünün. 10GbE switch aldınız, her şeyi bağladınız ama backup transferleri hala yavaş. Bunu sistemli şekilde test etmek için şu adımları izleyin:
1. Adım: Switch olmadan doğrudan bağlantı testi
İki sunucu arasına direkt kablo takın ve test edin:
# Sunucu 1'de
iperf3 -s
# Sunucu 2'de
iperf3 -c [sunucu1_ip] -P 8 -t 60 -f g
2. Adım: Switch üzerinden test
Normal kablo bağlantısıyla switch üzerinden test edin. Sonuç düşükse switch, kablo veya NIC’de sorun var demektir.
3. Adım: TCP window size optimizasyonu
# Büyük TCP window size ile test
iperf3 -c 192.168.1.100 -w 256K -P 4 -t 30
# Zero copy mode (kernel bypass benzeri)
iperf3 -c 192.168.1.100 -Z -P 4
# CPU affinity ile test
iperf3 -c 192.168.1.100 -A 2,6
-w [boyut]: TCP window size -Z: Zero copy mode, CPU kullanımını azaltır -A [cpu,cpu]: CPU affinity, hangi CPU çekirdeklerinin kullanılacağını belirler
WAN ve Yüksek Latency Ortamlar
Datacenter içi testler kolaydır. Ama WAN üzerinde veya yüksek latency olan bağlantılarda (VPN, uzak site, bulut) test yaparken dikkatli olmanız gerekir.
# Yüksek latency için büyük buffer
iperf3 -c uzak.sunucu.com -w 4M -t 60
# Bandwidth-delay product hesabı için
# BDP = Bandwidth x RTT
# 100Mbps x 100ms RTT = 1.25 MB window gerekir
iperf3 -c uzak.sunucu.com -w 2M -P 4 -t 60 -i 10
# Uzak sunucu üzerinde
iperf3 -s -i 1 --logfile /tmp/wan_test.log
Yüksek latency ortamlarda TCP window size’ın bandwidth-delay product’tan büyük olması gerektiğini unutmayın. Aksi takdirde TCP ACK bekleme süresi gerçek bant genişliğini kullanmanızı engeller.
Omit Özelliği ile Isınma Süresini Atlama
TCP slow start mekanizması nedeniyle testin ilk birkaç saniyesi yanıltıcı olabilir. Omit parametresi bu sorunu çözer:
# İlk 3 saniyeyi atla, gerçek hızı ölç
iperf3 -c 192.168.1.100 -O 3 -t 30
# Daha uzun ısınma süresi
iperf3 -c 192.168.1.100 -O 5 -t 60 -P 4
-O [saniye]: Belirtilen süre kadar ısınma süresi, bu sürenin sonuçları raporlanmaz
Sonuçları Yorumlamak
Test çıktısını doğru yorumlamak, doğru test yapmak kadar önemlidir.
# Örnek çıktı:
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 1.10 GBytes 9.44 Gbits/sec 0 3.00 MBytes
[ 5] 1.00-2.00 sec 1.09 GBytes 9.37 Gbits/sec 0 3.00 MBytes
...
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 10.9 GBytes 9.39 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 10.9 GBytes 9.38 Gbits/sec receiver
Çıktıda dikkat etmeniz gereken değerler şunlardır:
- Bitrate: Anlık ve ortalama bant genişliği
- Retr: TCP yeniden iletim sayısı. Yüksekse paket kaybı var demektir
- Cwnd: Congestion window boyutu. Bu değer stabil olmalı
- Jitter (UDP’de): Gecikme varyasyonu, 1ms altı idealdir
- Lost/Total (UDP’de): Paket kayıp oranı
Retr değeri sürekli artıyorsa ağda ciddi bir sorun var. Kablo kalitesini, NIC sürücülerini ve switch portunu kontrol edin.
Systemd Servisi Olarak Çalıştırma
Üretim ortamında iperf3 sunucusunu sürekli çalıştırmak isteyebilirsiniz. Bunun için systemd servisi oluşturmak en doğru yaklaşım:
# /etc/systemd/system/iperf3.service dosyasını oluşturun
sudo tee /etc/systemd/system/iperf3.service << EOF
[Unit]
Description=iperf3 Network Performance Tool
After=network.target
[Service]
ExecStart=/usr/bin/iperf3 -s -p 5201 --logfile /var/log/iperf3.log
Restart=always
RestartSec=5
User=nobody
Group=nogroup
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable iperf3
sudo systemctl start iperf3
sudo systemctl status iperf3
Güvenlik Uyarıları
iperf3 sunucusunu çalıştırırken bazı güvenlik noktalarına dikkat edin:
- Sunucuyu internete açmayın, sadece test yapacağınız ağ aralığına kısıtlayın
- Test bittikten sonra sunucuyu durdurun veya firewall kuralını kaldırın
- Mümkünse authentication için
--rsa-private-key-pathparametresini kullanın (iperf3 3.1+) - Privileged olmayan kullanıcıyla çalıştırın (yukarıdaki systemd örneğinde nobody kullanıcısı)
# Belirli bir IP'den bağlantıya izin ver
sudo iptables -I INPUT -p tcp --dport 5201 -s 10.0.0.0/8 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 5201 ! -s 10.0.0.0/8 -j DROP
Yaygın Sorunlar ve Çözümleri
Bağlantı reddedildi hatası:
# Sunucunun çalışıp çalışmadığını kontrol edin
ss -tlnp | grep 5201
# veya
netstat -tlnp | grep 5201
Düşük performans:
# MTU sorununu kontrol edin
ping -M do -s 1472 192.168.1.100
# NIC offloading durumu
ethtool -k eth0 | grep -E "tcp-segmentation|generic-segmentation|large-receive"
# IRQ affinity kontrolü
cat /proc/interrupts | grep eth
CPU darboğazı:
# Test sırasında CPU kullanımını izleyin
# Ayrı bir terminalde:
mpstat -P ALL 1
# Zero copy ile CPU kullanımını azaltın
iperf3 -c 192.168.1.100 -Z
Sonuç
iperf3, ağ sorunlarını teşhis etmek için sysadmin çantanızda bulunması gereken temel araçlardan biri. Kurulumu kolay, kullanımı pratik ve çıktıları yorumlanabilir. Basit bir TCP bandwidth testinden JSON tabanlı otomatik izleme scriptlerine, UDP jitter ölçümünden WAN optimizasyonuna kadar geniş bir kullanım alanı sunuyor.
Önemli olan, iperf3’ü düzenli aralıklarla kullanarak ağınızın “normal” davranışını öğrenmek. Bir sorun çıktığında baseline değerleriniz olmadan “bu normal mi değil mi” sorusuna cevap vermek çok zor olur. O yüzden yukarıdaki monitoring scriptini alın, cron’a ekleyin, sonuçları bir yere kaydedin. Sonradan teşekkür edersiniz.
Ağ performans sorunlarının yüzde sekseninin kablo, SFP modülü veya switch port hatasından kaynaklandığını da söylemeden geçmeyeyim. iperf3 size sayıları verir, nedenini bulmak yine de sizin işiniz. Ama en azından “sorun var” ile “sorun yok” arasındaki farkı net olarak ortaya koyar, bu bile büyük bir değer.