0

0

Linux网络丢包分析流程_链路质量判断思路【指导】

冰川箭仙

冰川箭仙

发布时间:2026-01-03 13:55:34

|

713人浏览过

|

来源于php中文网

原创

用 mtr 定位丢包位置:若仅末跳丢包,多为服务端问题;若中间某跳持续高丢包,则锁定该网络设备;需结合 tcping 验证端口、netstat -i 查 RX-OVR/RX-DRP、tc qdisc 检查 netem 丢包、iptables/conntrack 排查内核过滤、tcpdump 抓包确认是否入栈、ss -i 分析套接字层接收队列堆积。

linux网络丢包分析流程_链路质量判断思路【指导】

用 ping 和 mtr 判断丢包是否在链路中

先确认丢包真实存在,且不是本地或远端单点问题。直接 ping 只能告诉你“有没有丢”,但没法说清“在哪丢”。这时候必须上 mtr——它一边 traceroute 逐跳探测,一边持续 ping 每一跳,输出里每行的 Loss% 就是关键证据。

  • 如果只有最后一跳(目标主机)丢包,大概率是服务端问题(如 Nginx 未监听、防火墙拦截、应用崩溃)
  • 如果中间某跳(比如第 4 跳)持续 >10% 丢包,而前后跳正常,基本锁定该网络设备(运营商节点、IDC 接入交换机等)有问题
  • 注意:部分路由器禁 ICMP 回复,??? 或高 Loss% 是假阳性,需结合 tcping -x 5 www.example.com 443 验证业务端口是否真不通

查网卡统计:别让 RX-OVR 欺骗你

netstat -i 输出里的 RX-OVR(Ring Buffer 溢出)常被当作“网卡扛不住”的铁证,但现实更复杂:它只反映驱动层 Ring Buffer 满了之后丢包,不包括后续协议各层丢弃。更隐蔽的是——tc qdisc 配置的丢包(比如 netem loss 30%)完全不会出现在这里。

  • 执行 netstat -i,重点看 RX-DRP(进缓冲区后因内存不足等丢)和 RX-OVR 是否持续增长
  • 若两者都为 0,但业务明显丢包,立刻检查 QoS:tc qdisc show dev eth0,尤其留意含 losslimitdelaynetem 规则
  • ethtool -S eth0 | grep -i "drop\|overrun" 可看到更底层硬件计数,但虚拟网卡(如 virtio)这些字段常为 0,不可全信

绕过 iptables 和 conntrack 看真实流向

很多丢包根本不是网络问题,而是被内核“主动杀掉”了。iptables 的 DROP 规则不记日志时,包就静默消失;更麻烦的是连接跟踪(conntrack)满表导致新连接 SYN 包被丢,现象和网络中断一模一样。

Reword
Reword

AI文章写作,一个会思考的编辑

下载
  • 临时清空过滤链验证:iptables -P INPUT ACCEPT; iptables -P FORWARD ACCEPT; iptables -F(操作后务必恢复)
  • 查 conntrack 压力:conntrack -Sentries 是否接近 max,再用 sysctl net.netfilter.nf_conntrack_max 确认上限
  • 抓包验证是否真到协议栈:tcpdump -i eth0 -n 'host 192.168.0.30 and port 80'。如果 tcpdump 没抓到包,但 mtr 显示最后一跳通——说明包压根没进本机,问题在链路或对端防火墙

套接字层丢包:ss -i 比 netstat -s 更准

当 TCP 连接已建立但数据收发异常,netstat -s | grep -i "retransmit\|drop" 只给汇总值,无法定位具体 socket。而 ss -i 能显示每个连接的重传、SACK、接收队列溢出(rcv_space vs rcv_rtt)等实时指标。

  • 查接收队列堆积:ss -tin state established '( dport = :80 )' | head -10,关注 skw(发送队列)、skr(接收队列)和 rcv_space
  • skr 接近 rcv_space 且持续不降,说明应用读取太慢,内核被迫丢后续包(TCP RcvQ Full 类丢包)
  • 对比 ss -spackets receivedwith invalid CSUM 差值,可粗略估算校验失败丢包比例

真正难缠的丢包,往往藏在“看似正常”的环节里:tc 规则无声无息吃掉 30% 包,conntrack 表满导致新连接永远卡在 SYN_RCVD,甚至应用层 recv() 调用太慢,让内核在套接字缓冲区就把包扔了——这些都不会在 ping 或 ifconfig 里报错,必须一层层剥开协议栈验证。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

227

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

491

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

496

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

225

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

329

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3505

2024.08.07

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

376

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

564

2023.08.10

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

194

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.5万人学习

Git 教程
Git 教程

共21课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号