网络运维实战|TCPDump 超全抓包指南
在 Linux 服务器、线上生产环境中,大多数服务器无图形界面、无法使用 Wireshark,此时 TCPDump 就是线上故障排查的终极抓包神器。
TCPDump 是 Linux 系统原生、轻量级、高性能的命令行抓包工具,支持精准过滤、后台常驻抓包、保存 pcap 离线分析,是运维排查业务丢包、接口超时、TCP重传、端口异常、数据包错乱的核心工具。
本文基于生产环境实战场景,从零讲解 TCPDump 安装、核心命令、过滤语法、离线分析、避坑准则、零影响抓包技巧,适合所有线上服务器故障排查落地使用。
一、TCPDump 工具简介
博文定位:Linux 服务器无界面抓包、线上业务故障排查、生产环境无损抓包实操指南
核心优势:轻量低耗、无需图形、支持复杂过滤、可后台运行、不抢占业务资源、适配所有服务器环境
适用场景:业务间歇性超时、接口请求丢包、TCP 重传异常、内网通信异常、服务器对外访问异常、安全流量分析
二、TCPDump 安装方法
主流 Linux 发行版均可直接通过 yum / apt 快速安装,大部分 CentOS 系统默认自带。
1. CentOS / RHEL
yum install tcpdump -y
2. Ubuntu / Debian
apt install tcpdump -y
3. 查看版本(验证安装)
tcpdump --version
三、TCPDump 核心基础用法
TCPDump 命令语法灵活,支持网卡、IP、端口、协议多层过滤,是精准抓包的关键。
1. 查看服务器所有网卡
tcpdump -D
生产环境务必先确认网卡名称(eth0、ens33、bond0 等),避免抓错网卡。
2. 监听指定网卡所有流量
tcpdump -i eth0
实时滚动输出网卡全部数据包,适合简单流量观测。
3. 不解析域名、纯IP输出
tcpdump -i eth0 -n
生产必加参数:禁止DNS反向解析,大幅减少服务器资源消耗,避免卡顿。
4. 实时输出详细协议内容
tcpdump -i eth0 -nnv
-nn:不解析域名、不解析端口协议名;-v:展示详细数据包信息
四、生产高频精准过滤命令(核心实操)
无过滤的全量抓包会产生海量日志、占用磁盘IO,生产环境禁止裸抓包。以下为运维最常用的精准过滤语句。
1. 只抓取指定 IP 流量
tcpdump -i eth0 -nn host 192.168.1.100
抓取与该IP所有进出通信数据包
2. 只抓取指定源IP / 目的IP
# 源IP
tcpdump -i eth0 -nn src host 192.168.1.100
# 目的IP
tcpdump -i eth0 -nn dst host 192.168.1.100
3. 抓取指定端口流量
# 单个端口
tcpdump -i eth0 -nn port 8080
# 多个端口
tcpdump -i eth0 -nn port 80 or port 443
4. 抓取指定协议流量
# TCP
tcpdump -i eth0 -nn tcp
# UDP
tcpdump -i eth0 -nn udp
# ICMP(ping)
tcpdump -i eth0 -nn icmp
5. 组合条件过滤(生产最常用)
# 抓取指定IP+指定端口TCP流量
tcpdump -i eth0 -nn host 192.168.1.100 and port 3306 and tcp
精准过滤数据库、接口、业务服务专属流量,排查业务丢包、超时问题。
五、保存 PCAP 文件 + Wireshark 离线分析
线上实时抓包可读性差,生产环境标准做法:TCPDump 远端抓包保存 pcap → Wireshark 本地可视化分析。
1. 保存为 pcap 格式
tcpdump -i eth0 -nn host 192.168.1.100 -w /tmp/traffic.pcap
-w 参数:写入文件,不输出屏幕,降低资源占用
2. 限制抓包数量,避免文件过大
tcpdump -i eth0 -nn -c 10000 -w /tmp/traffic.pcap
-c 指定数据包个数,自动停止,防止磁盘打满
3. 本地 Wireshark 分析流程
1. 通过 Xftp / SCP 将服务器 pcap 文件下载到本地;
2. 直接拖拽进入 Wireshark;
3. 使用图形过滤器分析:TCP 重传、乱序、窗口过小、握手失败、ACK 异常;
4. 精准定位业务卡顿、超时、丢包根因。
六、生产环境零影响抓包核心技巧
TCPDump 虽轻量,但错误使用依然会导致服务器卡顿、磁盘爆满、业务抖动,以下为生产标准规范。
1. 必须加精准过滤条件
禁止直接 tcpdump -i eth0 全量抓包,高并发服务器瞬间产生GB级流量日志,抢占CPU与磁盘IO,引发业务卡顿。
2. 后台静默抓包,不占用终端
nohup tcpdump -i eth0 -nn port 443 -w /tmp/443.pcap
后台运行,断开SSH不终止抓包,适合长时间间歇性故障排查。
3. 限制文件大小与包数量
线上故障未知持续时间,必须限制包数量或拆分文件,防止磁盘被打满导致服务宕机。
4. 抓包完成务必手动终止进程
后台运行的 tcpdump 不会自动退出,排查结束后需查找并 kill 进程,避免常驻占用资源。
ps -ef | grep tcpdump
kill -9 进程ID
5. 尽量避开业务高峰期
核心业务高峰期,优先使用精准小流量抓包,不做全量抓取,最大限度降低影响。
七、TCPDump 高频故障排查实战场景
1. 业务间歇性超时
抓取业务端口流量,通过 Wireshark 分析是否存在TCP Retransmission 重传、Zero Window 窗口满、Dup ACK,定位链路不稳定或服务器性能瓶颈。
2. 服务器被恶意访问
抓取异常外联流量、陌生IP爆破端口,溯源攻击IP与攻击行为。
3. 跨服务器通信失败
双向抓包排查:是本机没发包、对方没回包、还是中间防火墙丢弃数据包。
八、生产环境 TCPDump 避坑总结
1. 永远带过滤条件:禁止裸抓全量网卡流量;
2. 永远保存 pcap 分析:线上看文字日志效率极低,离线可视化排障最快;
3. 必加 -nn 参数:关闭解析,保护服务器性能;
4. 后台抓包必收尾:防止进程常驻、磁盘爆满;
5. 故障优先双向抓包:精准定位是发送端、链路、接收端哪一环故障。