Sổ tay kỹ thuật

Kiểm tra mạng – iperf3, mtr, ping MTU, nc, curl timing

cheatsheet#linux#networking#testing· cập nhật 2026-11-06

Tra nhanh lệnh đo băng thông, loss theo hop, kiểm tra MTU, port mở và thời gian từng pha của một request HTTP.

Sửa trang này
Mục lục

Bộ lệnh để trả lời "mạng chậm/đứt ở đâu". Gói trên Ubuntu: iperf3, mtr-tiny (hoặc mtr), iputils-ping, iputils-tracepath, netcat-openbsd, curl. Lệnh xem IP/route/socket nằm ở Linux network cheatsheet.

iperf3 – băng thông

Mục đích Lệnh
Chạy server (port mặc định 5201) iperf3 -s
Server chỉ phục vụ 1 lần rồi thoát iperf3 -s -1
Client TCP 10 giây (client → server) iperf3 -c 203.0.113.5
Chiều ngược lại (server → client) iperf3 -c 203.0.113.5 -R
Cả hai chiều cùng lúc (iperf3 3.7+) iperf3 -c 203.0.113.5 --bidir
4 luồng song song, 30 giây iperf3 -c 203.0.113.5 -P 4 -t 30
UDP 100 Mbit/s, xem jitter và loss iperf3 -c 203.0.113.5 -u -b 100M
Port khác / ép IPv6 iperf3 -c 2001:db8::5 -p 5202 -6
Bind source IP (máy nhiều uplink) iperf3 -c 203.0.113.5 -B 198.51.100.10
Xuất JSON iperf3 -c 203.0.113.5 -J > result.json

TCP một luồng thấp mà -P 4 cao: thường do RTT lớn + window nhỏ, không phải link yếu. UDP: tăng dần -b đến khi loss xuất hiện để tìm trần.

mtr – loss và latency theo hop

Mục đích Lệnh
Báo cáo 100 vòng, không DNS, kèm IP mtr -rwn -c 100 203.0.113.5
Hiển thị AS number mỗi hop mtr -rwz -c 50 203.0.113.5
Dùng TCP SYN tới port 443 (qua firewall chặn ICMP) sudo mtr -T -P 443 -rwn -c 50 203.0.113.5
Dùng UDP mtr -u -rwn -c 50 203.0.113.5
Hiện nhãn MPLS (ICMP extension) mtr -e -rwn 203.0.113.5
Xuất JSON mtr -j -c 20 203.0.113.5
Khoảng cách giữa probe (root mới được < 1 s) sudo mtr -i 0.2 -rwn -c 200 203.0.113.5

Loss ở một hop giữa nhưng các hop sau 0% = router đó rate-limit ICMP, không phải mất gói thật. Chỉ tin loss kéo dài tới hop cuối.

Ping, MTU, path

Mục đích Lệnh
Ping 5 gói, timeout mỗi gói 1 s ping -c 5 -W 1 203.0.113.5
Ping nhanh để thấy loss (cần root khi < 0.2 s) sudo ping -i 0.05 -c 500 -q 203.0.113.5
Kiểm tra MTU 1500 (IPv4: 1472 + 28 header, cấm phân mảnh) ping -M do -s 1472 -c 3 203.0.113.5
Kiểm tra jumbo 9000 ping -M do -s 8972 -c 3 203.0.113.5
IPv6 MTU 1500 (1452 + 48 header) ping -6 -M do -s 1452 -c 3 2001:db8::5
Ping từ source / interface cụ thể ping -I eth1 203.0.113.5
Dò PMTU theo hop, không cần root tracepath -n 203.0.113.5

ping -M do báo message too long, mtu=1400 → có hop MTU nhỏ hơn (tunnel, PPPoE, GRE/VXLAN). Đối chiếu với ip link MTU của interface.

nc – port và kết nối thô

Mục đích Lệnh
Port TCP có mở không (timeout 3 s) nc -zv -w 3 203.0.113.5 443
Quét dải port nc -zv -w 1 203.0.113.5 20-25
Kiểm tra UDP (chỉ tin khi có phản hồi) nc -zuv -w 2 203.0.113.5 161
Mở listener để test firewall nc -l 5000 (đầu kia: nc 203.0.113.5 5000)
Gửi một dòng rồi đóng echo test | nc -q 1 203.0.113.5 5000
Đẩy file qua TCP nc -l 5000 > out.bin / nc -N 203.0.113.5 5000 < in.bin

Cú pháp trên là netcat-openbsd (mặc định Ubuntu). Bản ncat (nmap) và netcat-traditional khác flag.

curl – thời gian từng pha

curl -o /dev/null -s -w 'code=%{http_code} dns=%{time_namelookup} tcp=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n' https://example.com/

Các mốc tính cộng dồn từ lúc bắt đầu: TLS handshake = time_appconnect - time_connect, thời gian server xử lý ≈ time_starttransfer - time_appconnect.

Mục đích Lệnh
Chỉ xem header + verbose TLS curl -sv -o /dev/null https://example.com/
Ép IP đích, giữ SNI/Host (test backend cụ thể) curl --resolve example.com:443:203.0.113.5 https://example.com/
Chuyển host:port sang đích khác curl --connect-to example.com:443:203.0.113.5:8443 https://example.com/
Giới hạn thời gian connect / tổng curl --connect-timeout 3 -m 10 https://example.com/
Ra bằng interface / source IP curl --interface eth1 https://example.com/
Lặp 20 lần lấy total time for i in $(seq 20); do curl -o /dev/null -s -w '%{time_total}\n' https://example.com/; done | sort -n

Lỗi TLS/chứng chỉ chi tiết: xem TLS troubleshooting. Giả lập mạng xấu để thử: tc netem.