2009-03-05 4 views
2

テストの目的は、2つのホスト(クライアントとサーバー)間のネットワーク応答時間の形状をチェックすることです。ネットワーク応答=データのパケットを送信してそれを受信するのに要する往復時間。私はUDPプロトコルを使用しています。どのように応答時間を計算できますか?私はちょうどTimeOfClientRequest - TimeOfClientResponseRecievedを引くことができます。しかし、これが最善のアプローチであるかどうかはわかりません。私はコード内からのみこれを行うことはできません。OSとコンピュータの負荷がクライアントによって開始された測定プロセスを妨害する可能性があると考えています。ところで、私はJavaを使用しています。UDPプロトコルを使用して通信するサーバーとクライアント間の応答時間を測定する方法はありますか?

私はあなたのアイデアを聞きたいと思います。

+0

OSとコンピュータの負荷に関係なく、あなたが – basszero

答えて

1

あなたが言及している方法は問題ないと思います。 OSとコンピュータの負荷が干渉する可能性がありますが、その効果はおそらくネットワーク経由でパケットを送信するのに要する時間に比べてごくわずかです。

ちょっとしたことでも、いつでもいくつかのパケットを前後に送信してタイムアウトを平均化することができます。

0

ICMPパッケージを送ることができたらうれしいですね。ネットワーク層が直接答えてくれるから、答えはサーバー上のユーザーモードで時間がなくなります。

しかし、JavaでICMPパッケージを送信することはできないようです。あなたは:

boolean status = InetAddress.getByName(host).isReachable(timeOut) 

これはICMPパッケージを送信しますが、これはあなたが望むものではありません。

ただし、サーバ側でレスポンダデーモンを優先して起動すると、サーバ負荷の影響が軽減されます。

実際にサーバーの負荷は、CPUが100%に満たない限り、役割を果たしません。

+0

何をすべきか、あなたの応答時間が要因できなくなります@siddhadev:私は混乱しています。 Javaでは、ICMPパッケージを送信することはできず、コードを提供すると言います。説明してください。 –

+0

多くのO/Sでroot権限を持たないRaw IPパケット(ICMPに必要)を送信することはできず、Javaは独自のICMPパケットを作成するためのパブリックメソッドを用意していません。 – Alnitak

1

コードにアクセスできる場合は、リクエストが送信されてから回答が受信されるまでの時間を計測するだけです。 Javaの標準タイマーはミリ秒の分解能しか持たないことに注意してください。

また、Wiresharkを使用してワイヤ上のパケットをキャプチャすることもできます。そのソフトウェアはパケットに対するタイムスタンプも記録します。

どちらの場合でも、測定された時間は明らかに、相手方が元の要求にどのくらい速く応答するかによって決まります。

あなたは本当にただネットワーク遅延を測定し、これまで(通常、反射DDoS攻撃での使用を防ぐために無効になっていますが)多くのUNIXサーバはまだサポートecho 7/udpサービスのようなものを使用して、自分自身を終了を制御したい場合。

+0

Windows XPでは、currentTimeMillisは1/60秒の精度しか持っていません。 –

2

ちょうどpingを使用する - RTT(往復時間)は、測定する標準的なものの1つです。送信しているパケットのサイズが重要な場合は、pingを使用して各パケットのデータサイズを指定することもできます。

例えば、私は唯一の要約統計量を表示する私のゲートウェイに1024バイトのペイロードに10個のパケットごとに送信さ:

のping -c 10 -s 1024 -q 192.168.2.1

PING 192.168。 2.1(192.168.2.1)1024(1052)バイトのデータ。

--- 192.168.2。1つのping統計---

10パケット伝送10を受信し、0%パケット損失、時間9004ms

RTT最小/平均/最大/ MDEV = 2.566/4.921/8.411/2.035 MS

rtt(往復時間)で始まる最後の行は、おそらくあなたが探している情報です。

0

最初にpingを使用しますが、パケットを送信し、もう一方の端でパケットを戻すことでRTTを測定できます。

ボックスが(標準)のときに測定することが重要です。これは、一般的に予想されるRTTを示してくれるので、ロードします。

一貫性のある値を得るために、多くのパケット、数百万、さらには何十億に渡ってレイテンシを平均化できます。

0

RTT時間を測定するためのICMP pingの使用に関するいくつかの回答以外に、良い方法です。

UDPを介してRTTを測定する方法をもう1つ提供したいのですが、両方のサーバーを制御できる場合は&クライアント側です。次のように基本的な流れ:

  1. はP1を受けながら、パケットし
  2. サーバー置く現在のタイムスタンプS1、クライアントからサーバへタイムスタンプC1とUDPパケットP1を送信します。
  3. サーバサイド処理
  4. サーバは、現在のタイムスタンプS2をパケットに入れてからクライアントに送り返します。
  5. クライアントは、P1を受信して​​いる間に現在のタイムスタンプC2をパケットに入れます。

その後、RTT =(C2-C1) - (S2-S1)を計算することができます。

ICMPのpingとして正確ではない可能性があり、クライアント&サーバー側で追加の制御が必要ですが、管理が容易です。

0

pingはレイテンシを測定するのに適していますが、UDPではなくICMPプロトコルを使用しています。異なるprotolsのパケット通常、ルータ上の異なる優先順位を持っているなど

あなたはUDP往復時間を測定するためのnetperfを使用することができます。 http://www.netperf.org/netperf/training/Netperf.html#0.2.2Z141Z1.SUJSTF.9R2DBD.T

関連する問題