找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4169

积分

0

好友

539

主题
发表于 4 小时前 | 查看: 4| 回复: 0

在真正的服务器排障现场,图形界面往往用不上,命令行工具才是第一手的武器。这篇文章会沿着一条相对完整的网络故障排查链路,对 TCPdump 常用命令、过滤表达式以及典型数据包表现进行系统梳理。希望能帮你从“会敲几行抓包命令”进阶到“根据真实数据包,准确判断问题发生在 DNS、网络传输、TCP 建连、防火墙策略还是应用层”。

⚠️ 重要提醒:抓包工具只能用于自有资产、实验环境或者已经获得明确授权的网络。抓包文件可能包含业务地址、请求内容等敏感信息,在保存、传输和分析过程中,务必做好访问权限控制与数据保护。

TCPdump 与 Wireshark 分工图

真正高效的排障流程,通常是先用 TCPdump 在服务器上抓取一手流量、保存成 .pcap 文件,然后再交给 Wireshark 进行深度可视化分析。能在现场抓到真实数据包,才是排障的第一步。 抓包时建议从一开始就带上 -i any 监听所有接口,配合 -nn 避免域名和端口名解析,从而提高抓包速度和输出可读性。当然,这一切的前提是:你只在自有或授权的网络中进行操作。

TCP 建连三种典型现象:正常、SYN 重传、RST 重置

看懂 TCP 建连阶段的包是排障的基本功。

  • 正常三次握手:客户端 SYN → 服务器 SYN, ACK → 客户端 ACK,连接建立成功。
  • SYN 重传:SYN 发出去后一直没回应,客户端会多次重传。常见原因包括链路不通、目标端口未开放、被防火墙丢弃或网络丢包严重。
  • RST 重置:在连接建立阶段收到 RST,通常表示目标拒绝连接、端口未监听或中间设备主动重置连接;如果在已建立连接后收到 RST,则可能是应用崩溃或策略干预。
    记住:重传不等于攻击,RST 也不一定就是故障,可能只是对端的策略行为。抓包的核心价值不在于“有没有包”,而在于看清连接建立过程中到底发生了什么。

先学会抓:6个最常用的 TCPdump 命令

先掌握最基础的抓包命令,做到“抓得到、看得懂、留得住”。

tcpdump -i eth0         # 在 eth0 接口上抓包
tcpdump -i any          # 监听所有接口
tcpdump -nn             # 不解析主机名和端口号
tcpdump -c 20           # 抓到20个包后自动停止
tcpdump -w capture.pcap # 将原始流量写入 pcap 文件
tcpdump -r capture.pcap # 读取并查看 pcap 文件

新手建议:

  • 条件允许时,先加 -nn,信息更直接;
  • -c 控制抓包数量,避免海量输出;
  • 需要复盘的时刻,一定记得 -w 保存文件。

4 类常见故障的 TCPdump 表现对照

把现象、抓包表现和可能原因对应起来,排障速度会成倍提升。

  • DNS 解析异常:域名访问失败,抓包看不到 53 端口请求,或请求发出后毫无回应 → DNS 配置错误、上游 DNS 不可达或链路异常。
  • 端口不通:IP 可达但特定端口不通,抓包看到持续 SYN 重传,或直接收到 RST → 端口未监听、防火墙/ACL 丢弃、目标服务异常。
  • 应用响应慢:页面能打开但明显卡顿,握手正常但数据段往返时间很长、重传增多 → 链路抖动、服务器负载高、应用处理逻辑慢。
  • 疑似中间设备拦截:同一服务走不同路径结果不同,请求发出后无回包或中途被重置 → 网关策略、防火墙、ACL、路径差异。

在实际运维排障中,如果能将上述抓包表现与业务现象快速对照,定位效率会非常高。查问题的时候别忘了配合精确过滤条件,减少干扰。

网络问题排查六步法

盲目抓包往往事倍功半,按链路层层排查才更高效。推荐这样一条路径:

  1. 明确现象:打不开?慢?偶发?
  2. 检查 DNS:能否解析到正确的 IP?
  3. 检查链路连通性:本机 → 网关 → 目标是否可达?
  4. 检查目标端口/服务:请求是否真正到达了服务端口?
  5. 分析 TCP 握手与重传:是否成功建立连接?有无超时、RST?
  6. 观察应用层响应:服务是否返回了正确结果?

TCPdump 在哪一步最有用?当你要证实“真实流量有没有到达”以及“到达后服务器做了什么”的时候,它的价值最大。

过滤表达式:抓对包比抓更多包更重要

一旦接口流量较大,不过滤的抓包很快就会被无用的包淹没。常用过滤关键字:host(主机地址)、src(源地址)、dst(目的地址)、port(端口号)、tcpudpicmpandornot

几个立即可用的示例:

tcpdump host 10.0.0.1                        # 只看和 10.0.0.1 相关的流量
tcpdump src host 192.168.1.10                # 只看源地址为 192.168.1.10 的包
tcpdump dst port 443                         # 只看发往 443 端口的流量
tcpdump tcp                                   # 只看 TCP 流量
tcpdump udp port 53                           # 只看 DNS 的 UDP 流量
tcpdump 'tcp port 443 and host 192.168.1.10'  # 同时限定协议、端口和主机

当表达式包含特殊字符或较复杂时,建议用单引号把条件引起来,既能避免 shell 误解释,也让逻辑更清晰。

Wireshark 与 TCPdump 的分工协作

这两个工具不是“谁替代谁”的关系,而是前后端配合:TCPdump 负责在无图形环境的服务器上贴近现场抓包,Wireshark 负责在图形界面中对 .pcap 文件深度分析。 真正的差距在于,TCPdump 能让你捕捉到发生问题的瞬间,而 Wireshark 能让你把那一瞬间放大、解析得明明白白。

别把 TCPdump 当命令表,当成排障方法

排障流程应当形成闭环:

  1. 先明确问题现象(用户反馈什么?何时发生?影响范围?);
  2. 选对接口和过滤条件,聚焦有效流量;
  3. 在问题复现时用 TCPdump 抓取现场,加上 -nn
  4. -w 保存为 .pcap 文件,记录时间和场景;
  5. 在 Wireshark 中跟踪 TCP 流、统计数据,定位根因。

新手最容易踩的四个坑:

  • 不加过滤条件,抓到的包太多,反而淹没问题;
  • 忘记 -nn,输出杂乱不易读;
  • 抓完不保存,事后无法复盘;
  • 在未授权的环境乱抓,踩到合规红线。

真正的大神,不是命令背得多,而是能用抓包快速还原问题现场。


云栈社区 的技术讨论中,抓包分析一直是网络工程师和运维人员最扎实的基本功之一。把 TCPdump 从一个“命令表”内化成自己的排障方法论,你在面对复杂问题时也会从容得多。




上一篇:东方算芯DF2000基于14nm工艺:内存带宽达英伟达GB200的1.6倍,如何曲线破局?
下一篇:Kafka offset提交成功,重启后为何仍重复消费数万条?
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-8-4 06:07 , Processed in 1.087536 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表