Ağ Araçları
TEKNİK REHBER AĞ ARAÇLARI PERFORMANS 2026

iperf3 · mtr
bant genişliği ve yol testi.

Ağın ne kadar hızlı olduğunu ölç. Yolda ne kadar gecikme ve kayıp var bil. Embedded cihazda QoS'u doğrula.

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.

bash
# 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.

bash — server tarafı
# 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
bash — client tarafı
# 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

iperf3 -c çıktısı
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
RETR (RETRANSMIT)

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.

bash
# 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

iperf3 -u çıktısı
[ 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 BANDWIDTH AŞIMI

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.

bash
# 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ı

bash
# 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.

bash
# 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

mtr --report -n çıktısı
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ı
HOP'TA KAYIP — YANILTICI OLABİLİR

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.

-c N
N paket gönder ve çık. Script'te kullanmak için zorunlu.
-i saniye
Paketler arası bekleme (varsayılan 1s). -i 0.2 daha hızlı test.
-s boyut
Paket boyutu (byte). MTU testi için kullanılır.
-M do
Fragmentation yasak (DF bit). Path MTU testi için kritik.
-t TTL
Gönderilen paketin TTL değeri.
-q
Quiet mod — sadece özet göster.
-f
Flood ping — cevap gelir gelmez yeniden gönder. Root gerekir. Ağ stres testi.
-D
Her satıra Unix timestamp ekle.
-W timeout
Her yanıt için bekleme süresi (saniye).
bash
# 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.

bash — embedded cihazda iperf3 server
# 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
bash — geliştirme makinesinde test
# 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

bash
# 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

bash — otomatik QoS test
#!/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 ✓"