【问题标题】:Understanding [TCP ACKed unseen segment] [TCP Previous segment not captured]了解 [TCP ACKed unseen segment] [TCP Previous segment not capture]
【发布时间】:2013-08-21 22:36:10
【问题描述】:

我们正在我们的服务器上进行一些负载测试,我正在使用 tshark 将一些数据捕获到 pcap 文件中,然后使用 wireshark GUI 通过使用我的分析 -> 专家信息来查看显示的错误或警告pcap 已加载..

我看到了各种我不确定或还不完全理解的东西..

在警告下我有: 779 TCP 警告:未捕获的 ACKed 段(在捕获开始时常见) 446 TCP:未捕获上一个段(在捕获开始时常见)

一个例子是: 40292 0.000 xxx xxx TCP 90 [TCP ACKed unseen segment] [TCP Previous segment not capture] 11210 > 37586 [PSH, ACK] Seq=3812 Ack=28611 Win=768 Len=24 TSval=199317872 TSecr=4506547

我们还通过一个创建命令行数据列的好命令运行 pcap 文件

命令

tshark -i 1 -w file.pcap -c 500000

基本上只是在 tcp.analysis.lost_segment 列中看到了一些东西,但并不多..\

任何人都知道可能发生了什么? tshark 无法跟上写入数据的速度,还有其他问题吗?误报?

【问题讨论】:

    标签: tcp wireshark tshark


    【解决方案1】:

    这很可能是误报。就像警告消息说的那样,捕获通常在 tcp 会话中间开始。在这些情况下,它没有该信息。如果你真的错过了ack,那么是时候从你的主机上游开始寻找它们消失的地方了。 tshark 可能无法跟上数据,因此它正在丢弃一些指标。在您的捕获结束时,它会告诉您“内核丢弃的数据包”是否以及有多少。默认情况下 tshark 禁用 dns 查找,tcpdump 不会。如果您使用 tcpdump,则需要传入“-n”开关。如果您遇到磁盘 IO 问题,那么您可以执行诸如写入内存 /dev/shm 之类的操作。但要小心,因为如果您的捕获变得非常大,那么您可能会导致您的机器开始交换。

    我敢打赌,您有一些运行时间很长的 tcp 会话,当您开始捕获时,您只是因此错过了 tcp 会话的某些部分。话虽如此,以下是我看到的一些导致重复/丢失的事件。

    1. 开关 -(不太可能,但有时它们会生病)
    2. 路由器 - 比交换机更可能,但不多
    3. 防火墙 - 比路由器更有可能。此处要查找的内容是资源耗尽(许可证、cpu 等)
    4. 客户端过滤软件 - 防病毒、恶意软件检测等

    【讨论】:

      【解决方案2】:

      “TCP ACKed Unseen”的另一个原因是捕获中可能丢弃的数据包数量。如果我对繁忙接口上的所有流量运行未经过滤的捕获,有时会在停止 tshark 后看到大量“丢弃”的数据包。

      在我看到这个的最后一次捕获中,我捕获了 2893204 个数据包,但是一旦我按下 Ctrl-C,我得到了一个 87581 个数据包被丢弃的消息。那是 3% 的损失,所以当 wireshark 打开捕获时,它可能会丢失数据包并报告“看不见”的数据包。

      正如我提到的,我捕获了一个非常繁忙的接口,没有捕获过滤器,所以 tshark 必须对所有数据包进行排序,当我使用捕获过滤器去除一些噪音时,我不再收到错误。

      【讨论】:

        【解决方案3】:

        Acked Unseen sample

        大家好!我刚刚在捕获中发现的一些观察结果:

        很多时候,抓包会在客户端报“ACKed segment that was not capture”,提示客户端PC已经发送了一个数据包,服务器确认收到了这个包,但是抓包成功了客户端上不包含客户端发送的数据包

        最初,我认为这表明 PC 未能将它发送的数据包记录到捕获中,因为“例如,运行 Wireshark 的机器很慢”(https://osqa-ask.wireshark.org/questions/25593/tcp-previous-segment-not-captured-is-that-a-connectivity-issue)
        但是,我注意到每次看到“未捕获的 ACKed 段”警报时,我都可以看到客户端 PC 发送的“无效”数据包的记录

        • 在上面的捕获示例中,帧 67795 为 10384 发送 ACK

        • 即使wireshark 报告虚假IP 长度(0),帧67795 是 据报道长度为 13194

        • 帧 67800 为 23524 发送 ACK
        • 10384+13194 = 23578
        • 23578 - 23524 = 54
        • 54 实际上是 以太网/IP/TCP 标头(14 个用于以太网,20 个用于 IP,20 个用于 TCP)
        • 所以事实上,帧 67796 确实代表了一个大的 TCP 数据包(13194 字节)哪个操作系统试图穿上
          • NIC 驱动程序会将其分成更小的 1500 字节片段,以便通过网络传输
          • 但是在我的 PC 上运行的 Wireshark 无法理解它是一个有效的数据包并对其进行解析。我相信 Wireshark 在 2012 Windows 上运行 服务器正确读取这些捕获
        • 毕竟,这些“假IP 长度”和“未捕获的确认段”警报实际上是 我的情况是误报

        【讨论】:

          猜你喜欢
          • 2016-10-03
          • 2023-04-06
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多