00 iperf3 nedir — client-server modeli
iperf3, ağ performansını ölçmek için tasarlanmış aktif bir test aracıdır. Bir uçta server, diğer uçta client çalışır; aralarındaki gerçek throughput ölçülür.
[Client] →→→ TCP/UDP stream →→→ [Server]
iperf3 -c iperf3 -s
Ölçülen değerler:
TCP: throughput (Mbps), retransmitler
UDP: throughput, jitter (ms), paket kaybı (%)
iperf3, iperf2'nin yeniden yazımıdır. API uyumlu değildirler — sunucu ve client aynı majör versiyonu kullanmalıdır.
# Kurulum
apt-get install iperf3 # Debian/Ubuntu
apk add iperf3 # Alpine
iperf3 --version
# iperf 3.16
# Varsayılan port: 5201
# Firewall açık olmalı: sudo iptables -A INPUT -p tcp --dport 5201 -j ACCEPT
01 TCP bandwidth testi
TCP throughput, bir ağ bağlantısının gerçek veri transfer kapasitesini gösterir. Teorik bant genişliğiyle her zaman örtüşmez.
# Server başlat (varsayılan port 5201)
iperf3 -s
# Farklı port
iperf3 -s -p 9000
# Daemon modunda çalıştır
iperf3 -s -D
# Sadece bir bağlantı kabul et (-1)
iperf3 -s --one-off
# Temel TCP testi (10 saniye)
iperf3 -c 192.168.1.10
# Süreyi değiştir
iperf3 -c 192.168.1.10 -t 30 # 30 saniye
iperf3 -c 192.168.1.10 -t 60 # 1 dakika
# Belirli bant genişliği hedefle (0 = sınırsız)
iperf3 -c 192.168.1.10 -b 100M # TCP'de genellikle ihmal edilir
# JSON çıktısı (otomasyon için)
iperf3 -c 192.168.1.10 -J | jq '.end.sum_received.bits_per_second'
Çıktıyı okumak
Connecting to host 192.168.1.10, port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 113 MBytes 948 Mbits/sec 0 316 KBytes
[ 5] 1.00-2.00 112 MBytes 938 Mbits/sec 2 287 KBytes
│ │ │ │ │ └─ TCP congestion window
│ │ │ │ └─ retransmit sayısı (0 idealdir)
│ │ │ └─ bu aralıktaki throughput
│ │ └─ bu aralıkta aktarılan veri
│ └─ zaman aralığı (saniye)
└─ bağlantı ID
- - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 1.10 GBytes 944 Mbits/sec 4 sender ← ortalama
[ 5] 0.00-10.00 1.10 GBytes 940 Mbits/sec receiver
Retransmit sayısı paket kaybı veya congestion işaretidir. Yüksek retransmit → ağ problemli. Sıfır retransmit + yüksek throughput → sağlıklı bağlantı. Gigabit test sırasında 4-5 retr kabul edilebilir, 100+ retr sorun var demektir.
02 UDP jitter ve paket kaybı
UDP testleri gerçek zamanlı uygulamalar (VoIP, video, ses) için kritik iki metriği ölçer: jitter ve paket kaybı.
Jitter: Paketler arası gecikme varyasyonu. VoIP için <30ms, video için <50ms ideal. Yüksek jitter ses/görüntü kesintilerine yol açar.
Paket kaybı: UDP datagram'larının ne kadarının kaybolduğu. VoIP için <1%, video için <0.1% kabul edilebilir sınır.
# UDP testi — -u flag ile, -b ile hedef bant genişliği
# Server tarafı aynı (iperf3 -s)
# 100 Mbps UDP stream gönder
iperf3 -c 192.168.1.10 -u -b 100M
# 10 Mbps gönder, 30 saniye (VoIP simülasyonu)
iperf3 -c 192.168.1.10 -u -b 10M -t 30
# Paket boyutunu değiştir (-l = length)
iperf3 -c 192.168.1.10 -u -b 1M -l 200 # 200 byte (VoIP benzeri)
iperf3 -c 192.168.1.10 -u -b 50M -l 1400 # MTU'ya yakın (video benzeri)
UDP çıktısını okumak
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 119 MBytes 100 Mbits/sec 0.123 ms 3/85714 (0.0035%)
│ │ └─ kayıp yüzdesi
│ └─ kayıp/toplam datagram
└─ jitter (ms)
UDP testi için -b değerini ağ kapasitesinden yüksek ayarlama. Ağı doldurursun ve diğer trafiği engellersin. Önce -b 10M ile başla, kademeli artır. UDP'de congestion control yoktur — ağı ezebilir.
03 Paralel stream, ters yön ve bidir
Gerçek dünya koşullarını simüle et: birden fazla eşzamanlı bağlantı, hem upload hem download.
# Paralel stream (-P) — birden fazla TCP bağlantısı
# Tek bağlantının CPU/NIC sınırlarını aşmak için kullanılır
iperf3 -c 192.168.1.10 -P 4 # 4 paralel stream
iperf3 -c 192.168.1.10 -P 8 # 8 paralel stream
# Ters yön (-R = reverse) — server → client
# Download kapasitesini ölçer (client'a doğru)
iperf3 -c 192.168.1.10 -R
# Her iki yön aynı anda (--bidir)
iperf3 -c 192.168.1.10 --bidir
# Paralel + bidir kombinasyonu
iperf3 -c 192.168.1.10 -P 4 --bidir
# Rapor aralığını değiştir (-i saniye)
iperf3 -c 192.168.1.10 -i 0.5 -t 10 # 0.5 saniyede bir rapor
TCP window ve buffer ayarları
# TCP window boyutunu ayarla (-w)
# Yüksek latanslı bağlantılarda (WAN, satellite) throughput artırır
iperf3 -c 192.168.1.10 -w 1M # 1 MB window
iperf3 -c 192.168.1.10 -w 256K # 256 KB window
# MSS değerini ayarla (-M)
iperf3 -c 192.168.1.10 -M 1400
04 mtr — traceroute + ping kombinasyonu
mtr (Matt's TraceRoute), traceroute ve ping'i birleştirerek her hop'ta gerçek zamanlı istatistik gösterir.
# Interaktif mtr (canlı güncelleme)
mtr 8.8.8.8
# Rapor modu (N paket gönder, çık)
mtr --report 8.8.8.8
mtr -r 8.8.8.8 # kısa yazım
# Sayısal IP (DNS çözümlemesiz, daha hızlı)
mtr --report -n 8.8.8.8
# Paket sayısını artır (daha güvenilir istatistik)
mtr --report -n -c 100 8.8.8.8
# UDP ile traceroute
mtr --report -u 8.8.8.8
# TCP ile (ICMP engellenmiş ağlarda)
mtr --report -T -P 80 8.8.8.8
# JSON çıktısı
mtr --json -r 8.8.8.8
mtr çıktısını okumak
Start: 2026-04-12T10:00:00+0300
HOST: mydevice Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.1.1 0.0% 10 1.2 1.3 1.1 2.1 0.3
2.|-- 10.0.0.1 0.0% 10 5.4 5.2 4.8 6.1 0.4
3.|-- 85.34.1.1 20.0% 10 18.2 17.9 16.1 22.0 1.8
4.|-- 8.8.8.8 0.0% 10 18.4 18.1 17.5 19.2 0.5
│ │ │ │ │ │ │ │ └─ standart sapma
│ │ │ │ │ │ │ └─ en yüksek RTT
│ │ │ │ │ │ └─ en düşük RTT
│ │ │ │ │ └─ ortalama RTT (ms)
│ │ │ │ └─ son paketin RTT'si
│ │ │ └─ gönderilen paket sayısı
│ │ └─ kayıp yüzdesi
│ └─ hop IP adresi
└─ hop numarası
Bir hop'ta %100 kayıp görürsen paniklemeden devam et. Bazı router'lar ICMP TTL exceeded mesajlarını atlar (rate limiting veya firewall). Sonraki hop'lar cevap veriyorsa bağlantı sorunsuz — sadece o ara router ICMP yanıtlamıyor demektir.
05 ping — gelişmiş kullanım
ping, ICMP echo request/reply ile bağlantı testi yapar. Basit ama gelişmiş parametrelerle güçlü tanılama aracına dönüşür.
-i 0.2 daha hızlı test.# Temel ping (5 paket)
ping -c 5 192.168.1.1
# Path MTU discovery — 1472 byte paket, DF bit set
# Ethernet MTU 1500 = 1472 data + 20 IP header + 8 ICMP header
ping -c 3 -s 1472 -M do 192.168.1.1
# "Frag needed" hatası → MTU daha düşük
# Başarı → 1472+28 byte iletiliyor
# Flood ping — ağ stres testi (root gerekir)
sudo ping -f -c 10000 192.168.1.10
# ........ (nokta = gönderildi, backspace = alındı)
# Hızlı ping (0.2s aralık)
ping -i 0.2 -c 20 192.168.1.1
# Timestamp ile kayıp tespiti
ping -D -i 1 192.168.1.1 | \
awk '/no answer/{print "KAYIP:", $1}'
# TTL manipülasyonu — ilk hop'u bul
ping -c 1 -t 1 8.8.8.8
# TTL=1 → sadece ilk router'a ulaşır, ICMP time exceeded döner
06 Pratik: embedded network QoS doğrulama
Düşük işlemcili veya sınırlı bant genişlikli embedded cihazda iperf3 ile QoS gereksinimlerini doğrula.
Senaryo: Modbus TCP + MQTT eş zamanlı çalışması
Bir endüstriyel gateway, hem Modbus TCP (gerçek zamanlı, düşük gecikme) hem de MQTT (telemetri, yüksek throughput) trafiği taşıyacak. Bu iki trafiğin birbirini engellemediğini doğrula.
# Düşük işlemcili cihazda server
# --one-off: tek bağlantı kabul et, sonra çık (kaynak tasarrufu)
iperf3 -s --one-off -p 5201
# Arka planda çalıştır
iperf3 -s -D -p 5201
# PID dosyası: /var/run/iperf3.pid
# 1. Temel TCP throughput (ne kadar veri akıyor?)
iperf3 -c 192.168.1.100 -t 30 -i 5
# 2. UDP jitter testi (gerçek zamanlı kontrol mesajları için)
iperf3 -c 192.168.1.100 -u -b 1M -t 30 -l 200
# Hedef: jitter < 5ms, kayıp < 0.1%
# 3. Yüklü ağda UDP jitter (MQTT trafik simülasyonu)
# Terminal 1: arka planda TCP yükü oluştur
iperf3 -c 192.168.1.100 -t 60 -b 50M &
# Terminal 2: aynı anda UDP jitter ölç
iperf3 -c 192.168.1.100 -u -b 500K -t 60 -l 200 -p 5202
Kablosuz embedded cihaz (Wi-Fi) QoS
# Wi-Fi sinyal gücü
iwconfig wlan0 | grep 'Signal level'
# Signal level=-55 dBm → iyi (-70 ve altı zayıf)
# Wi-Fi bağlantı hızı kontrol
iwconfig wlan0 | grep 'Bit Rate'
# Bit Rate=54 Mb/s → 802.11g 150 Mb/s → 802.11n
# iperf3 testi + Wi-Fi istatistik eş zamanlı izle
iperf3 -c 192.168.1.1 -t 60 -J > iperf_wifi.json &
while sleep 5; do
iwconfig wlan0 | grep 'Signal\|Noise\|Bit Rate'
done
Hızlı QoS kabul kriteri scripti
#!/bin/sh
# QoS kabul testi: iperf3 + jq ile otomatik değerlendirme
TARGET_IP="192.168.1.100"
MIN_THROUGHPUT_MBPS="90" # en az 90 Mbps
MAX_JITTER_MS="5" # en fazla 5ms jitter
MAX_LOSS_PCT="0.1" # en fazla %0.1 kayıp
# TCP testi
tcp_result=$(iperf3 -c "$TARGET_IP" -J -t 10 2>/dev/null)
throughput=$(echo "$tcp_result" | jq '.end.sum_received.bits_per_second / 1000000')
if [ $(echo "$throughput < $MIN_THROUGHPUT_MBPS" | bc) -eq 1 ]; then
echo "HATA: Throughput düşük: ${throughput} Mbps (min: ${MIN_THROUGHPUT_MBPS})"
exit 1
fi
echo "TCP: ${throughput} Mbps ✓"