| name | network-diagnostics-troubleshooting |
| description | Guide complet du diagnostic et troubleshooting réseau — ping, traceroute, mtr, iperf, tcpdump, ss, nmap, tc (traffic control), pathMTU, latence, jitter, perte de paquets, et résolution de pannes. |
| tags | ["troubleshooting","tcpdump","traceroute","mtr","iperf","nmap","ss","tc","network-diagnostics","packet-loss","latency"] |
Diagnostic et Troubleshooting Réseau
Présentation
Guide complet des outils et techniques de diagnostic réseau : de la couche physique à l'application, en passant par la détection des goulots d'étranglement, pertes de paquets, latence, et problèmes de routage.
Outils Essentiels
Stack de Diagnostic
Couche 1-2 (Physique/Liaison)
├── ethtool — Vitesse, duplex, statistiques carte
├── mii-tool — État liaison
├── ip link — État interface
└── lldpctl — Voisins LLDP/CDP
Couche 3 (Réseau)
├── ping — ICMP reachability
├── traceroute — Chemin réseau
├── mtr — Trace continu
├── ip route — Table de routage
└── nmap — Scan de ports
Couche 4 (Transport)
├── ss — Socket statistics
├── netstat — (legacy) connexions réseau
├── iperf3 — Bandwidth test
└── tc — Traffic control
Couche 5-7 (Application)
├── curl/wget — HTTP tests
├── dig/nslookup — DNS
├── openssl — TLS handshake
└── tcpdump/Wireshark — Capture de paquets
tcpdump — Capture et Analyse de Paquets
Commandes Essentielles
tcpdump -i eth0 -nn
tcpdump -i eth0 -c 1000
tcpdump -i eth0 -s 0 -w capture.pcap
tcpdump -i eth0 icmp
tcpdump -i eth0 tcp
tcpdump -i eth0 udp
tcpdump -i eth0 arp
tcpdump -i eth0 host 192.168.1.1
tcpdump -i eth0 src 10.0.0.1
tcpdump -i eth0 dst 10.0.0.1
tcpdump -i eth0 net 192.168.1.0/24
tcpdump -i eth0 port 22
tcpdump -i eth0 port 80 or port 443
tcpdump -i eth0 portrange 1-1024
tcpdump -i eth0 src port 53
tcpdump -i eth0 'host 10.0.0.1 and port 80'
tcpdump -i eth0 'not arp and not icmp'
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'
tcpdump -i eth0 -v
tcpdump -i eth0 -vv
tcpdump -i eth0 -X
tcpdump -i eth0 -A
tcpdump -i eth0 'tcp[13] & 4 != 0'
tcpdump -i eth0 'tcp[13] & 16 != 0'
tcpdump -i eth0 'icmp[icmptype] != 8 and icmp[icmptype] != 0'
tcpdump -i eth0 'len > 1000'
tcpdump -i eth0 'less 64'
tcpdump -i eth0 -tttt
tcpdump -i eth0 -ttt
Cas Pratiques tcpdump
tcpdump -i eth0 -nn 'host 10.0.0.50 and port 8080' -c 10
tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'
tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0'
tcpdump -i eth0 -nn 'host 10.0.0.1 and host 10.0.0.50'
tcpdump -i eth0 -nn port 53 -X
tcpdump -i eth0 -nn 'broadcast or multicast' -c 1000
tcpdump -i eth0 -nn 'src 10.0.0.1 and dst 10.0.0.50 and port 3306'
MTR — Traceroute Amélioré
Utilisation
mtr 8.8.8.8
mtr -n 8.8.8.8
mtr -r -c 100 8.8.8.8
mtr -r -c 10 -n google.com --report
mtr -i 0.5 8.8.8.8
mtr -P 443 10.0.0.1
mtr -r -c 30 -n 1.1.1.1
Interprétation MTR
My traceroute [v0.95]
Keys: Loss% Snt Last Avg Best Wrst StDev
1. 192.168.1.1 0.0% 30 0.5 0.6 0.4 1.2 0.2
2. 10.0.0.1 0.0% 30 1.2 1.5 1.0 3.1 0.4
3. 203.0.113.1 5.0% 30 15.2 16.1 14.8 22.3 1.5 ← Perte anormale
4. 198.51.100.1 40.0% 30 18.5 19.2 17.5 25.1 2.0 ← PROBLÈME !
5. 1.1.1.1 0.0% 30 20.1 21.0 19.5 28.2 2.1
Analyse des Patterns
Pattern 1: Perte à un hop, recovery ensuite
→ Le hop ignore ICMP (rate limiting) — pas un problème réel
Pattern 2: Perte qui s'aggrave et ne récupère pas
→ Problème sur ce lien ou équipement
Pattern 3: Latence qui double soudain
→ Changement de chemin (routage asymétrique)
Pattern 4: Latence croissante régulièrement
→ Congestion, buffer bloat
Pattern 5: Perte intermittente (> 1%)
→ Problème physique (fibre, SFP, câble Ethernet)
iperf3 — Tests de Bande Passante
Tests de Base
iperf3 -s -p 5201
iperf3 -c 192.168.1.10 -p 5201 -t 30
iperf3 -c 192.168.1.10 -u -b 1000M -t 30
iperf3 -c 192.168.1.10 -d -t 30
iperf3 -c 192.168.1.10 -R -t 30
iperf3 -c 192.168.1.10 -P 4 -t 30
iperf3 -c 192.168.1.10 -b 100M -t 30
iperf3 -c 192.168.1.10 -J -t 10
Interprétation iperf3
[ ID] Interval Transfer Bitrate
[ 5] 0.00-30.00 sec 3.45 GBytes 987 Mbits/sec → 1Gbps full
[ ID] Interval Transfer Bitrate Jitter Lost/Total
[ 5] 0.00-30.00 sec 1.20 GBytes 343 Mbits/sec 0.124ms 350000/1000000 (35%)
[ ID] Interval Transfer Bitrate Jitter Lost/Total
[ 5] 0.00-30.00 sec 3.50 GBytes 1000 Mbits/sec 0.050ms 0/1000000 (0%)
Script de Benchmark
#!/bin/bash
echo "=== Test TCP ==="
iperf3 -c $1 -t 10 -P 4 | tail -3
echo "=== Test UDP (1Gbps) ==="
iperf3 -c $1 -u -b 1000M -t 10 | tail -5
echo "=== Test UDP (100Mbps) ==="
iperf3 -c $1 -u -b 100M -t 10 | tail -5
echo "=== Latence (ping) ==="
ping -c 30 $1 | tail -1
echo "=== MTR ==="
mtr -r -c 30 -n $1 | tail -20
ss — Socket Statistics
Commandes Essentielles
ss -t
ss -tan
ss -tup
ss -tanp
ss -t state established
ss -t state listening
ss -t state time-wait
ss -t state fin-wait-1
ss -t state close-wait
ss -t state syn-recv
ss -t dst 10.0.0.50
ss -t src :80
ss -t 'sport = :22'
ss -t 'dport = :443'
ss -an sport = :80
ss -t -m
ss -t -i
ss -t src 10.0.0.1:443
ss -tlnp 'sport = :80'
ss -t | awk '{print $1}' | sort | uniq -c | sort -rn
ss -t | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
Interprétation
ss -t state time-wait | wc -l
ss -t state syn-recv | wc -l
ss -t state close-wait | wc -l
ss -t -m | grep -c skmem
tc — Traffic Control
Visualisation des Files d'Attente
tc -s qdisc show dev eth0
tc -s qdisc show dev eth0 | grep -A5 "qdisc pfifo"
tc -s qdisc show dev eth0
qdisc pfifo_fast 0: root bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 472537624 bytes 456789 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
Détection de Bufferbloat
ping -c 10 8.8.8.8 | tail -1
iperf3 -c 192.168.1.10 -t 30 &
sleep 5
ping -c 10 8.8.8.8 | tail -1
tc qdisc replace dev eth0 root fq_codel
tc qdisc replace dev eth0 root cake bandwidth 100mbit
Simulation de Pannes (pour tests)
tc qdisc add dev eth0 root netem delay 100ms
tc qdisc add dev eth0 root netem loss 5%
tc qdisc add dev eth0 root netem delay 100ms 10ms loss 5% 25%
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit limit 10000
tc qdisc add dev eth0 root netem corrupt 2%
tc qdisc add dev eth0 root netem duplicate 1%
tc qdisc add dev eth0 root netem delay 10ms reorder 25% 50%
tc qdisc del dev eth0 root
nmap — Scan de Réseau et Découverte
Commandes de Diagnostic
nmap -sn 192.168.1.0/24
nmap -F 192.168.1.1
nmap -sV 192.168.1.1
nmap -O 192.168.1.1
nmap -p- 192.168.1.1
nmap -sA 192.168.1.1
nmap -sU -p 53,67,68,123,161 192.168.1.1
nmap --script vuln 192.168.1.1
nmap --traceroute 8.8.8.8
nmap -oX scan.xml 192.168.1.0/24
nmap -oN scan.txt 192.168.1.0/24
Path MTU Discovery
Test de Path MTU
ping -M do -s 1472 8.8.8.8
ping -M do -s 1400 8.8.8.8
ping -M do -s 1300 8.8.8.8
ping -M do -s 1200 8.8.8.8
tcpdump -i eth0 -nn 'icmp[icmptype] == 3 and icmp[icmpcode] == 4'
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --set-mss 1400
ip link show | grep mtu
ip link set dev eth0 mtu 9000
Résolution de Pannes — Checklist
Panne Réseau
1. Vérifier la couche physique
├── ethtool eth0 → Speed/Duplex/Link detected
├── ip link show → UP/DOWN/state
└── cable test / SFP diagnostics
2. Vérifier la couche IP
├── ip addr show → Adresse IP configurée
├── ip route show → Route par défaut
├── ping 127.0.0.1 → Loopback OK
├── ping <gateway> → Gateway reachable
└── ping 8.8.8.8 → Internet OK
3. Vérifier la résolution DNS
├── dig @1.1.1.1 example.com
├── nslookup example.com
└── host example.com
4. Vérifier les connexions applicatives
├── ss -tlnp → Services en écoute
├── nmap -p 80 localhost → Port local OK
├── curl -I http://example.com → HTTP OK
└── openssl s_client -connect example.com:443 → TLS OK
5. Vérifier le chemin
├── mtr -r -c 30 8.8.8.8
└── traceroute -n 8.8.8.8
Panne Performance
1. Identifier le goulot
├── iperf3 → Bande passante disponible
├── ping → Latence base
├── ping + iperf3 → Bufferbloat
└── ss -ti → TCP RTT, cwnd, ssthresh
2. Vérifier la congestion
├── tc -s qdisc → Drops, overlimits
├── ss -t state time-wait → Connexions TIME_WAIT
└── netstat -s → TCP retransmits, out-of-order
3. Vérifier le matériel
├── ethtool -S eth0 → Interface errors, CRC
├── ifconfig eth0 → RX errors, dropped
└── dmesg | tail → Kernel network errors
Pièges et Bonnes Pratiques
- tcpdump : Toujours utiliser
-nn pour éviter la résolution DNS qui ralentit et peut planter
- MTR : Laisser tourner 30+ secondes pour un diagnostic fiable
- iperf3 : Utiliser -P 4 (parallel streams) pour saturer les liens modernes
- MTU : Vérifier le MTU de bout en bout, surtout avec VXLAN (50 octets d'overhead)
- Bufferbloat : Cause majeure de latence, remplacer pfifo par fq_codel ou cake
- SYN Flood : Ne pas confondre avec un vrai pic de trafic
- Logs : Toujours logguer les diagnostics pour analyse comparative
- Monitoring : Mettre en place Prometheus + blackbox_exporter pour des métriques continues
Ressources