【问题标题】:Monitor UDP packet loss in Windows Server, Java在 Windows Server、Java 中监控 UDP 数据包丢失
【发布时间】:2009-06-05 07:00:18
【问题描述】:

我的 Java 应用程序通过 UDP 接收数据。它将数据用于在线数据挖掘任务。这意味着接收每个数据包并不重要,这首先使 UDP 的选择变得合理。此外,数据是通过 LAN 传输的,因此物理网络应该是相当可靠的。无论如何,我无法控制协议的选择或包含的数据。

不过,我仍然担心应用程序本身的过载和处理时间过长可能会导致丢包。我想知道这些事情发生的频率以及丢失了多少数据。

理想情况下,我正在寻找一种在生产系统中持续监控数据包丢失的方法。但也欢迎部分解决方案。

我意识到不可能总是知道 UDP 数据包丢失(不控制数据包内容)。我在想一些类似于操作系统接收到的数据包但从未到达应用程序的东西;或者可能是应用程序内部的一些聪明的解决方案,比如一个快速读取线程,当它的客户端很忙时会丢弃数据。

我们在 Windows Server 2003 或 2008 下进行部署。

【问题讨论】:

    标签: java windows networking udp


    【解决方案1】:

    问题在于,如果您依赖 UDP 格式,则无法判断您丢失了任何数据包。

    如果您需要了解此类信息,则需要将其构建为您在 UDP 之上分层的格式(如 TCP 序列号)。如果您这样做并且格式很简单,那么您可以轻松地在 Microsoft 的 NetMon 或 WireShark 中创建过滤器来记录和跟踪该信息。

    还请注意,TCP 序列号实现还有助于检测使用 UDP 时可能发生的乱序数据包。

    【讨论】:

    • 我意识到不可能总是知道丢包的情况,但我正在寻找一种至少知道某事的方法。我编辑了问题以反映这一点。
    • 那么您的问题没有多大意义,因为您几乎不应该陷入丢失操作系统已收到但未处理的数据包的情况。确实可能如果您处理缓慢的数据包,但非常不可能。网络没有那么快。由于应用程序运行缓慢,我也想不出任何方法来检测数据包丢失。我认为我的答案仍然是通过网络或慢速应用程序检测数据包丢失的正确方法,因为您无法区分两者之间的区别。
    【解决方案2】:

    如果您担心丢包,请使用 TCP。

    这就是它被发明的原因之一。

    【讨论】:

    • 可以,除了我没有选择协议,是数据供应商强加的。
    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多