在 Tshark 中分析丢包

WiresharkWiresharkBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习使用 Wireshark 的命令行工具 Tshark 来分析 TCP 数据包丢失情况。你将通过实际的终端命令,练习捕获网络流量、识别重传数据包并解读丢包统计信息。

这些练习将引导你检测数据包丢失模式,并理解网络性能指标。你将在正常传输和模拟丢包场景中获得实践经验,以解决现实世界中的 TCP 连接问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/display_filters("Display Filters") wireshark/WiresharkGroup -.-> wireshark/capture_filters("Capture Filters") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/commandline_usage("Command Line Usage") subgraph Lab Skills wireshark/packet_capture -.-> lab-548912{{"在 Tshark 中分析丢包"}} wireshark/display_filters -.-> lab-548912{{"在 Tshark 中分析丢包"}} wireshark/capture_filters -.-> lab-548912{{"在 Tshark 中分析丢包"}} wireshark/packet_analysis -.-> lab-548912{{"在 Tshark 中分析丢包"}} wireshark/commandline_usage -.-> lab-548912{{"在 Tshark 中分析丢包"}} end

使用 -f "tcp" 捕获 TCP 数据包

在这一步中,你将学习如何使用 Wireshark 的捕获过滤器选项 -f "tcp" 来捕获 TCP 流量。TCP(传输控制协议)是互联网的核心协议之一,负责可靠的数据传输。这个过滤器确保只捕获 TCP 数据包,当你想专注于 TCP 特定的行为,如连接建立(三次握手)、重传和流量控制,而不被其他网络流量干扰时,这尤其有用。

  1. 首先,通过点击 Xfce 桌面的终端图标或使用快捷键 Ctrl+Alt+T,在你的 LabEx 虚拟机中打开一个终端。你将在这个终端中执行所有用于网络分析的命令。

  2. 导航到默认的工作目录,我们将把捕获的文件存储在这个目录中:

    cd ~/project

    这个目录是专门为你的实验工作创建的,它能让你的文件保持有序,并与系统文件分开。

  3. 运行以下命令开始捕获 TCP 数据包:

    sudo tshark -f "tcp" -w tcp_capture.pcap

    让我们来分析一下每个部分的作用:

    • sudo 为你提供进行数据包捕获所需的管理员权限
    • tshark 是 Wireshark 的命令行版本
    • -f "tcp" 告诉 tshark 只捕获 TCP 数据包
    • -w tcp_capture.pcap 将捕获的数据包保存到一个名为 tcp_capture.pcap 的文件中
  4. 当 tshark 运行时,打开另一个终端标签页或窗口(Ctrl+Shift+T)并生成一些 TCP 流量。我们将使用 curl 来发起一个简单的 Web 请求:

    curl -I https://www.labex.io

    -I 标志告诉 curl 只获取 HTTP 头部信息,这样就可以生成足够的流量用于我们的分析,而无需下载不必要的数据。

  5. 等待大约 5 - 10 秒,以捕获足够的数据包,然后在运行 tshark 的终端中按 Ctrl+C 停止捕获。你应该会看到类似以下的输出:

    Capturing on 'eth1'
    10 packets captured

    这确认了你在本次会话中捕获了多少个 TCP 数据包。

  6. 通过列出目录中的文件来验证你的捕获文件是否成功创建:

    ls -lh tcp_capture.pcap

    -lh 选项以人类可读的格式(如 KB 或 MB)显示文件大小以及其他详细信息。这有助于在进入下一步之前确认你的捕获文件已正确保存。

使用 -Y "tcp.analysis.retransmission" 检查重传情况

在这一步中,我们将检查 TCP 重传情况。当发送方未收到已发送数据包的确认信息时,就需要重新发送这些数据包,从而发生重传。这是一项至关重要的网络故障排除技术,因为频繁的重传通常表明网络拥塞、数据包丢失或其他连接问题。

在开始之前,让我们先明确我们要查找的内容:

  • 当 TCP 在预期时间内未收到 ACK(确认信息)时,就会发生重传。
  • Wireshark/tshark 可以使用特殊过滤器“tcp.analysis.retransmission”来识别这些重传。
  • 我们将先检查现有的捕获文件,然后创建一个模拟网络问题的新捕获文件。
  1. 首先,确保你位于存储捕获文件的项目目录中:

    cd ~/project
  2. 让我们分析之前创建的捕获文件,查看是否存在重传情况。该命令的各部分含义如下:

    • -r 从保存的捕获文件中读取数据。
    • -Y 应用显示过滤器,仅显示重传的数据包。
    tshark -r tcp_capture.pcap -Y "tcp.analysis.retransmission"
  3. 如果在第一次捕获期间你的网络连接稳定,你可能会看到:

    0 packets captured

    这是正常现象,表明在该捕获期间没有数据包需要重传。

  4. 为了更好地理解重传情况,我们现在将在故意造成网络拥塞的情况下创建一个新的捕获文件。打开两个终端窗口:
    在第一个终端中,开始捕获 TCP 流量:

    sudo tshark -f "tcp" -w retransmission_capture.pcap

    在第二个终端中,运行一个可能触发重传的慢速下载:

    curl --limit-rate 10k https://www.labex.io

    几秒钟后,使用 Ctrl+C 停止这两个进程。

  5. 现在,检查新的捕获文件中是否存在重传情况:

    tshark -r retransmission_capture.pcap -Y "tcp.analysis.retransmission"

    这次你应该会看到列出的重传数据包,其中显示了序列号和时间细节,这些信息有助于诊断网络性能问题。

使用 -z tcp,tree 总结丢包统计信息

在这一步中,你将学习如何使用 Wireshark 强大的统计功能以及 -z tcp,tree 选项。此命令通过提供捕获数据中所有 TCP 流的结构化概述,帮助你分析 TCP 会话并识别数据包丢失模式。

在开始之前,让我们先了解一下 TCP 会话统计信息能展示什么:

  • 树形视图显示了主机对之间的通信情况。
  • 它会统计每个方向传输的帧(数据包)和字节数。
  • 有助于识别可能存在问题的不平衡流量。
  1. 首先,确保你位于存储捕获文件的项目目录中:

    cd ~/project
  2. 现在,让我们分析初始捕获文件中的基本 TCP 统计信息。此命令读取捕获文件并生成会话树:

    tshark -r tcp_capture.pcap -z tcp,tree
  3. 输出将显示所有 TCP 会话的结构化表格。请注意以下列:

  • <- 表示流向你机器的流量。

  • -> 表示从你机器流出的流量。

  • Total 汇总了两个方向的流量。

    ======================================================
    TCP Conversations
    Filter:<No Filter>
    |       <-      | |       ->      | |     Total     |
    | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |
    ======================================================
  1. 现在,让我们专门检查重传捕获文件。当数据包丢失且需要重新发送时,就会发生重传:

    tshark -r retransmission_capture.pcap -z tcp,tree

    查找帧计数明显高于其他会话的会话 —— 这通常表明存在重传问题。

  2. 为了进行最精确的分析,我们可以将此操作与之前的重传过滤器结合使用。这将在会话树中仅显示重传的数据包:

    tshark -r retransmission_capture.pcap -Y "tcp.analysis.retransmission" -z tcp,tree

    这有助于准确找出哪些会话正在经历数据包丢失。

使用 -q 获得简洁输出

在这一步中,我们将探讨如何使用 Wireshark 的 -q 选项来简化数据包分析。在处理大型网络捕获文件时,你通常不需要查看每一个数据包,而只需要重要的统计信息。-q(安静模式)选项可以隐藏详细的数据包列表,只显示汇总数据。

  1. 首先,让我们切换到存储捕获文件的工作目录:

    cd ~/project
  2. 现在,我们将以安静模式分析 TCP 捕获文件。此命令读取文件,但只显示 TCP 会话统计信息:

    tshark -r tcp_capture.pcap -q -z tcp,tree
  3. 为了理解 -q 选项的作用,让我们运行不带该选项的相同命令。注意这个版本在显示统计信息之前会显示所有单个数据包:

    tshark -r tcp_capture.pcap -z tcp,tree
  4. 我们可以将安静模式选项与之前的重传过滤器结合使用。这样可以让我们清晰地看到重传统计信息:

    tshark -r retransmission_capture.pcap -Y "tcp.analysis.retransmission" -q -z tcp,tree
  5. 输出格式将如下所示,只显示会话统计信息,不包含数据包详细信息:

    ======================================================
    TCP Conversations
    Filter:tcp.analysis.retransmission
    |       <-      | |       ->      | |     Total     |
    | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |
    ======================================================

总结

在本次实验中,你通过实用的网络故障排除技术,学会了使用 Tshark 分析 TCP 数据包丢失问题。你使用特定过滤器捕获了 TCP 流量,识别了重传情况,并生成了连接统计信息以评估网络性能。

这些练习展示了如何使用 Tshark 的高级功能,如使用 -z tcp,tree 进行全面的 TCP 流分析,以及使用 -q 进行高效的统计报告。这些技能使你能够在现实网络环境中快速诊断和解决数据包丢失问题。