2009-06-05 18 views
1

JavaアプリケーションがUDP経由でデータを受信します。オンラインデータマイニングタスクにデータを使用します。これは、各パケットを受信することが重要ではないことを意味します。これは、最初にUDPの選択を合理的にするものです。また、データはLAN経由で転送されるため、物理ネットワークは合理的に信頼できるものでなければなりません。とにかく、私はプロトコルやデータの選択についてのコントロールがありません。Windowsサーバー、JavaでUDPパケットの損失を監視します。

まだ、私は、アプリケーション自体の過負荷と長い処理時間に起因する可能性のあるパケットロスを懸念しています。私はこれらの事がどのくらい頻繁に起こり、どのくらいのデータが失われているか知りたいと思います。

理想的には、運用システムでパケット損失を継続的に監視する方法を探しています。しかし、部分的な解決策もまた歓迎されるだろう。

UDPパケットの損失(パケットの内容を制御しない)について常に知ることは不可能です。私は、OSによって受信されたパケットのラインに沿って何かを考えていましたが、アプリケーションに到着することはありませんでした。クライアントがビジー状態のときにデータをドロップする高速読み込みスレッドのような、アプリケーション内部の巧妙な解決策でもあります。私たちは、Windows Server 2003または2008

答えて

2

問題の下で展開されている

を使用すると、UDPフォーマットに依存している場合は、すべてのパケットを失っていることを伝える方法がないということです。

このタイプの情報を知る必要がある場合は、UDPの上にレイヤーするフォーマット(TCPシーケンス番号のような)にそれを構築する必要があります。そうし、フォーマットがシンプルならば、MicrosoftのNetMonまたはWireSharkにフィルタを簡単に作成して、その情報を記録して追跡することができます。

また、TCPシーケンス番号の実装は、UDPを使用しているときに発生する可能性のあるパケットの順序を誤って検出するのに役立ちます。

+0

私は、パケットロスについて常に知ることは不可能だが、少なくとも*何かを知る方法を探していることを認識しています。それを反映させるために質問を編集しました。 – daphshez

+0

OSが受信したが処理されていないパケットが失われる状況に陥ってはいけないので、あなたの質問はあまり意味がありません。遅いが、非常に起こりそうもないパケットを処理しているかもしれません。ネットワークはそれほど速くはありません。私はまた、アプリケーションが遅いためにパケットの損失を検出する方法について考えることはできません。私は私の答えは、ネットワークや遅いアプリケーションのいずれかの違いを区別することはできませんので、パケットの損失を検出するためにはまだ正しい方法だと思う。 –

0

パケットロスが懸念される場合は、TCPを使用します。

これが発明された理由の1つです。

+0

もちろん、私はプロトコルを選択することができなかったことを除いて、それはデータ供給者によって課せられました。 – daphshez

関連する問題