Linux 中怎么使用 Tcpdump 辅助分析网络性能损耗

落浩同学_6627

落浩同学_6627

2026-10-25

770人浏览

原创

tcpdump不直接测性能,但能定位协议栈及之后环节的性能损耗,如重传、乱序、ack延迟等;需结合网卡指标、内核状态与时间戳分析,聚焦关键字段过滤,并在问题复现时精准抓包。

linux 中怎么使用 tcpdump 辅助分析网络性能损耗

tcpdump 不是直接测性能的工具,但它能帮你定位性能损耗发生的环节和原因。关键在于结合网络收包全链路理解抓到的数据——从网卡进包、DMA搬运、NAPI软中断处理、协议栈解析,到 socket 接收队列和应用读取。损耗可能出现在任一环节,而 tcpdump 捕获的是已成功进入内核协议栈的数据包,所以它主要反映“协议栈层面及之后”的问题,比如重传、乱序、ACK延迟、窗口收缩等。

明确抓包位置与时机

性能损耗往往具有瞬时性或周期性,盲目抓包容易错过关键窗口。建议:

  • 先用 netstat -s | grep -i "retransmit\|outoforder" 或 ss -i 快速查看是否有明显重传或 RTT 异常
  • 确认业务高峰期或问题复现时刻再启动抓包,避免长时捕获导致磁盘满或性能干扰
  • 优先指定网卡(如 -i eth0),避免 -i any 引入虚拟设备或 lo 流量干扰分析
  • 使用 -s 1500 截断包长(足够覆盖典型 TCP/IP 头部),减少 I/O 和文件体积

聚焦性能相关字段的过滤与观察

不看全量包,只盯关键指标能大幅提升分析效率:

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 查重传:tcpdump -r capture.pcap 'tcp[tcpflags] & tcp-rst == 0 and (tcp[tcpflags] & tcp-ack != 0 and tcp[tcpflags] & tcp-syn == 0)' | awk '{print $1,$2,$3,$4,$5,$6,$7}' | sort | uniq -c | sort -nr | head -10(配合 Wireshark 的 tcp.analysis.retransmission 更直观)
  • 查零窗口通告:tcpdump -r capture.pcap 'tcp[20:2] == 0'(第20字节起为窗口大小字段,2字节为0表示接收方窗口关闭)
  • 查大延迟 ACK:tshark -r capture.pcap -Y "tcp.analysis.ack_rtt > 100" -T fields -e frame.time_epoch -e ip.src -e tcp.srcport -e ip.dst -e tcp.dstport -e tcp.analysis.ack_rtt | sort -k6 -n(需 tshark 支持,或用 Wireshark 统计→TCP流图)
  • 查 SACK 块缺失或重复:tcpdump -r capture.pcap 'tcp[tcpflags] & tcp-push != 0' | grep -A2 -B2 "sack"(配合 Wireshark 过滤 tcp.options.sack)

关联内核与网卡指标交叉验证

tcpdump 看到的是“协议栈视角”,必须对照底层指标才能判断损耗源头:

  • 对比 ethtool -S eth0 | grep -E "(drop|rx_|tx_|overrun)" 和 netstat -i 中 RX-DRP/RX-OVR:若网卡层已有大量 RX-OVR(环形缓冲区溢出),说明丢包发生在 DMA 之前,tcpdump 根本抓不到这些包——此时优化方向是调大 ring buffer(ethtool -G eth0 rx 4096)或启用 RPS/RFS
  • 检查 cat /proc/net/snmp | grep -A1 Tcp 中 TCPSegsRetrans 与 tcpdump 统计是否匹配,不一致说明部分重传未被完整捕获(如 SYN 重传可能被 -i eth0 漏掉)
  • 观察 ss -i 输出中的 rtt、qloss(套接字队列丢包)、cwnd(拥塞窗口)值,与抓包中序列号推进节奏比对,可判断是网络层拥塞还是应用读取慢导致接收队列堆积

用时间戳定位处理延迟节点

tcpdump 默认时间戳精度为微秒级(-tttt 可看完整时间),配合内核日志能定位软中断或协议栈处理延迟:

  • 加 -ttt 抓包,看相邻数据包时间差是否突增(如从 0.1ms 跳到 50ms),提示 NAPI 轮询或软中断被抢占
  • 在抓包同时运行 perf record -e irq:softirq_entry -g -a sleep 30,然后 perf report 查看 net_rx_action 占用 CPU 情况
  • 若发现大量包在某个时间点后集中出现(burst),但应用 recv() 调用间隔很长,说明 socket 接收队列有积压,需检查应用是否及时 read() 或调整 net.core.rmem_max

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

linux linux系统

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 网络安全
Java 网络安全

本专题聚焦 Java 在网络安全与加密通信中的应用,系统讲解常见加密算法(MD5、SHA、AES、RSA)、数字签名、HTTPS证书配置、令牌认证(JWT、OAuth2)及常见安全漏洞防护(XSS、SQL注入、CSRF)。通过实战项目(如安全登录系统、加密文件传输工具),帮助学习者掌握 Java 安全开发与加密技术的实战能力。

2025.10.13

4945

12

PHP 安全与防护
PHP 安全与防护

本专题聚焦于PHP开发中的安全问题与防御措施,详细讲解SQL注入、XSS攻击、CSRF攻击、文件包含漏洞等常见安全风险及其修复方法。通过结合实际案例,帮助开发者理解漏洞成因,掌握输入验证、会话安全、加密存储与安全编码规范,全面提升PHP网站的安全防护水平。

2025.11.04

415

21

Java 网络安全
Java 网络安全

本专题聚焦 Java 在网络安全与加密通信中的应用,系统讲解常见加密算法(MD5、SHA、AES、RSA)、数字签名、HTTPS证书配置、令牌认证(JWT、OAuth2)及常见安全漏洞防护(XSS、SQL注入、CSRF)。通过实战项目(如安全登录系统、加密文件传输工具),帮助学习者掌握 Java 安全开发与加密技术的实战能力。

2025.10.13

4945

12

PHP 安全与防护
PHP 安全与防护

本专题聚焦于PHP开发中的安全问题与防御措施,详细讲解SQL注入、XSS攻击、CSRF攻击、文件包含漏洞等常见安全风险及其修复方法。通过结合实际案例,帮助开发者理解漏洞成因,掌握输入验证、会话安全、加密存储与安全编码规范,全面提升PHP网站的安全防护水平。

2025.11.04

415

21

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

20

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

20

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

20

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

20

25

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习