0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TCPDump抓包分析实战

马哥Linux运维 来源:马哥Linux运维 2025-08-06 17:58 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

TCPDump抓包分析实战:10个常见网络问题排查案例

作为一名资深运维工程师,我在生产环境中遇到过各种奇葩的网络问题。今天分享10个真实案例,带你掌握TCPDump这把利器,让网络问题无处遁形!

前言:为什么TCPDump是运维必备神器?

在凌晨3点被告警吵醒时,当用户疯狂投诉网络卡顿时,当开发甩锅说"肯定是网络问题"时——TCPDump就是你最可靠的战友。它不会说谎,不会掩饰,只会如实记录每一个数据包的来龙去脉。

本文你将学到:

• 10个生产环境真实排查案例

• TCPDump核心参数使用技巧

• 抓包结果分析的黄金法则

• 快速定位问题的实战方法论

案例1:神秘的连接超时 - TCP三次握手失败

问题现象

# 用户反馈:访问API接口频繁超时
curl: (7) Failed to connect to api.example.com port 443: Connection timed out

抓包分析

# 抓包命令
tcpdump -i eth0 -nn -s0 -w timeout.pcap host api.example.com

# 分析结果
1015.123456 IP 192.168.1.100.45678 > 203.0.113.10.443: Flags [S],seq1000, win 65535
1018.123456 IP 192.168.1.100.45678 > 203.0.113.10.443: Flags [S],seq1000, win 65535
1024.123456 IP 192.168.1.100.45678 > 203.0.113.10.443: Flags [S],seq1000, win 65535

关键发现:只有SYN包,没有SYN-ACK回包!

解决方案

检查防火墙规则,发现出站443端口被误删。这种"只出不进"的问题,只有抓包才能快速定位。

运维金句:网络问题80%都卡在防火墙上,TCPDump帮你一眼看穿!

案例2:诡异的慢查询 - TCP窗口缩放问题

问题现象

数据库查询偶发性慢,监控显示CPU、内存正常,但响应时间飙升到30秒。

抓包技巧

# 专门抓取数据库流量
tcpdump -i any -nn -s0 port 3306 and host 192.168.1.50 -w mysql_slow.pcap

# 重点关注窗口大小变化
tcpdump -r mysql_slow.pcap -nn | grep"win"

分析结果

# 正常情况
1001 IP client.45678 > mysql.3306: win 65535
# 异常情况 
1002 IP client.45678 > mysql.3306: win 0
1002 IP mysql.3306 > client.45678: win 32768 [window probe]

发现问题:TCP接收窗口为0,触发零窗口探测,导致传输停顿。

根本原因:应用程序处理MySQL结果集太慢,接收缓冲区被占满。

案例3:负载均衡的背后杀手 - RST包追踪

问题现象

负载均衡后端服务器连接频繁中断,日志显示大量"Connection reset by peer"。

实战抓包

# 专门捕获RST包
tcpdump -i eth0 -nn'tcp[tcpflags] & tcp-rst != 0'-c 100

# 结果分析
1115 IP 10.0.1.100.80 > 192.168.1.200.12345: Flags [R.],seq12345, ack 67890
1116 IP 10.0.1.100.80 > 192.168.1.201.12346: Flags [R.],seq54321, ack 98765

分析思路:

1. RST包的发送方向(是客户端还是服务端主动断开?)

2. RST包的时机(在数据传输中?还是连接建立后?)

3. 序列号是否正确(判断是否为异常RST)

最终发现:负载均衡器健康检查配置错误,超时时间设置过短,导致正常连接被误杀。

案例4:HTTP请求的离奇失踪 - 应用层协议分析

问题描述

Web应用POST请求成功率只有70%,GET请求正常,开发坚持说代码没问题。

深度抓包

# 抓取HTTP流量并保存
tcpdump -i eth0 -A -s0 port 8080 -w http_post.pcap

# 过滤POST请求
tcpdump -r http_post.pcap -A | grep -i"post"

分析发现

# 成功的POST请求
POST/api/userHTTP/1.1
Content-Length:256
Content-Type:application/json

{"user_id":123,"name":"test"}

# 失败的POST请求 
POST/api/userHTTP/1.1
Content-Length:512
Content-Type:application/json

{"user_id":123,"name":"test"}

问题定位:Content-Length与实际载荷不匹配!

根本原因:反向代理Nginx配置了client_max_body_size限制,但错误日志级别设置过高,运维没有察觉。

案例5:DNS解析的隐形陷阱

故障现象

应用启动后前几分钟正常,随后域名解析失败,重启临时解决。

DNS抓包诊断

# 抓取DNS查询流量
tcpdump -i eth0 -nn port 53 -w dns_issue.pcap

# 分析DNS响应
tcpdump -r dns_issue.pcap -nn | grep"A?"

关键发现

# 正常DNS查询
1201 IP 192.168.1.100.12345 > 8.8.8.8.53: 12345+ A? api.example.com
1201 IP 8.8.8.8.53 > 192.168.1.100.12345: 12345 1/0/0 A 203.0.113.10

# 异常DNS查询
1201 IP 192.168.1.100.12346 > 8.8.8.8.53: 12346+ A? api.example.com
# 没有回包!

问题根源:DNS服务器IP配置了双栈,但IPv6路由有问题,应用随机选择DNS服务器导致间歇性失败。

案例6:SSL握手的暗黑时刻

问题场景

HTTPS站点间歇性报告SSL握手失败,浏览器显示"ERR_SSL_PROTOCOL_ERROR"。

TLS抓包技巧

# 抓取SSL握手过程
tcpdump -i eth0 -nn -s0 port 443 and host web.example.com -w ssl_handshake.pcap

# 使用Wireshark分析或命令行查看
tcpdump -r ssl_handshake.pcap -nn -x

分析要点

# 正常SSL握手流程
Client Hello -> Server Hello -> Certificate -> Server Hello Done ->
Client Key Exchange -> Change Cipher Spec -> Finished

# 异常情况:在Certificate阶段中断
Client Hello -> Server Hello -> [连接断开]

深度分析:证书链不完整,中间CA证书缺失,部分客户端无法验证。

案例7:微服务间的通信雷区

复杂场景

微服务A调用服务B,成功率95%,但失败的5%找不到规律。

分布式追踪抓包

# 多网卡同时抓包
tcpdump -i any -nn -s0'(src host serviceA and dst host serviceB) or (src host serviceB and dst host serviceA)'-w microservice.pcap

# 按连接分组分析
tcpdump -r microservice.pcap -nn | awk'{print $3 " -> " $5}'|sort|uniq-c

意外发现

# 正常连接
192.168.1.10.8080 -> 192.168.1.20.9090: established

# 异常连接 - 注意端口复用问题
192.168.1.10.8080 -> 192.168.1.20.9090: [端口被复用,序列号混乱]

问题本质:服务B重启时,TCP TIME_WAIT状态处理不当,导致端口复用冲突。

案例8:带宽打满的真相

告警现象

服务器带宽使用率突然飙升到95%,但业务量没有明显增长。

流量分析抓包

# 按流量大小排序连接
tcpdump -i eth0 -nn -q |head-1000 | awk'{print $3}'|sort|uniq-c |sort-nr

# 抓取大流量连接详情
tcpdump -i eth0 -nn -s0 src 192.168.1.100 -w bandwidth_hog.pcap

惊人发现

大部分流量来自一个内网IP的重复请求,仔细分析发现是负载均衡健康检查配置错误,检查间隔设置为1ms!

优化方案:调整健康检查参数,带宽使用率立即降到正常水平。

案例9:数据包的神秘变异

诡异现象

客户端发送正确数据,但服务端接收到的数据被截断或乱码。

中间人抓包

# 在网关设备抓包
tcpdump -i eth0 -xx -s0 host client.ip and host server.ip -w packet_corruption.pcap

# 对比数据包内容
tcpdump -r packet_corruption.pcap -xx | grep"payload"

真相大白

# 客户端发送(正确)
45 00 05 dc ... [完整数据包]

# 服务端接收(被篡改) 
45 00 05 dc ... [数据包被中间网络设备修改]

罪魁祸首:某台交换机固件bug,对特定模式的数据包进行了错误的校验和重计算。

案例10:时间就是金钱 - 延迟分析

性能问题

API响应时间P99达到5秒,但数据库查询只需50ms。

时延测量抓包

# 精确时间戳抓包
tcpdump -i eth0 -ttt -nn port 8080 -w latency_analysis.pcap

# 分析往返时间
tcpdump -r latency_analysis.pcap -ttt -nn | grep"HTTP"

延迟分解

# TCP建连时间:150ms
# SSL握手时间:300ms 
# HTTP请求处理:50ms
# 网络传输时间:4500ms ← 问题在这里!

最终定位:出口网关的QoS策略错误,将API流量标记为低优先级。

TCPDump实战技巧总结

黄金参数组合

# 万能抓包命令
tcpdump -i any -nn -s0 -w capture.pcap

# 参数解释
-i any   # 监听所有网卡
-nn    # 不解析主机名和端口名
-s0    # 抓取完整数据包
-w file  # 保存到文件

过滤器魔法

# 按主机过滤
tcpdump host 192.168.1.100

# 按端口过滤 
tcpdump port 80 or port 443

# 按协议过滤
tcpdump tcp and not ssh

# 按标志位过滤
tcpdump'tcp[tcpflags] & tcp-syn != 0'

# 组合过滤
tcpdump -i eth0 -nn'host 192.168.1.100 and (port 80 or port 443) and tcp[tcpflags] & tcp-syn != 0'

分析思维框架

网络问题排查四步法:

1.现象描述- 准确描述问题现象,收集错误日志

2.假设验证- 基于经验提出假设,设计抓包验证方案

3.数据分析- 深入分析抓包数据,寻找异常模式

4.根因确认- 找到根本原因,制定解决方案

抓包分析五个维度:

连接层面:TCP三次握手、四次挥手是否正常

传输层面:序列号、确认号、窗口大小变化

应用层面:HTTP状态码、SSL握手过程

时间层面:延迟分布、超时设置

统计层面:重传率、丢包率、连接数

进阶技能点

1. 自动化分析脚本

#!/bin/bash
# 网络问题快速诊断脚本
echo"开始网络诊断..."

# 基础连通性测试
ping -c 4$1> /tmp/ping.log 2>&1

# 抓包分析
timeout30 tcpdump -i any -nn -c 100 host$1-w /tmp/capture.pcap 2>/dev/null

# 分析结果
echo"=== 连通性测试 ==="
cat/tmp/ping.log

echo"=== 数据包统计 ==="
tcpdump -r /tmp/capture.pcap -nn |head-10

2. 性能监控集成

将TCPDump与监控系统结合,实现异常时自动抓包:

# Zabbix触发器脚本示例
if[$NETWORK_ERROR_RATE-gt 5 ];then
  tcpdump -i eth0 -G 300 -W 2 -w /var/log/auto_capture_%Y%m%d_%H%M%S.pcap &
 echo"自动抓包已启动"
fi

3. 大规模环境优化

生产环境抓包的注意事项:

• 使用环形缓冲区避免磁盘空间不足

• 合理设置过滤器减少CPU开销

• 在网络镜像端口进行抓包避免影响业务

• 建立抓包数据的归档和清理策略

结语:掌握网络诊断的核心武器

作为运维工程师,网络问题永远是我们绕不开的话题。TCPDump不仅仅是一个工具,更是我们理解网络通信本质的窗口。

记住这些关键点:

• 网络问题70%可以通过抓包快速定位

• 掌握基础的TCP/IP协议是前提

• 培养从数据包中发现异常模式的直觉

• 建立系统化的问题排查方法论

最后的运维哲学:

当所有人都在猜测问题原因时,只有数据包不会撒谎。TCPDump让我们成为网络世界的侦探,每一个字节都是破案的线索。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    9

    文章

    3174

    浏览量

    76146
  • 网络
    +关注

    关注

    14

    文章

    8141

    浏览量

    93183
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1418

    浏览量

    83062

原文标题:TCPDump抓包分析实战:10个常见网络问题排查案例

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    WiresharkTcpdump实例分析

    wireshark是开源软件,可以放心使用。可以运行在Windows和Mac OS上。对应的,linux下的包工具是 tcpdump。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。
    的头像 发表于 02-01 09:31 4421次阅读

    加密后分析的问题?

    请问一下,我的zigbee设备全部都开启了加密, 使用软件的时候,数据都是加密的,我应该怎么解密分析这些数据呢,谢谢了
    发表于 06-01 14:22

    tcpdump指定域名吗

    tcpdump指定域名的吗?
    发表于 05-21 04:08

    空口方式和wireshank分析工具使用介绍

    主要介绍下最近使用中感觉很万能的空口方式和wireshank分析工具使用;目的:抓取各种设备网络通信过程中数据,定位并分析软硬件设计中
    发表于 01-18 09:11

    请问BLE-Dongle是否支持协议分析?请问怎么进行协议分析

    如题,请问贵司的BLE-Dongle是否支持协议分析?请问怎么进行协议分析
    发表于 09-07 07:12

    使用tcpdump后生成的pcap文件大小为0

    请大佬们帮忙看看怎么回事吧 我在SSH中使用“sudo tcpdump -i eth0 dst 192.168.0.55”命令进行,control+c停止后,使用“sudo tcpdump
    发表于 05-18 22:29

    网络行分析工具tcpdump安装介绍

    概述 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据进行截获的分析工具。
    的头像 发表于 08-18 10:05 9629次阅读
    网络行<b class='flag-5'>抓</b><b class='flag-5'>包</b><b class='flag-5'>分析</b>工具<b class='flag-5'>tcpdump</b>安装介绍

    tcpdump如何实现内核态的

    的呢?有的同学知道 tcpdump 是基于 libpcap 的,那么 libpcap 的工作原理又是啥样的呢。如果让你裸写一个程序,你有没有思路? 按照飞哥的风格,不搞到最底层的原理咱是不会罢休的。所以我对相关的源码进行了深
    的头像 发表于 10-08 10:34 3235次阅读
    <b class='flag-5'>tcpdump</b>如何实现<b class='flag-5'>抓</b>内核态的<b class='flag-5'>包</b>

    为什么不到baidu的数据

    从上面的结果可以知道请求baidu.com时会去访问39.156.66.10。于是用下面的tcpdump命令进行,大概的意思是eth0网卡且ip为39.156.66.10的网络
    的头像 发表于 01-05 10:43 1788次阅读

    WiresharkTcpdump实例分析

    今天浩道跟大家分享2款网工生涯中必不可少的神器Wireshark及Tcpdump,掌握这2个神器的使用,运维排查故障基本就是如鱼得水。
    的头像 发表于 02-01 09:31 2861次阅读

    Linux网络分析tcpdump工作原理和应用

    速度太慢。 当我们工程师与用户面对网络问题争执不下时,通过 tcpdump ,可以快速定位故障原因,轻松甩锅,毫无压力。 当我们新开发的网络程序,没有按照预期工作时,通过 tcpdump
    的头像 发表于 09-28 15:30 938次阅读
    Linux网络<b class='flag-5'>分析</b><b class='flag-5'>tcpdump</b>工作原理和应用

    Linux网络分析tcpdump的基本用法

    tcpdump -i eth0 3. 时指定 -n 选项,不解析主机和端口名。这个参数很关键,会影响的性能,一般
    的头像 发表于 09-28 15:42 1618次阅读

    tcpdump常用的选项参数详细总结

    常用选项通过上述的实战案例,相信大家已经掌握的 tcpdump 基本用法,在这里来详细总结一下常用的选项参数。 (一)基础选项 -i:指定接口 -D:列出可用于的接口 -s:指定数
    的头像 发表于 09-28 15:52 3581次阅读

    CentOS中使用tcpdump

    CentOS中使用tcpdump
    的头像 发表于 10-28 14:48 1108次阅读

    Linux运维必备技能:手把手教你用tcpdump精准

    简介 网络数据截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。 tcpdump - dump traffic on a
    的头像 发表于 12-24 11:20 2174次阅读