Linux 系统中怎么使用 tcpdump 分析网络延迟过高的根本原因

小雪姑娘_2106

小雪姑娘_2106

2026-10-08

776人浏览

原创

tcpdump本身不直接显示延迟数值,但通过捕获带微秒时间戳的完整数据包,结合三次握手时序、tcp选项(如timestamp)、重传行为及服务端/客户端同步抓包,可精准定位延迟发生在链路、中间设备、服务端响应或本机内核/应用层。

linux 系统中怎么使用 tcpdump 分析网络延迟过高的根本原因

tcpdump 本身不直接显示“延迟数值”,但它能捕获原始数据包的时间戳和交互逻辑,结合协议行为分析,可精准定位延迟发生在哪一环:是链路传输慢、中间设备策略拦截、服务端响应迟缓,还是本机内核或应用处理卡顿。

抓对位置:选接口、设时间戳、保完整包

延迟分析最怕漏包或截断。务必在关键路径上抓包:

  • 若怀疑本地问题,用 tcpdump -i any -nn -s0 -w delay.pcap —— any 覆盖 lo 和物理网卡,避免 offload 导致的收发不一致;-s0 确保不丢载荷,便于看 TCP 选项(如 Timestamp、SACK)
  • 若目标明确(如访问某 API),加过滤:tcpdump -i eth0 -nn -s0 'host 10.20.30.40 and port 443' -w api_delay.pcap
  • 开启微秒级时间戳:tcpdump -tttt(输出带日期与微秒),方便计算各段耗时

聚焦三次握手和 ACK 时序

TCP 建立阶段的延迟最敏感,也最容易暴露根因:

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 用 Wireshark 打开 pcap,筛选 tcp.flags.syn == 1 or tcp.flags.ack == 1,观察 SYN → SYN-ACK → ACK 的时间间隔
  • 若 SYN 发出后很久才收到 SYN-ACK,说明问题在服务端(防火墙拦截、端口未监听、SYN Cookie 触发、全连接队列溢出)
  • 若 SYN-ACK 发出后 ACK 延迟抵达,可能是客户端网络拥塞、路由不对称,或客户端软中断/recv() 调用不及时
  • 注意看 TCP Timestamp 选项:若服务端回的 TSval 明显滞后于客户端发出的 TSecr,说明服务端内核或应用层处理积压

识别典型延迟模式并关联系统指标

单看包不行,要和内核状态交叉验证:

  • “第一跳就高且抖动大”:抓包中本地网关(如 192.168.1.1)的 ARP 请求/响应频繁、或 ICMP/TCP SYN 回复延迟波动 >50ms → 检查 arp -a 是否刷新异常、/proc/net/neigh/eth0/stats 中 unresolv 是否上涨、执行 tcpdump -i eth0 arp 看是否有伪造响应
  • “SYN 正常但后续 ACK 延迟、重传多”:关注 TCPSynRetrans(netstat -s | grep TCPSynRetrans),值高说明握手卡在中间;同时查 ss -i 看连接的 rttvar,持续 >100ms 表明 RTT 估计失稳,需调 net.ipv4.tcp_rmem
  • “Wireshark 显示大量 Retransmission,但 netstat -s 无丢包统计”:说明丢包发生在网卡 DMA 层 → 运行 ethtool -S eth0 | grep -i "missed\|drop",重点看 rx_missed_errors,高则需调大 ring buffer 或启用 RPS

避开 ICMP 陷阱,用业务流量代替 ping

很多网络设备静默丢弃 ICMP,导致 ping 假性高延迟。应改用贴近真实业务的探测:

  • 用 hping3 -c 10 -S -p 80 example.com 发 TCP SYN,观察 rtt;若它正常而 ping 高,说明不是链路问题,而是 ICMP 被限
  • 用 mtr -r -c 50 -i 0.2 example.com 查哪一跳开始丢包或抖动突增;若第一跳(网关)就异常,不用查远端
  • 必要时在服务端同步抓包:tcpdump -i lo -nn -s0 'port 80' -w server_loop.pcap,对比客户端发出时间和服务端收到时间差,即可分离“网络传输”和“服务端处理”延迟

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

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

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

80

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

180

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

140

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

80

12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

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

共0课时 | 0人学习