3、Linux网络工具集:ip命令、ethtool、tcpdump、iperf3实战
做边缘计算设备,说白了就是跟网络接口打交道。你想想看,一个设备上可能同时挂着4G、5G、Wi-Fi、有线以太网,哪个接口出了问题,业务就得断。所以,熟练掌握Linux网络工具集,是咱们这行的基本功。
我个人习惯,不管到哪个现场,第一件事就是把这四个工具过一遍:ip命令看状态、ethtool查物理层、tcpdump抓包分析、iperf3压测带宽。今天我就把这套实战经验掰开揉碎讲给你听。
3.1 ip命令:现代网络配置的瑞士军刀
如果你还在用ifconfig,我建议你尽快切换到ip命令。ifconfig早就被标记为过时了,而ip命令是iproute2工具包的核心,功能强大得多。
3.1.1 查看接口状态
# 查看所有网络接口
ip link show
# 查看IP地址信息
ip addr show
# 只看某个接口,比如eth0
ip addr show eth0
我在项目中遇到过一个问题:设备上报说网络不通,我用ip link show一看,发现eth0的状态是DOWN。嗯,物理层都没起来,上层协议栈当然没法工作。这时候别急着调IP,先查网线、查供电。
关键字段解读:
state UP/DOWN:接口是否激活LOWER_UP:物理层是否就绪group default:接口分组,多网口切换时有用
3.1.2 配置IP地址
# 添加IP地址
ip addr add 192.168.1.100/24 dev eth0
# 删除IP地址
ip addr del 192.168.1.100/24 dev eth0
# 启用/禁用接口
ip link set eth0 up
ip link set eth0 down
这里有个坑:如果你在远程SSH连接中执行ip link set eth0 down,那你就把自己踢出去了。我曾经在调试一个边缘网关时手滑了一下,结果只能跑现场去重启设备。所以,远程操作时千万小心。
3.1.3 路由管理
# 查看路由表
ip route show
# 添加默认网关
ip route add default via 192.168.1.1 dev eth0
# 添加静态路由
ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
多网络接口切换时,路由表是关键。我一般会维护多张路由表,配合策略路由来实现流量分流。这个后面章节会详细讲。
小技巧:用ip -s link可以查看接口的收发统计,包括丢包、错误等。排查物理层问题特别好用。
3.2 ethtool:物理层的诊断利器
ethtool这个工具,说白了就是让你跟网卡硬件对话。它能告诉你网线好不好、协商速率对不对、有没有CRC错误。
3.2.1 查看网卡基本信息
# 查看网卡驱动和固件信息
ethtool -i eth0
# 查看协商状态
ethtool eth0
输出示例:
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Speed: 1000Mb/s
Duplex: Full
Auto-negotiation: on
Link detected: yes
我记得有一次,客户反馈设备网口只有10Mbps的速度。我用ethtool一看,Speed: 10Mb/s,Auto-negotiation: off。原来是网线质量太差,自协商失败,降级到了10M。换了根六类线,问题解决。
3.2.2 调整网卡参数
# 强制设置速率和双工模式
ethtool -s eth0 speed 100 duplex full autoneg off
# 查看网卡统计信息(丢包、CRC错误等)
ethtool -S eth0
警告:强制设置速率和双工模式要谨慎。如果对端设备不支持,会导致大量丢包甚至断连。我一般只在排查问题时临时使用,生产环境建议保持自协商开启。
3.2.3 网卡调优
# 查看环形缓冲区大小
ethtool -g eth0
# 调整环形缓冲区
ethtool -G eth0 rx 4096 tx 4096
# 查看网卡队列
ethtool -l eth0
# 调整队列数量
ethtool -L eth0 combined 4
边缘设备通常资源有限,但网络流量可能很大。适当增大环形缓冲区可以减少CPU中断频率,降低延迟。不过也别调太大,否则会占用过多内存。
3.3 tcpdump:网络抓包分析
tcpdump是我最常用的排障工具。没有之一。你想想看,网络问题千奇百怪,光看日志根本不够,只有抓到原始数据包才能看到真相。
3.3.1 基本用法
# 抓取所有流量
tcpdump -i eth0
# 限制抓包数量
tcpdump -i eth0 -c 100
# 保存到文件
tcpdump -i eth0 -w capture.pcap
# 读取文件
tcpdump -r capture.pcap
3.3.2 过滤表达式
不写过滤条件的话,tcpdump会抓取所有流量,信息量太大。我一般都会加上过滤条件:
# 只抓特定主机的流量
tcpdump -i eth0 host 192.168.1.1
# 只抓特定端口的流量
tcpdump -i eth0 port 80 or port 443
# 只抓特定协议的流量
tcpdump -i eth0 icmp
# 组合过滤
tcpdump -i eth0 src 192.168.1.100 and dst port 8080
实战场景:排查多网口切换时的连接中断问题。
# 抓取所有接口的ARP请求
tcpdump -i any arp
# 抓取TCP三次握手
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'
3.3.3 高级技巧
# 显示更详细的信息
tcpdump -i eth0 -v
# 不解析主机名(加快速度)
tcpdump -i eth0 -n
# 显示ASCII内容
tcpdump -i eth0 -A
# 抓取特定长度的包
tcpdump -i eth0 -s 0
我曾经排查过一个诡异的问题:设备每隔几分钟就会断连一次。用tcpdump抓包后发现,是ARP冲突导致的。两个设备配置了相同的IP地址,网络上一有ARP请求就乱套。嗯,这种问题光看日志根本发现不了。
小技巧:抓包文件可以用Wireshark打开分析,图形界面更直观。但现场调试时,tcpdump配合-v和-n参数,基本够用。
3.4 iperf3:网络性能压测
iperf3是测量网络带宽和延迟的标准工具。做多网口负载均衡,没有iperf3你根本不知道每个接口的实际吞吐量。
3.4.1 基本用法
先在一台设备上启动服务端:
iperf3 -s -p 5201
然后在另一台设备上启动客户端:
iperf3 -c 192.168.1.100 -p 5201 -t 30
参数说明:
-s:服务端模式-c:客户端模式,后面跟服务器IP-p:端口号-t:测试时长(秒)
3.4.2 双向测试
# 双向同时测试
iperf3 -c 192.168.1.100 -d -t 30
# 反向测试(只测上行)
iperf3 -c 192.168.1.100 -R -t 30
边缘设备的上行和下行带宽往往不对称。比如4G模块,下行可能100Mbps,上行只有20Mbps。用-R参数单独测试上行,能帮你摸清每个接口的真实能力。
3.4.3 UDP测试
# UDP测试,指定带宽
iperf3 -c 192.168.1.100 -u -b 100M -t 30
UDP测试能反映网络的抖动和丢包率。我在测试多网口切换时,会同时跑UDP流和TCP流,观察切换瞬间的丢包情况。
实战案例:测试Wi-Fi和4G的负载均衡效果。
# 在边缘设备上启动两个iperf3客户端
# 一个走Wi-Fi接口
iperf3 -c 192.168.1.100 -B 192.168.1.50 -t 60 -P 4
# 另一个走4G接口
iperf3 -c 192.168.1.100 -B 10.0.0.50 -t 60 -P 4
通过-B参数绑定源IP地址,可以强制流量走特定接口。这样就能分别测试每个接口的性能。
3.4.4 结果解读
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-30.00 sec 345 MBytes 96.5 Mbits/sec 0 sender
[ 5] 0.00-30.00 sec 344 MBytes 96.2 Mbits/sec receiver
关键指标:
- Bitrate:实际吞吐量
- Retr:重传次数(TCP模式),重传多说明网络质量差
- Jitter:抖动(UDP模式),对实时音视频很重要
- Lost/Total:丢包率(UDP模式)
注意:iperf3测试结果受CPU性能影响很大。边缘设备的CPU通常较弱,如果测试时CPU跑满,结果就不准确了。我一般会先用top看一下CPU占用,确保测试结果可信。
3.5 实战组合拳
这四个工具单独用已经很强大,但组合起来才是真正的杀手锏。我分享一个我常用的排查流程:
- ip link show:确认接口状态和IP配置
- ethtool eth0:确认物理层正常,速率协商正确
- iperf3:压测带宽,确认性能达标
- tcpdump:如果还有问题,抓包分析
举个例子,有一次客户说设备网口经常断流。我按这个流程走了一遍:
- ip命令发现接口状态正常
- ethtool发现CRC错误计数很高
- iperf3测试发现吞吐量只有标称值的30%
- tcpdump抓包发现大量TCP重传
最终定位是网线屏蔽层损坏,导致电磁干扰。换了根网线,问题解决。你看,没有这些工具,你只能靠猜。
我的建议:把这四个工具的常用参数记在笔记本上,或者做成一个速查表。现场调试时,时间就是金钱。我自己的速查表就贴在工位上,用了好几年了。
好了,这一章的内容就到这里。下一章我们会深入讲解多网络接口的切换策略,到时候这些工具还会反复用到。记住,工具是死的,思路是活的。多练多用,你也能成为网络排障的高手。