iftop 使用指南
约 2820 字大约 9 分钟
2025-10-31
介绍
iftop 是一个 实时网络流量监控工具,功能类似于 top,但它关注的是网络带宽的使用情况。
- top:显示 CPU / 内存 的实时使用情况
- iftop:显示 网络连接 的实时流量情况(谁在和谁通信,速度多快)
通过 iftop,你可以:
- 实时查看当前主机的 上行 / 下行带宽;
- 知道 哪些 IP / 域名占用了带宽;
- 分析 流量方向(发送 / 接收);
- 临时排查网络异常、DDoS 攻击、带宽瓶颈等问题。
安装方式
Debian / Ubuntu
sudo apt update
sudo apt install iftop -yCentOS / RHEL
sudo yum install epel-release -y
sudo yum install iftop -yFedora
sudo dnf install iftop -ymacOS
brew install iftop基本使用
iftop 必须以 root 权限运行(因为需要访问网络接口数据包):
sudo iftop默认监控系统的第一个网卡接口(例如 eth0、ens33、enp0s3 等)。
指定网卡接口
如果机器有多个网络接口,需要指定监控哪个:
sudo iftop -i eth0可用命令查看网卡:
ip link show界面详解(理解输出)
运行后会看到类似这样的界面:
1.29Mb 2.58Mb 3.87Mb
┌───────────────────────────────────────────────────────────────┐
192.168.1.10 => 8.8.8.8 120Kb 180Kb 250Kb
<= 80Kb 120Kb 200Kb
192.168.1.10 => 192.168.1.1 500b 1Kb 1Kb
<= 300b 900b 900b
───────────────────────────────────────────────────────────────
TX: 200Kb RX: 150Kb TOTAL: 350Kb说明:
- 左列:本机与外部主机的连接(上行/下行方向)
- =>:发送(TX,上行)
- <=:接收(RX,下行)
- 右侧三列数值:
- 第一列:最近 2 秒内的平均流量
- 第二列:最近 10 秒内的平均流量
- 第三列:最近 40 秒内的平均流量
- TX / RX / TOTAL:底部总计行,显示整体的发送、接收和总流量。
界面详解(逐行版)
191Mb 381Mb 572Mb 763Mb 954Mb
└──────────────────────────────────┴──────────────────────────────────┴───────────────────────────────────┴──────────────────────────────────┴───────────────────────────────────第一行:带宽刻度(Scale Bar)
- 这行最上方的数字是 带宽刻度(scale),代表每个刻度的带宽范围。
- 单位是 bit/s(或 byte/s,取决于是否使用
-B参数)。 - 这些数字不是当前速率,而是用来“标尺化”右侧图形条(如果启用了条形显示)。
例如:
191Mb 381Mb 572Mb 763Mb 954Mb表示图形最右边代表约 954Mb/s 的带宽。
如果某条连接的条形到达这一端,就意味着接近 954Mb/s。
每一组两行:一条连接(Connection)
第一行(上行流量)
d25ca73b896e => XiaoQiang- 左边的 d25ca73b896e:本机标识(可能是主机名或容器名);
- 箭头
=>表示从本机发出(发送 / TX); - 右边的 XiaoQiang:目标主机(可能是局域网中的另一台机器)。
右侧数值:
0b 1.30Kb 1.31Kb三列分别代表:
| 列 | 含义 | 时间窗口 |
|---|---|---|
| 第1列 | 最近 2 秒内的平均速率 | 短期瞬时流量 |
| 第2列 | 最近 10 秒内的平均速率 | 中期趋势 |
| 第3列 | 最近 40 秒内的平均速率 | 长期趋势 |
单位是 bit/s 或 byte/s。
例如:1.31Kb 表示平均上行速率为约 1.31 千比特/秒。
第二行(下行流量)
<= 0b 1.49Kb 1.49Kb- 箭头
<=表示 接收流量(RX); - 数字格式相同,表示从对方主机 收到的数据速率。
这里代表:
- 从 XiaoQiang 收到的流量:平均 1.49 Kb/s。
第二个连接
- 本机(
d25ca73b896e)与远程主机(WIN-JQ5SQ9A99OM)之间通信。 - 发送速率:2.06Kb/s(最近2秒),之后略低;
- 接收速率:480b/s 左右。 → 可以看出,这个连接主要是发送多、接收少(可能是向对方发送请求)。
d25ca73b896e => 154.219.108.139 0b 0b 45b
<= 0b 0b 55b第三个连接
- 与公网 IP
154.219.108.139的连接; - 发送流量几乎为 0;
- 接收约 55b/s;
- 说明该连接只是极少量数据往返(例如 NTP 时间同步、心跳包)。
d25ca73b896e => time.cloudflare.com 0b 0b 15b
<= 0b 0b 15b与 Cloudflare 时间服务器通信
time.cloudflare.com:一个公共 NTP 时间服务;- 上下行各 15b/s;
- 属于周期性时间同步的小数据包。
d25ca73b896e => 81.168.83.93 0b 0b 15b
<= 0b 0b 15b- 与 IP
81.168.83.93有少量通信; - 通常这种极低速率的连接属于后台探测或保持心跳连接。
d25ca73b896e => 111.230.189.174 0b 0b 15b
<= 0b 0b 15b- 类似上面:极少量数据,可能是短暂的探测或 DNS/NTP 请求。
(中间是空行,表示没有更多活跃连接)
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
TX: cum: 66.4KB peak: 5.64Kb rates: 2.06Kb 2.26Kb 2.14Kb
RX: 2.17MB 4.78Kb 480b 1.89Kb 1.82Kb
TOTAL: 2.23MB 10.1Kb 2.53Kb 4.15Kb 3.95Kb底部统计区(Summary Section)
| 项 | 含义 |
|---|---|
| TX | “Transmit” = 发送方向 |
| RX | “Receive” = 接收方向 |
| TOTAL | 总流量(TX + RX) |
下面再细分讲每行参数:
TX 行
TX: cum: 66.4KB peak: 5.64Kb rates: 2.06Kb 2.26Kb 2.14Kb| 字段 | 含义 |
|---|---|
cum | 累积总发送量(当前运行以来) |
peak | 发送速率峰值(最高值) |
rates | 三列速率,分别为过去 2、10、40 秒的平均发送速率 |
RX 行
RX: 2.17MB 4.78Kb 480b 1.89Kb 1.82Kb同理,只不过是接收流量的统计。
TOTAL 行
TOTAL: 2.23MB 10.1Kb 2.53Kb 4.15Kb 3.95Kb- 汇总发送 + 接收;
- 表示从启动以来一共传输了 2.23MB 数据;
- 当前速率约为 3~4 Kb/s。
总结结构对照表
| 区域 | 名称 | 说明 |
|---|---|---|
| 顶部 | 带宽刻度条 | 右上角数字为速率刻度 |
| 主体中部 | 连接详情 | 每两行一组:上行 => / 下行 <= |
| 右侧三列 | 实时速率 | 过去 2s、10s、40s 平均速率 |
| 底部 | 汇总信息 | 显示 TX / RX / TOTAL 的累积、峰值与平均速率 |
重点记忆
| 标记 | 含义 |
|---|---|
=> | 本机发出(上行流量 TX) |
<= | 本机接收(下行流量 RX) |
| 3列数字 | 分别对应 2秒、10秒、40秒 平均值 |
| cum | 从 iftop 启动到现在的累计流量 |
| peak | 观察期间的峰值速率 |
| rates | 实时流量变化趋势(3列) |
界面标注图(文字注释版)
191Mb 381Mb 572Mb 763Mb 954Mb
└──────────────────────────────────┴──────────────────┴──────────────────┴──────────────────┴──────────────────┘
↑ ↑
│ │
│ 🟡 顶部为带宽刻度(Scale Bar)—— 表示右侧图形条的速率范围 │
│ 每个数字代表当前显示的最大带宽区间,例如 954Mb 表示满格时约为 954Mb/s │
│ │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────┤
d25ca73b896e => XiaoQiang 0b 1.30Kb 1.31Kb
↑ ↑ ↑ ↑ ↑
│ │ │ │ │
│ 🟢 本地主机名(或容器 ID) │ │ │ │
│ │ │ │ │
│ │ │ │ └─── 最近 40 秒平均速率
│ │ │ └─────────── 最近 10 秒平均速率
│ │ └───────────────── 最近 2 秒平均速率
│ └──────────────────────────── 远程主机名或 IP
│ (当前通信对象)
│
│ => 表示【发送方向】(TX,上行)数据 —— 从本机发出到远程主机
│
│
<= 0b 1.49Kb 1.49Kb
↑
└─── <= 表示【接收方向】(RX,下行)数据 —— 从远程主机接收到本机
│
│ 每两行是一条连接(Connection),上行为发送,下一行为接收。
│
│
d25ca73b896e => WIN-JQ5SQ9A99OM 2.06Kb 976b 756b
<= 480b 403b 229b
│
│ 另一条连接示例,说明与另一台主机(WIN-JQ5SQ9A99OM)的通信速率。
│
│
d25ca73b896e => 154.219.108.139 0b 0b 45b
<= 0b 0b 55b
│
│ 公网连接示例:极少流量,通常是 NTP、DNS、心跳包等轻量通信。
│
│
d25ca73b896e => time.cloudflare.com 0b 0b 15b
<= 0b 0b 15b
│
│ 与 Cloudflare 时间服务器的同步连接。
│
│
(中间空白表示无更多活跃连接)
│
│
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
TX: cum: 66.4KB peak: 5.64Kb rates: 2.06Kb 2.26Kb 2.14Kb
↑ ↑ ↑ ↑ ↑ ↑ ↑
│ │ │ │ │ │ └─── 最近 40 秒平均发送速率
│ │ │ │ │ └──────────── 最近 10 秒平均发送速率
│ │ │ └─────────────────────────────── 峰值发送速率(Peak)
│ │ └────────────────────────────────────────── 累积发送量(累计已发送总字节)
│ └─────────────────────────────────────────────────── “TX”:发送方向统计
│
│
RX: 2.17MB 4.78Kb 480b 1.89Kb 1.82Kb
↑ ↑ ↑ ↑ ↑ ↑
│ │ │ │ │ └─── 最近 40 秒平均接收速率
│ │ │ │ └──────────── 最近 10 秒平均接收速率
│ │ └────────────────────────────── 峰值接收速率
│ └────────────────────────────────────────── 累积接收量
│ (从启动以来收到的数据总量)
│
│
TOTAL: 2.23MB 10.1Kb 2.53Kb 4.15Kb 3.95Kb
↑ ↑ ↑ ↑ ↑ ↑
│ │ │ │ │ └─── 40 秒平均总速率(发送+接收)
│ │ │ │ └──────────── 10 秒平均总速率
│ │ └────────────────────────────── 峰值总速率
│ └────────────────────────────────────────── 累积总流量(TX+RX)
│
│
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────
🔵 底部为汇总统计区(Summary)
包含发送(TX)、接收(RX)和总计(TOTAL)
显示当前平均速率、峰值速率、累计传输量等。常用快捷键(运行时交互命令)
在运行界面时,按以下键可以切换显示方式(不需要退出):
| 快捷键 | 功能说明 |
|---|---|
h | 显示帮助信息 |
n | 切换显示主机名 / IP |
s | 只显示发送流量(TX) |
r | 只显示接收流量(RX) |
t | 切换显示总流量(TX+RX) |
p | 切换显示端口号 |
P | 暂停 / 继续监控 |
b | 切换显示流量单位(bit/s, byte/s) |
B | 显示总计(显示总发送 / 接收流量) |
d | 切换是否显示本地主机名 |
S | 显示或隐藏滚动条 |
l | 启用 / 禁用流量过滤模式(输入后可用表达式过滤) |
q | 退出 |
常用命令参数
| 参数 | 说明 |
|---|---|
-i <interface> | 指定要监控的网络接口,如 iftop -i eth0 |
-B | 使用 Bytes/s 显示(默认是 bits/s) |
-n | 不解析主机名,直接显示 IP(提高性能) |
-N | 不解析端口号,直接显示端口数字 |
-P | 显示端口号 |
-F <filter> | 只监控特定的 IP 或网段 |
-f <pcap-filter> | 使用 tcpdump 语法进行过滤(强大) |
-t | 纯文本模式(适合输出日志文件或 SSH 环境) |
-L <num> | 限制显示的连接数量(默认 40) |
示例:
# 只监控 eth0 接口
sudo iftop -i eth0
# 不解析域名,提高速度
sudo iftop -i eth0 -n
# 以 Bytes/s 显示
sudo iftop -i eth0 -B
# 显示端口号
sudo iftop -i eth0 -P
# 同时禁用域名解析并显示端口
sudo iftop -i eth0 -nP过滤功能(精准监控)
iftop 支持类似 tcpdump 的过滤语法,可以聚焦特定目标:
| 示例命令 | 说明 |
|---|---|
sudo iftop -i eth0 -f "host 8.8.8.8" | 仅查看与 8.8.8.8 的通信 |
sudo iftop -i eth0 -f "port 80" | 仅查看 HTTP 流量 |
sudo iftop -i eth0 -f "net 192.168.1.0/24" | 仅查看特定网段的通信 |
sudo iftop -i eth0 -f "src 192.168.1.10" | 仅查看从指定主机发出的流量 |
sudo iftop -i eth0 -f "dst port 443" | 仅查看目标为 HTTPS 的流量 |
实战示例
排查服务器谁在占用带宽
sudo iftop -i eth0 -nP观察哪条连接的流量数值最高(右侧列数最大)。
查看特定端口的实时流量
sudo iftop -i eth0 -f "port 22"查看 SSH 连接的带宽情况。
持续输出日志(文本模式)
sudo iftop -t -s 60 -i eth0 > iftop.log-t:文本模式-s 60:监控 60 秒后退出
适合服务器上做定时流量记录。
iftop 与其他工具对比
| 工具 | 作用 | 特点 |
|---|---|---|
iftop | 实时带宽监控 | 按连接显示,直观 |
nload | 仅显示上/下行总速率 | 界面简洁,不显示IP |
iptraf-ng | 多窗口流量统计 | 可显示协议统计、详细连接 |
bmon | 图形化带宽监控 | 可绘制带宽变化曲线 |
vnstat | 长期流量统计 | 可保存历史流量数据 |
小结:
- 临时看流量:
iftop - 想看总带宽:
nload - 想留历史数据:
vnstat
常见问题(FAQ)
iftop 无法启动或报错 “can't open device”
原因:没有权限。 解决:
sudo iftop -i eth0显示主机名太慢?
原因:DNS 解析太耗时。 解决:
sudo iftop -i eth0 -n想导出日志?
iftop 没有直接日志功能,可用:
sudo iftop -t -s 60 -i eth0 > iftop_$(date +%F_%H-%M).logiftop 显示空白?
检查:
- 是否选错网卡(用
ip link show查) - 是否无流量经过该接口(例如监控了虚拟接口)
- 防火墙或容器网络隔离问题
技巧与最佳实践
性能优化
- 使用
-nN禁止解析主机名和端口号; - 只监控必要接口;
- 关闭滚动条
S。
快速排查网络瓶颈
- 运行
iftop -nP - 按
t切换总流量模式 - 找到最大流量的连接,看 IP + 端口组合
自动监控脚本 可以结合 cron + iftop -t 定期保存流量日志,用于带宽分析或审计。
退出
在界面中按 q 即可退出。