【问题标题】:Fragmented UDP packet loss?分段 UDP 数据包丢失?
【发布时间】:2018-06-22 22:52:11
【问题描述】:

我们有一个应用程序进行 udp 广播。 数据包大小大多高于 mtu,因此它们将被分片。

tcpdump 表示所有数据包都已收到,但应用程序并未全部收到。

如果将 mtu 设置得更大,那么整个事情都不会发生,因此不会出现碎片。 (这是我们目前的解决方法 - 但德国人不喜欢解决方法)

所以看起来碎片化是问题所在。

但我无法理解数据包丢失的原因和位置。

应用程序开发人员表示,他们可以在接收数据包的套接字上看到数据包的丢失情况。所以他们的应用程序不会丢失数据包。

我的问题是:

tcpdump在linux上监控的设备在哪里?

那里的数据包是否已经重新组装或稍后完成?

如何进一步调试此问题?

【问题讨论】:

  • 如果网络上有更多的 udp 广播流量(以及碎片数据包),那么未接收到的碎片 udp 数据包的百分比会越来越高 - 即使这些广播数据包没有被其他系统接收到数据包丢失。
  • 如果您看到所有的部分都到达了 tcpdump,那么您的问题出在其他地方。
  • 什么是 tcpdump 报告?只是说内核丢弃了0个数据包吗?我不认为 tcpdump 会重新组装碎片化的 IP 片段(尽管 Wireshark 会)。不过,我对最后一部分可能是错的。

标签: udp tcpdump packet-loss ip-fragmentation


【解决方案1】:

tcpdump 使用 libpcap,它很早就在 Linux 网络堆栈中获取数据包的副本。 Linux 网络堆栈中的 IP 片段重组将在 libpcap 之后(因此在 tcpdump 之后)发生。使用 Wireshark 保存 pcap 和视图;它将具有更好的分析功能,并将帮助您找到任何丢失的 IP 片段(如果有的话)。

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多