Linux系统作为服务器领域的主流操作系统,网络连接的稳定性直接关系到业务服务的可用性。当出现网络延迟升高、请求超时、数据传输中断等网络连接不稳定和丢包问题时,需要有清晰的排查思路来定位和解决问题。
一、先确认网络问题的具体表现
在开始排查前,首先要明确问题的范围和特征,避免盲目操作。可以通过以下方式初步确认问题:
- 确认是个别服务异常还是整体网络异常,比如只有访问外部接口丢包,还是内部服务之间通信也有问题
- 记录问题出现的时间规律,是持续存在还是间歇性出现,是否在业务高峰时段加重
- 确认影响的端口和协议,是TCP连接异常还是UDP传输丢包
二、使用常用工具诊断网络状态
1. 基础连通性检测
首先使用ping命令测试目标地址的连通性和丢包率,判断底层网络是否通畅:
# 测试和目标地址的连通性,发送10个ICMP包 ping -c 10 192.168.0.1 # 测试公网地址连通性 ping -c 10 ipipp.com
如果ping出现大量丢包或者延迟波动极大,说明网络链路存在异常。
2. 查看系统网络统计信息
使用netstat或者ss命令查看系统的网络连接状态、收发数据包的统计情况:
# 查看所有TCP连接状态统计
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn
# 查看网卡收发数据包的错误统计
netstat -i
如果netstat -i输出中RX-ERR或者TX-ERR数值持续增长,说明网卡层面存在收发包错误。
3. 抓包分析具体丢包位置
使用tcpdump工具抓取对应端口的网络包,分析丢包发生在哪个环节:
# 抓取eth0网卡80端口的TCP包,保存到文件 tcpdump -i eth0 port 80 -w capture.pcap # 实时查看抓取到的包内容 tcpdump -i eth0 port 80 -nn -v
三、常见原因及对应解决方案
1. 网卡配置或硬件问题
如果是网卡层面的错误,首先检查网卡速率和双工模式是否匹配:
# 查看网卡配置信息 ethtool eth0 # 如果速率不匹配,手动设置网卡速率和双工模式 ethtool -s eth0 speed 1000 duplex full autoneg off
如果是物理网卡硬件故障,需要更换网卡或者联系机房排查物理链路问题。
2. 系统内核参数配置不合理
Linux内核的网络相关参数配置不当也会导致丢包,常见的需要调整的参数如下:
# 临时调整内核参数,增大TCP连接队列和缓冲区 sysctl -w net.core.somaxconn=4096 sysctl -w net.ipv4.tcp_max_syn_backlog=8192 sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216 # 永久生效需要写入/etc/sysctl.conf文件 echo "net.core.somaxconn=4096" >> /etc/sysctl.conf echo "net.ipv4.tcp_max_syn_backlog=8192" >> /etc/sysctl.conf sysctl -p
3. 防火墙或安全策略拦截
检查系统的防火墙规则是否误拦截了正常流量:
# 查看iptables规则 iptables -L -n -v # 如果是firewalld,查看规则 firewall-cmd --list-all # 临时关闭防火墙测试(测试后需按需恢复) systemctl stop firewalld
如果关闭防火墙后问题消失,需要调整防火墙规则,放行对应端口的流量。
4. 网络链路负载过高
如果是带宽跑满导致的丢包,需要限制对应服务的带宽使用,或者升级带宽:
# 使用tc工具限制eth0网卡出口带宽为100Mbps tc qdisc add dev eth0 root tbf rate 100mbit burst 32kbit latency 400ms
四、后续预防措施
问题解决后,建议配置网络监控告警,实时监测网卡的丢包率、错误包数量、带宽使用率等指标,出现异常时及时通知。同时定期巡检系统内核参数和网络配置,避免配置回退或者不合理修改导致问题复发。