iptraf-ng 必须通过交互菜单选择「Detailed interface statistics」才能按协议统计流量,直接运行 iptraf-ng -i eth0 仅显示接口级实时流视图,无法呈现 TCP/UDP/ICMP 等协议占比。

iptraf-ng 能按协议统计流量,但必须用交互菜单启动
直接运行 iptraf-ng -i eth0 不会显示协议分布,只会进入接口级实时流视图。要看到 TCP/UDP/ICMP 等协议占比,得先进入主菜单再选「Detailed interface statistics」。
常见错误是把 iptraf-ng 当成单命令工具,一上来就加 -i 参数,结果只看到连接列表,完全没协议分类。
- 正确做法:先运行
sudo iptraf-ng,回车进主菜单 → 选「2. Detailed interface statistics」→ 再选网卡(如eth0) - 界面顶部会显示当前 5 秒内各协议的 RX/TX 字节数和包数,TCP 通常占大头,ICMP 和 ARP 一般很小
- 如果看到 UDP 流量异常高,别急着怀疑 DNS,先确认是否启用了
-B(字节模式),否则默认以 bit/s 显示,数值会小 8 倍造成误判
iftop 默认不显示协议,但能用过滤表达式间接验证
iftop 本身不输出协议类型字段,但它支持 -P + -f 组合过滤特定协议流量,相当于用排除法验证协议分布。
比如你怀疑某台机器在大量发 UDP 包,但 iftop 界面只显示 IP 和端口,看不出协议——这时就得靠过滤来交叉验证。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 查 UDP 流量:
sudo iftop -i eth0 -P -f "udp" - 查 TCP 建连行为:
sudo iftop -i eth0 -P -f "tcp and port 80" - 注意
-P必须和-f同时用,单独-P只是启用端口显示,不会过滤 - 过滤语法基于 libpcap,不支持
proto udp这种写法,必须用udp或tcp关键字
/proc/net/snmp 提供内核级协议计数器,适合脚本化采集
/proc/net/snmp 是内核维护的 SNMP MIB-II 统计入口,比用户态工具更底层,字段含义稳定,适合写监控脚本抓取协议层错误或重传数。
它不显示实时速率,只给累计值,但字段名明确带协议前缀(如 Tcp:、Udp:),比 /proc/net/dev 更贴近“按协议统计”这个需求。
- 看 TCP 重传次数:
grep "Tcp:" /proc/net/snmp | awk '{print $10}'(第 10 列是 RetransSegs) - 看 UDP 收包丢弃数:
grep "Udp:" /proc/net/snmp | awk '{print $5}'(第 5 列是 InErrors) - 字段顺序固定,但不同内核版本列数可能微调,建议先
head -n 1 /proc/net/snmp确认列索引 - 这个文件不能被
watch直接算差值——它每行是不同协议段,需先提取再 diff,比/proc/net/dev复杂一层
不要指望 nload 或 sar -n DEV 输出协议维度数据
nload 只读 /proc/net/dev,天然无协议概念;sar -n DEV 也只到接口层,输出里只有 rxpck/s(包数)、txkB/s(KB 数),没有协议拆分。
有人试过 sar -n IP 或 sar -n ICMP,但这些选项在主流 sysstat 版本(如 12.7+)中已被废弃,执行会报 Unknown subsystem 错误。
- 真正能出协议统计的只有三个来源:iptraf-ng 的交互菜单、tcpdump 抓包后分析、/proc/net/snmp 的原始计数器
- 如果需要长期记录协议占比,别硬改 vnstat——它只存接口总流量,协议维度只能靠定时解析
/proc/net/snmp并入库 - 容器环境里看到 UDP 流量突增,优先检查
ss -s输出里的udp行,比跑完整工具链更快
ip -s link show dev eth0 里 RX errors 增长,而 UDP InErrors 高大概率对应物理层问题——这些关联点,比单纯看“UDP 占比 37%”有用得多。

















