0

0

Linux网络丢包排查教程_链路分析与抓包实践

冰川箭仙

冰川箭仙

发布时间:2026-01-08 20:27:09

|

891人浏览过

|

来源于php中文网

原创

Linux网络丢包需逐层排查:从物理链路、驱动、内核协议栈、防火墙到上层服务;先用ethtool、netstat、netstat -s定位丢包位置,再针对性tcpdump抓包分析,注意伪丢包场景如conntrack满、offload干扰等。

linux网络丢包排查教程_链路分析与抓包实践

Linux网络丢包不能只盯着应用层或某一个环节,得从物理链路、驱动、内核协议防火墙到上层服务逐层排查。抓包是手段,链路分析才是关键——先确认丢包发生的位置,再决定在哪抓、怎么抓、看什么字段。

一、快速定位丢包发生在哪一层

丢包可能出现在:网线/光模块故障、交换机端口限速、网卡驱动异常、内核收发队列溢出、iptables/nftables规则丢弃、TCP重传超时等。别一上来就 tcpdump,先用基础命令缩小范围:

  • 看网卡硬件状态:运行 ethtool eth0,重点关注 Link detected: yes(物理连通)、Speed/Duplex(协商是否正常)、rx/tx errorsdropped(驱动层丢包)
  • 查内核收发统计:运行 netstat -icat /proc/net/dev,对比 Rx droppedTx dropped —— 若 rx dropped 持续增长,可能是中断风暴、NAPI 调度不及时或 ring buffer 溢出;若 tx dropped 高,常见于 qdisc 队列满(如 pfifo_fast 默认只有 1000 包)
  • 检查连接级重传:运行 netstat -s | grep -A 5 "Tcp:",关注 retransmitstimeouts;高重传率说明丢包已影响到 TCP 层,但未必是本机问题,需结合对端日志交叉验证

二、针对性抓包:在哪抓、抓什么、怎么看

抓包位置决定你能看到什么。同一丢包现象,在不同位置抓包结论可能完全相反:

HyperWrite
HyperWrite

AI写作助手帮助你创作内容更自信

下载
  • 网卡入口(-i eth0):能看到所有进来的原始帧,包括被 iptables INPUT 丢弃的包。若这里没抓到目标请求,说明丢包在物理链路或上游设备
  • lo 接口:用于排查本地服务间调用(如 curl localhost),可排除网卡和网络路径干扰
  • 加 -n -t -S 参数组合:避免 DNS 解析延迟、打印时间戳、显示绝对序列号(-S),便于比对重传行为。例如:tcpdump -i eth0 -n -t -S port 8080
  • 关注关键字段:SYN 未回复 → 对端未收到或拒绝;ACK 未到达 → 中间丢包;重复 ACK + 后续重传 → 接收方丢包或乱序严重;RST 突然出现 → 应用主动关闭或防火墙拦截

三、常见易忽略的“伪丢包”场景

有些现象看似丢包,实为机制或配置导致,不必深挖链路:

  • iptables LOG 规则未接 DROP:只记录不丢弃,日志里看到大量匹配但连接正常,容易误判为丢包源
  • conntrack 表满:运行 conntrack -S 查看 insert_failed,值持续上升会导致新建连接被静默丢弃(无 RST,客户端超时)
  • 网卡 offload 功能干扰抓包:TSO/GSO/LRO 可能导致 tcpdump 看到“巨帧”或分段异常。临时关闭:ethtool -K eth0 tso off gso off lro off
  • 容器或虚拟网卡路径复杂:如 veth-pair + bridge + iptables + cni 插件,建议在 veth 主机侧、容器 netns 内、宿主机物理口分别抓包,画出数据流向图再比对

四、实用诊断组合命令速查

把高频操作固化成一行命令,减少排查盲区:

  • 查实时丢包+错误:watch -n 1 'ethtool eth0 | grep -E "(Speed|Link|errors|dropped)"; echo; cat /proc/net/dev | grep eth0'
  • 抓最近 10 秒 HTTP 流量并保存:timeout 10 tcpdump -i eth0 -w /tmp/http.pcap port 80 or port 443
  • 查本机所有连接的重传统计:ss -i | awk '$1 ~ /^[te]/ {print $1,$2,$3,$NF}' | grep retrans
  • 检查是否被 conntrack 拦截:grep -r "nf_conntrack" /proc/sys/net/netfilter/; conntrack -S

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.09.27

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

425

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

174

2023.10.30

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1007

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

57

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

350

2025.12.29

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

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

382

2023.07.18

堆和栈区别
堆和栈区别

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

567

2023.08.10

Golang 分布式缓存与高可用架构
Golang 分布式缓存与高可用架构

本专题系统讲解 Golang 在分布式缓存与高可用系统中的应用,涵盖缓存设计原理、Redis/Etcd集成、数据一致性与过期策略、分布式锁、缓存穿透/雪崩/击穿解决方案,以及高可用架构设计。通过实战案例,帮助开发者掌握 如何使用 Go 构建稳定、高性能的分布式缓存系统,提升大型系统的响应速度与可靠性。

59

2026.01.09

热门下载

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

精品课程

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

共48课时 | 6.8万人学习

Git 教程
Git 教程

共21课时 | 2.5万人学习

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

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