hping3测端口丢包率核心是发送tcp syn包观察响应并统计丢包,而非仅判断端口开放;它贴近真实业务流量,可绕过icmp限制,反映防火墙、iptables等对tcp包的处理情况。

hping3 测试端口丢包率,核心不是“测端口是否开放”,而是用 TCP 协议向指定端口发包,观察响应行为并统计丢包。它比普通 ping 更贴近真实业务流量(TCP),能绕过 ICMP 限制,直接反映端口级连通性与中间设备(如防火墙、负载均衡、iptables)对 TCP 包的处理情况。
直接测端口丢包率的常用命令
hping3 -S -c 10 -i u100000 192.168.1.100 -p 80
-
-S:发送 SYN 包(模拟 TCP 握手第一步) -
-c 10:总共发 10 个包 -
-i u100000:每 100ms(100000 微秒)发一个,节奏稳定,便于观察丢包和 RTT 波动 -
-p 80:目标端口为 80 -
192.168.1.100:目标 IP
执行后输出类似:
HPING 192.168.1.100 (eth0 192.168.1.100): S set, 40 headers + 0 data bytes len=46 ip=192.168.1.100 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=65535 rtt=12.3 ms len=46 ip=192.168.1.100 ttl=64 DF id=0 sport=80 flags=SA seq=1 win=65535 rtt=11.7 ms ... --- 192.168.1.100 hping statistic --- 10 packets transmitted, 7 packets received, 30% packet loss round-trip min/avg/max = 10.2/12.8/15.6 ms
✅ 这里的“30% packet loss”就是该端口(80)在 SYN 探测层面的丢包率。
关键注意事项
-
响应类型决定端口状态:
- 收到
flags=SA(SYN+ACK)→ 端口开放且服务监听中 - 收到
flags=R(RST)→ 端口关闭(服务未运行或被拦截) - 完全无响应 → 可能被防火墙 DROP、路由不可达、或中间设备静默丢弃
- 收到
丢包不等于端口不通:
若丢包率高但偶尔能收到 SA 响应,说明链路不稳定或策略限速(如 iptablesstatistic --probability 0.3或 tc netem 丢包规则),需结合netstat -i、tc qdisc show、iptables -L -nv进一步排查。避免洪水模式干扰统计:
不要用--flood(洪流模式),它不等待响应、不计数、不输出丢包率,只适合压力场景,不适合诊断丢包。
快速定位丢包环节的组合动作
-
查网卡底层丢包:
linux-performance-analyzer下载Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
netstat -i | grep eth0 # 关注 RX-DRP(缓冲区后丢包)、RX-OVR(Ring Buffer 溢出)
-
查 tc 限流/丢包规则:
tc qdisc show dev eth0 # 若看到 netem + loss xx%,就是它在主动丢包
-
查 iptables 随机丢包规则:
iptables -L -nv | grep -A 5 "statistic\|DROP"
-
对比 ICMP 与 TCP 表现:
ping -c 10 192.168.1.100 # 看主机层是否通 hping3 -S -c 10 -p 80 192.168.1.100 # 看端口层是否通
若 ping 无丢包但 hping3 丢包严重,基本可锁定是防火墙、安全组或服务自身问题。
不复杂但容易忽略










