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/sAuto-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 实战组合拳

这四个工具单独用已经很强大,但组合起来才是真正的杀手锏。我分享一个我常用的排查流程:

  1. ip link show:确认接口状态和IP配置
  2. ethtool eth0:确认物理层正常,速率协商正确
  3. iperf3:压测带宽,确认性能达标
  4. tcpdump:如果还有问题,抓包分析

举个例子,有一次客户说设备网口经常断流。我按这个流程走了一遍:

  • ip命令发现接口状态正常
  • ethtool发现CRC错误计数很高
  • iperf3测试发现吞吐量只有标称值的30%
  • tcpdump抓包发现大量TCP重传

最终定位是网线屏蔽层损坏,导致电磁干扰。换了根网线,问题解决。你看,没有这些工具,你只能靠猜。

我的建议:把这四个工具的常用参数记在笔记本上,或者做成一个速查表。现场调试时,时间就是金钱。我自己的速查表就贴在工位上,用了好几年了。

好了,这一章的内容就到这里。下一章我们会深入讲解多网络接口的切换策略,到时候这些工具还会反复用到。记住,工具是死的,思路是活的。多练多用,你也能成为网络排障的高手。