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

ss · netstat · ip
ağ durumu izleme.

Neyin nereye bağlı olduğunu bil. Hangi port açık, hangi route aktif, ARP tablosunda ne var — hepsini ss ve ip ile oku.

00 netstat vs ss — neden ss daha hızlı

netstat ve ss aynı bilgiyi döker. Ama farklı yollarla.

netstat, bilgiyi /proc/net/tcp, /proc/net/tcp6, /proc/net/udp gibi sanal dosyalar üzerinden okur. Kernel bu dosyaları her okumada sıfırdan oluşturur — binlerce soket varsa bu yavaştır.

ss (Socket Statistics), doğrudan kernel'ın Netlink socket API'sini kullanır. Kernel, socket bilgisini isteğe uygun filtreli olarak döner. Sonuç: binlerce socket'te netstat saniyeler alırken ss milisaniyeler alır.

bash
# netstat — iproute2 paketi olmayan sistemlerde hâlâ yaygın
netstat -tlnp   # TCP, listening, sayısal, process
netstat -an     # tüm soketler, sayısal
netstat -rn    # routing tablosu

# ss — modern, hızlı, zengin filtre
ss -tlnp        # TCP, listening, sayısal, process
ss -an          # tüm soketler, sayısal

# iproute2 paketi ile ss gelir
apt-get install iproute2
BUSYBOX ss

Busybox'ta ss mevcut ama sınırlıdır — filtre sözdizimi ve bazı flagler desteklenmeyebilir. Busybox netstat daha tutarlı çalışır. Hangi aracın ne desteklediğini cihaza özgü test et.

01 ss temel kullanım ve flagler

ss'in en sık kullanılan flaglerini ezberle — birkaç kombinasyon günlük işlerin %90'ını karşılar.

-t
Yalnızca TCP soketleri göster.
-u
Yalnızca UDP soketleri göster.
-x
Unix domain soketleri (IPC için kullanılan yerel soketler).
-l
Yalnızca LISTEN durumundaki (sunucu) soketleri göster.
-a
Tüm soketleri göster (listening + non-listening).
-n
Sayısal çıktı — IP adreslerini ve portları isime çözümleme.
-p
Soketi kullanan süreci (PID ve adı) göster. Root yetkisi gerekebilir.
-e
Genişletilmiş soket bilgisi — inode, uid, cookie.
-s
Özet istatistik — kaç TCP, UDP, RAW soket var.
-4
Yalnızca IPv4 soketleri.
-6
Yalnızca IPv6 soketleri.
-o
Timer bilgisi — TCP soketinin ne zaman timeout olacağı.

En sık kullanılan kombinasyonlar

bash
# Hangi portlar dinleniyor? (En sık kullanılan)
ss -tlnp

# Tüm TCP bağlantıları (ESTABLISHED dahil)
ss -tnp

# UDP portları
ss -ulnp

# TCP + UDP hepsi
ss -tunlp

# Özet — kaç soket var toplamda
ss -s

# Timer bilgisi ile — TIME_WAIT ne zaman kapanacak
ss -tno

# Unix domain soketleri
ss -xlp

Çıktı formatı

ss -tnp çıktısı
State    Recv-Q  Send-Q  Local Address:Port   Peer Address:Port   Process
ESTAB    0       0       192.168.1.10:22      192.168.1.5:54321   users:(("sshd",pid=1234,fd=3))
LISTEN   0       128     0.0.0.0:80           0.0.0.0:*           users:(("nginx",pid=5678,fd=6))
│        │       │       │                    │                   └─ sürec bilgisi (-p ile)
│        │       │       │                    └─ karşı taraf (dinlemede ise *)
│        │       │       └─ yerel adres:port
│        │       └─ gönderi kuyruğu (0 idealdir, yükseğe dikkat)
│        └─ alma kuyruğu (0 idealdir)
└─ TCP durumu

02 Bağlantı durumları — TCP state machine

ss çıktısında her satırın State sütununu doğru oku. Yanlış durum sorun işaretidir.

DurumAçıklamaNe zaman görülür
LISTENPort açık, bağlantı bekliyorSunucu servisleri
ESTABLISHEDAktif bağlantıNormal çalışma
SYN_SENTSYN gönderildi, yanıt bekleniyorBağlantı kurma
SYN_RECVSYN alındı, SYN-ACK gönderildiHandshake devam ediyor
FIN_WAIT1FIN gönderildi, yanıt bekleniyorBağlantı kapanıyor
FIN_WAIT2Karşı tarafın FIN'i bekleniyorHalf-close durumu
TIME_WAITBağlantı kapandı, port serbest bırakılmadıÇok sayıda → yük yüksek
CLOSE_WAITKarşı taraf kapattı, uygulama henüz kapatmadıÇok sayıda → kaynak sızıntısı
LAST_ACKFIN alındı, FIN+ACK gönderildiKapanma sürecinde
CLOSEDBağlantı tamamen kapatıldıNormal, nadiren görünür

Sorun belirtileri

CLOSE_WAIT çok sayıda

Uygulama, karşı tarafın kapattığı soketi kapatmıyor. Bu bir kaynak sızıntısı (resource leak) işaretidir. Uygulamanın soket yönetim kodunu incele — close() çağrılmıyor olabilir.

TIME_WAIT çok sayıda

Her TCP bağlantısı kapandıktan sonra 2×MSL (genellikle 60-120 saniye) TIME_WAIT'te bekler. Yüksek trafik sunucusunda bu normaldir ama port tükenmesine yol açabilir. net.ipv4.tcp_tw_reuse=1 sysctl değeri TIME_WAIT soketlerin yeniden kullanımını sağlar.

03 ss filtreleri — port, state, pid

ss, güçlü bir iç filtre dili sunar. Binlerce soket arasından sadece ilgilendiğini bul.

bash
# Belirli porta ait bağlantılar (kaynak port)
ss -tnp 'sport = :80'

# Belirli hedefe giden bağlantılar (hedef port)
ss -tnp 'dport = :443'

# Belirli IP adresine bağlantılar
ss -tnp 'dst 8.8.8.8'
ss -tnp 'src 192.168.1.10'

# Yalnızca ESTABLISHED durumundakiler
ss -tnp state established

# Yalnızca TIME_WAIT durumundakiler
ss -tn state time-wait

# Tüm non-LISTEN durumundakiler
ss -tn '! state listen'

# Port 80'e ESTABLISHED bağlantı sayısı
ss -tn state established 'dport = :80' | wc -l

# Belirli PID'in soketleri (-p ile PID bilgisi alınır)
ss -tnp | grep 'pid=1234'

# 8000-9000 arasındaki portlarda dinleyenler
ss -tlnp 'sport >= :8000 and sport <= :9000'
FİLTRE SÖYLEM DİLİ

ss filtresi şu operatörleri destekler: = != < > <= >=. Mantıksal: and, or, !. Adres: src, dst. State: state established, state listen vb.

04 ip komutu — addr, link, route, neigh

ip komutu (iproute2 paketi), eski ifconfig/route/arp üçlüsünün modern ve kapsamlı yerine geçenidir.

ip addr — IP adresleri

bash
# Tüm interface'lerin IP adreslerini göster
ip addr
ip addr show            # aynısı
ip addr show dev eth0   # sadece eth0

# Kısa format (sadece IPv4)
ip -4 addr show

# IP adresi ekle
sudo ip addr add 192.168.1.10/24 dev eth0

# IP adresi sil
sudo ip addr del 192.168.1.10/24 dev eth0

# İkincil IP adresi ekle (alias)
sudo ip addr add 192.168.1.20/24 dev eth0 label eth0:1

ip link — network interface'leri

bash
# Tüm interface'leri listele
ip link show
ip link show eth0   # sadece eth0

# Sadece UP olan interface'ler
ip link show up

ip route — routing tablosu

bash
# Routing tablosunu göster
ip route
ip route show

# Belirli bir hedefe hangi route kullanılır?
ip route get 8.8.8.8
# 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.10

ip neigh — ARP tablosu

bash
# ARP tablosunu göster (komşu/neighbor cache)
ip neigh
ip neigh show dev eth0   # sadece eth0

# ARP girişi ekle (statik ARP)
sudo ip neigh add 192.168.1.1 lladdr aa:bb:cc:dd:ee:ff dev eth0

# ARP girişi sil
sudo ip neigh del 192.168.1.1 dev eth0

# ARP tablosunu temizle (tüm interface)
sudo ip neigh flush all

ip neigh çıktı durumları

REACHABLE
ARP yanıtı alındı, MAC adresi doğrulandı, aktif kullanımda.
STALE
ARP kaydı eskidi, henüz silinmedi. Bir sonraki kullanımda yeniden doğrulanacak.
DELAY
Yeniden doğrulama bekleniyor.
PROBE
ARP isteği gönderildi, yanıt bekleniyor.
FAILED
ARP yanıtı alınamadı — cihaz erişilemez veya IP çakışması.
PERMANENT
Statik olarak eklenmiş, expire etmez.

05 ip ile interface yönetimi

ip link ile network interface'leri yönet — up/down, MTU, promiscuous mode ve daha fazlası.

bash
# Interface aç / kapat
sudo ip link set eth0 up
sudo ip link set eth0 down

# MTU değerini değiştir
sudo ip link set eth0 mtu 9000    # Jumbo frame
sudo ip link set eth0 mtu 1500    # Standart Ethernet

# Promiscuous mode aç (tcpdump gibi araçlar için)
sudo ip link set eth0 promisc on
sudo ip link set eth0 promisc off

# MAC adresini değiştir
sudo ip link set eth0 down
sudo ip link set eth0 address 02:00:00:00:00:01
sudo ip link set eth0 up

# Multicast etkinleştir / devre dışı bırak
sudo ip link set eth0 multicast on

# TX queue uzunluğunu değiştir (gönderme kuyruğu)
sudo ip link set eth0 txqueuelen 1000

# Sanal interface (dummy) oluştur — test için
sudo ip link add dummy0 type dummy
sudo ip link set dummy0 up
sudo ip addr add 10.0.0.1/32 dev dummy0

# VLAN interface oluştur
sudo ip link add link eth0 name eth0.100 type vlan id 100
sudo ip link set eth0.100 up
MTU SORUNLARI

Embedded sistemlerde özellikle VPN veya tunnel üzerinde çalışırken MTU uyumsuzluğu gizli bir sorun kaynağıdır. Büyük paketler parçalanır (fragmentation) veya PMTU Discovery başarısız olursa bağlantı kesilir. ping -s 1472 -M do gateway_ip ile path MTU'yu test et.

06 ip ile statik route yönetimi

ip route ile kernel routing tablosunu yönet — statik route ekle, sil, varsayılan gateway ayarla.

bash
# Varsayılan gateway ekle
sudo ip route add default via 192.168.1.1

# Varsayılan gateway sil
sudo ip route del default via 192.168.1.1

# Belirli ağa statik route ekle
sudo ip route add 10.10.0.0/16 via 192.168.1.254

# Belirli interface üzerinden route
sudo ip route add 10.10.0.0/16 dev eth1

# Route sil
sudo ip route del 10.10.0.0/16 via 192.168.1.254

# Blackhole route — belirli ağa trafiği düşür (null route)
sudo ip route add blackhole 192.168.100.0/24

# Route metric (öncelik) ayarla — düşük metric önceliklidir
sudo ip route add default via 192.168.1.1 metric 100
sudo ip route add default via 10.0.0.1 metric 200  # yedek gateway

# Hangi route kullanılacak — tanılama
ip route get 10.10.0.1
# 10.10.0.1 via 192.168.1.254 dev eth0 src 192.168.1.10

Policy routing — birden fazla tablo

bash
# İkinci routing tablosu oluştur (1-252 arası tablo ID)
sudo ip route add default via 10.0.0.1 table 200

# Kaynak IP'ye göre routing kural ekle
sudo ip rule add from 10.0.0.0/24 table 200

# Kuralları listele
ip rule show

07 Pratik: embedded network debug

Embedded cihazda ağ bağlantısı kesildi. Sistematik debug adımları.

Senaryo 1: Bağlantı kesilmesi

bash — adım adım debug
# 1. Interface durumu kontrol
ip link show eth0
# "DOWN" görüyorsan: ip link set eth0 up

# 2. IP adresi var mı?
ip addr show eth0
# Adres yoksa: DHCP çalışıyor mu? dhclient / udhcpc durumunu kontrol et

# 3. Default route var mı?
ip route show
# "default via ..." yoksa gateway ekle

# 4. Gateway'e ping
ping -c 3 192.168.1.1
# Ping başarısızsa: fiziksel bağlantı, kablo, switch

# 5. DNS çözümleme
ping -c 1 8.8.8.8          # IP ile dene (DNS bypass)
ping -c 1 google.com       # DNS ile dene
# IP çalışıyor ama DNS değilse: /etc/resolv.conf kontrol et

# 6. ARP tablosunu kontrol et
ip neigh show
# Gateway'in ARP'ı FAILED ise: fiziksel katman sorunu

Senaryo 2: ARP storm tespiti

bash
# ARP paket sayısını izle
sudo tcpdump -nn -i eth0 'arp' -l | \
  awk '{count++; if(count % 100 == 0) print count " ARP packets"}'
# Saniyede 100+ ARP görüyorsan storm var

# ARP flood kaynağını bul
sudo tcpdump -nn -e -i eth0 'arp' -l | \
  awk '{print $2}' | \
  sort | uniq -c | sort -rn | head -5

# Sorunlu kaynağa statik ARP ekle (storm sonlandırır)
sudo ip neigh replace 192.168.1.50 lladdr aa:bb:cc:dd:ee:ff dev eth0 nud permanent

Senaryo 3: Route sorunu

bash
# Hedef için route var mı?
ip route get 10.20.30.40
# "RTNETLINK answers: Network is unreachable" → route eksik

# Hangi interface üzerinden çıkıyor?
ip route get 10.20.30.40 | grep dev

# Route ekle ve test et
sudo ip route add 10.20.0.0/16 via 192.168.1.254
ping -c 3 10.20.30.40

# Traceroute ile hop'ları izle
traceroute 10.20.30.40
# Veya mtr ile:
mtr --report -n 10.20.30.40