在嵌入式开发和物联网设备部署中,网络连接问题是最常见的技术挑战之一。无论是设备配网失败、通信中断,还是性能瓶颈,都需要系统性的网络故障排查能力。
网络排查核心工具
网络接口诊断
ip命令 - 现代网络配置的核心
# 查看网络接口状态
ip link show
# 查看IP地址配置
ip addr show
# 查看路由表
ip route show
# 启用/禁用网络接口
ip link set up/down eth0
# 配置IP地址
ip addr add 192.168.1.100/24 dev eth0
实际应用场景:在物联网设备部署中,经常需要动态配置网络接口。例如,当设备从WiFi切换到以太网时,需要重新配置网络参数。
ethtool - 物理层诊断利器
# 查看网卡驱动信息
ethtool -i eth0
# 查看网卡统计信息
ethtool -S eth0
# 查看网卡能力
ethtool eth0
# 设置网卡参数
ethtool -s eth0 speed 1000 duplex full autoneg off
故障排查案例:
# 问题:网卡连接不稳定
ethtool eth0
# 输出显示:Link detected: no
# 解决方案:检查网线连接或交换机端口状态
连通性测试
ping - 基础连通性测试
# 基本ping测试
ping -c 4 8.8.8.8
# 指定源接口ping
ping -I eth0 192.168.1.1
# 设置TTL值
ping -t 64 8.8.8.8
# 连续ping监控
ping -i 1 192.168.1.1
实际应用:在设备配网过程中,ping命令用于验证网络配置是否正确。
traceroute/tracepath - 路径追踪
# 基本路径追踪
traceroute 8.8.8.8
# 指定源接口
traceroute -i eth0 8.8.8.8
# 使用UDP协议
traceroute -U 8.8.8.8
# 使用ICMP协议
traceroute -I 8.8.8.8
mtr - 实时路径监控
# 实时监控网络路径
mtr 8.8.8.8
# 生成报告
mtr --report 8.8.8.8
# 指定包数量
mtr -c 100 8.8.8.8
网络抓包与分析
tcpdump - 命令行抓包工具
# 抓取指定接口的包
tcpdump -i eth0
# 抓取指定主机的包
tcpdump host 192.168.1.100
# 抓取指定端口的包
tcpdump port 80
# 抓取HTTP包
tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
# 保存抓包文件
tcpdump -i eth0 -w capture.pcap
实际应用场景:在MQTT通信故障排查中,使用tcpdump抓取1883端口的包,分析连接建立过程。
wireshark - 图形化抓包分析
# 启动wireshark
wireshark &
# 从命令行打开抓包文件
wireshark capture.pcap
网络扫描与发现
nmap - 网络扫描
# 扫描网段
nmap -sn 192.168.1.0/24
# 端口扫描
nmap -p 80,443,22 192.168.1.100
# 服务版本检测
nmap -sV 192.168.1.100
# 操作系统检测
nmap -O 192.168.1.100
netstat/ss - 连接状态查看
# 查看所有连接
netstat -tuln
# 查看监听端口
netstat -tuln | grep LISTEN
# 使用ss命令(更现代)
ss -tuln
# 查看进程连接
ss -tulnp
网络故障排查实际案例
物联网设备配网失败
问题描述:设备无法连接到WiFi网络,配网过程失败。
排查步骤:
1. 检查网络接口状态
ip link show wlan0
# 输出:wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500
# 分析:接口已启用但无载波信号
2. 检查WiFi驱动状态
dmesg | grep wlan
# 查看驱动加载和错误信息
3. 检查WiFi配置
iwconfig wlan0
# 查看WiFi接口配置
iwlist wlan0 scan
# 扫描可用网络
4. 检查DHCP过程
tcpdump -i wlan0 -n port 67 or port 68
# 抓取DHCP包分析配网过程
解决方案:
• 检查WiFi密码是否正确 • 确认路由器支持设备使用的WiFi协议 • 检查设备是否支持目标频段(2.4GHz/5GHz)
MQTT通信中断
问题描述:设备与云平台的MQTT连接频繁断开。
排查步骤:
1. 检查网络连通性
ping -c 10 mqtt.example.com
# 测试到MQTT服务器的连通性
2. 检查MQTT端口连通性
telnet mqtt.example.com 1883
# 测试MQTT端口是否可达
3. 抓取MQTT通信包
tcpdump -i eth0 -A -s 0 'tcp port 1883'
# 分析MQTT通信过程
4. 检查防火墙规则
iptables -L -n
# 查看防火墙规则是否阻止MQTT通信
解决方案:
• 配置防火墙允许1883端口 • 检查MQTT客户端的心跳配置 • 优化网络参数减少连接超时
网络性能瓶颈
问题描述:设备网络传输速度慢,延迟高。
排查步骤:
1. 网络性能测试
# 测试带宽
iperf3 -c 192.168.1.100
# 测试延迟
ping -c 100 192.168.1.1 | grep "rtt"
2. 检查网络接口统计
ethtool -S eth0 | grep -E "(errors|dropped|collisions)"
# 查看网络错误统计
3. 检查系统负载
top
htop
# 查看CPU和内存使用情况
4. 网络队列分析
ss -i
# 查看TCP连接状态和参数
解决方案:
• 优化TCP参数(窗口大小、拥塞控制算法) • 检查网卡驱动和固件版本 • 调整系统网络缓冲区大小
网络监控与日志分析
系统日志分析
# 查看网络相关日志
journalctl -u NetworkManager
# 查看内核网络日志
dmesg | grep -i network
# 查看系统日志中的网络错误
grep -i "network\|ethernet\|wifi" /var/log/syslog
网络性能监控
# 实时网络监控
iftop -i eth0
# 网络接口统计
cat /proc/net/dev
# 网络连接统计
cat /proc/net/snmp
自定义网络监控脚本
#!/bin/bash
# 网络监控脚本
monitor_network() {
whiletrue; do
# 检查网络接口状态
for interface in eth0 wlan0; do
if ip link show $interface | grep -q "UP"; then
echo"$(date): $interface 接口正常"
else
echo"$(date): $interface 接口异常"
fi
done
# 检查网络连通性
if ping -c 1 8.8.8.8 > /dev/null 2>&1; then
echo"$(date): 外网连通性正常"
else
echo"$(date): 外网连通性异常"
fi
sleep 60
done
}
END


往期精选:

请点下【♡】给小编加鸡腿
