一方向ネットワーク遅延の測定


20

これは、私が作成したネットワーク遅延の測定に関するパズルです。解決策は不可能だと思いますが、友人は同意しません。どちらにしても説得力のある説明を探しています。(これはパズルとして提起されていますが、NTPは言うまでもなく、オンラインゲームなどの通信プロトコルの設計と経験に適用できるため、このWebサイトに収まると思います。)

次の図に示すように、2つのロボットが2つの部屋にあり、一方向の待ち時間が異なるネットワークで接続されているとします。ロボットAがロボットBにメッセージを送信する場合、ロボットBが到着するのに3秒かかりますが、ロボットBがロボットAにメッセージを送信する場合、到着するのに1秒かかります。レイテンシは変化しません。

ロボットは同一であり、クロックの共有はありませんが、時間の経過を測定できます(たとえば、ストップウォッチがあります)。ロボットA(メッセージが3秒遅れる)とロボットB(メッセージが1秒遅れる)がどちらであるかはわかりません。

往復時間を発見するプロトコルは次のとおりです。

whenReceive(TICK).then(send TOCK)

// Wait for other other robot to wake up
send READY
await READY
send READY

// Measure RTT
t0 = startStopWatch()
send TICK
await TOCK
t1 = stopStopWatch()
rtt = t1 - t0  //ends up equalling 4 seconds

一方通行の遅延を決定するプロトコルはありますか?ロボットは、メッセージ送信の遅延が長いロボットを検出できますか?

2つのロボットと1つの非対称ネットワーク


5
非対称遅延を伴うネットワークでのクロック同期(典型的なインターネットインフラストラクチャで実行可能なものを要求する)を参照してください。その質問に対する間違った答えを議論するときに私たちが見たものから、あなたの質問への答えは不可能だと思います。
ジル 'SO-悪であるのをやめる

質問をマージする必要がありますか、それともターゲットを個別に保つのに十分な違いがありますか?
クレイグギドニー

いいえ、それらは異なる質問です。あなたの質問は、メッセージを渡すだけの2台のマシンの設定では不可能であることを証明しています。たとえば、クライアントとサーバー間のルート上の中間リンクで利用可能な遅延情報に基づいて、この情報をクライアントに伝達する方法があることを期待しています。
ジル 'SO-悪

3
これを行う方法があった場合、アインシュタインの相対性理論は機能しません。これは、空間的に離れており、一方通行の待ち時間が不明な2人の観測者が適切な時間に同意できないという事実に依存するためです。
ピーターショー

NTPは確かにジルの質問に答えを参照してください、マシン自分の時間お互いを送信&単にMSGの内容を経由して、独自のMSGだけでなく、他のサーバーの送信/受信時刻を追跡していないに基づいて、この遅延差を測定する実装/許可しない
vzn

回答:


14

私が書いたブログ投稿からの次の図は、それが不可能であることの視覚的な証拠です。

レイテンシの非対称性により正確にオフセットされたクロックスキューのスライド

一方向のレイテンシーが変わっても(そしてマイナスになったとしても)各サイドのパケット到着時間が同じままであることに注意してください。最初のパケットは常にサーバーのクロックの1.5秒でサーバーに到達し、2番目のパケットは常にクライアントのクロックの2秒でクライアントに到達します。パケットの内容とローカル到着時間のみがプロトコルのベースになる可能性がありますが、最初のクロックスキューも変化させることで非対称性が変化するため、コンテンツと到着時間を一定に保つことができます。

基本的に、一方向のレイテンシの非対称性は、クロックスキューとまったく同じに見えます。問題は、最初のクロックスキューや一方向のレイテンシの非対称性を知らないことを示しているため、一方を変更すると他方が変化するように見えるため、効果を区別できないため、これらの寄与を分離して解決することはできません一方向のレイテンシの非対称性。それは不可能だ。

より正式には、サイクルの長さのみを指定した場合、エッジの長さを解くことはできません。サイクルベースにはの自由度があり、参加者の1人に対するn - 1の未知のクロックスキューに対応します。多くの参加者がいる場合でも、一方向のレイテンシをいつでも非表示にできます。n1n1

船酔い

あなたがそれほど視覚的に傾いていない場合、私は別の直感的な議論を持っています。未来の100年のタイムポータルを想像してください。反対側の誰かとチャットすると、一方向の遅延が100年も非対称であるにもかかわらず、会話が完全に正常であることがわかります。その規模では、目に見える効果は明ら​​かでした!


これについてはどう思いますか?software.internet2.edu/owamp
CMCDragonkai

@CMCDragonkaiパズル文は現実よりも制限的であることに留意してください。実際には、光ファイバー回線の長さの測定、中間地点でのログ記録、ネットワークトポロジーの知識の使用、ある場所から別の場所へのクロックのゆっくりした搬送などのオプションがあります。解くときに自由度を削除するためにそれを使用できます。そのため、一方向のpingツールや、それが依存しているクロックがその甘い甘い3次情報の一部を悪用している限り、表面的には問題は見られません。
クレイグギドニー

ああ、その場合、可能性のある回避策で答えを更新できますか?
CMCDragonkai

@CMCDragonkaiコメントにそれらがあれば十分です。それらはパズルの範囲を超えています。
クレイグギドニー

たとえば、ゲームネットワーキングの場合、一方向の遅延が問題になります。また、誰もが不可能と言いますが、私は簡単に紙の上でパズルを解くことができます-あなたは、クロックを同期させると、あなたがすべてではA-> Bの遅延はに等しいと、BにAの時間を送信することにより、BにAからの遅延を測定しているB's time - A's sent time、とB-> Aと等しいlatency - A->B delay
ラマゲドン

1

ストップウォッチを比較するだけでは、一方向の待ち時間を把握することは不可能だと思います。

ABCA1
BCB1=1
ACA2=9
BCB2=5
AB

たぶん、あなたがそれを報奨金の質問にすると、誰かがそれをクラックするでしょう。それまで、称賛。


0

どちらのノードが誰であるか(つまり、メッセージの遅延がより長いノード)を発見し、片道のトリップ遅延を推定する方法を見つけました。他の答えは正しいが、直接クロック測定が近づいたことを考慮しているだけであり、もちろん機能しません。しかし、ここで証明しているように、これは上記の私の作業アルゴリズムであるため、これは物語の一部にすぎません:

実生活のように仮定する:

  • 有限帯域幅bのリンク

  • 各ノードには一意のアドレスがあります(例:AおよびB)

  • bandwidth * latency製品よりもはるかに小さいパケットサイズp

  • ノードAとBはチャネルを埋めることができます

  • ノードにはrandom()関数があります

各ノードは、独自のパケット(それぞれAまたはBでマーク)でチャネルを埋めるか、次のように他のノードから受信したパケットを転送します。

Always fill the channel with my own packets except:
if I receive a packet from another node then
   Randomly choose to 
          either forward that packet from the other node
          or discard that packet and forward my own packet

直感的な説明 Aのbandwidth * latency製品の方が高い(レイテンシが大きいため)ため、AはBよりも多くのパケットを受信できるため、各ノードは図にある人を知ることができます。

さらに、上記のアルゴリズムを実行するのに十分な収束時間で、AからBへのパケットの比率は、AからBへのRTT遅延の実際の比率、したがって望ましいOTTを示します。

シミュレーション結果のトレース上記は、Aが3秒の遅延に向かって収束し、Bが約1秒の遅延に収束する方法を証明するシミュレーションです。

シミュレーションの最初の数秒

シミュレーションの後続の秒

図の説明: 各行は1秒の時間を表します(わかりやすくするために、1秒の送信時間を持つようにパケットサイズが選択されています)。各ノードは、特定の順序や時間ではなく、いつでもアルゴリズムを開始できることに注意してください。列は次のとおりです。

  • ノードAが受信する:ノードAが受信側で見るもの(これは以下のP4でもあります)

  • ノードAが注入する:ノードAが送信するもの(これはA、またはランダムにAまたはBであることに注意してください)

  • P1、P2、P3:AとBの間で(順番に)転送中の3つのパケット(1秒の送信は3つのパケットが3のレイテンシーで転送中であることを意味します)

  • NODE Bが受信します:Bが受信側で見るもの(これはP3です)

  • ノードBが注入する:Bが送信するもの(これはBであるか、アルゴリズムごとにランダムにAまたはBであることに注意してください)

  • P4:BからAへの転送中のパケット(P1、P2、P3も参照)

  • AはAを数えます:Aがそれが見たAパケットのために数えるもの

  • AがBをカウントする:Aがそれが見たBパケットに対してカウントするもの

  • BはAを数えます:Bがそれが見たAパケットのために数えるもの

  • BはBを数えます:Bがそれが見たBパケットのために数えるもの

  • A-> B:AがBに向かって推定するレイテンシ(見られたパケットに基づく4秒のRTTの比率)

  • B-> A:BがAに向かって推定するレイテンシ(見られたパケットに基づいた4秒のRTTの比率)

両方のノードが収束し、実際のレイテンシを維持していることがわかります(実際には、Aの場合、収束するのにより多くの秒が必要ですが、Bと同じ動作を収束するため、それはわかりません)

より良いフィルターはより速く収束することができますが、遅延の正しい値を中心に両方が収束する方法を明確に見ることができます。したがって、それらは遅延を正確に知ることができます(説明のためだけに推定を示しています)。

また、リンク間の帯域幅が異なっていても、パケットペアを使用して帯域幅の推定値を把握し、上記の比例式に適用するだけで、上記の方法を維持できます(より確実に考える必要があります)。

結論 上記の図では、AとBの両方がネットワーク内での位置を把握し、他のノードへの待ち時間を把握するためのアルゴリズムを提供しました。クロックベースのアプローチではなく、ネットワーク測定の推定方法を使用しましたが、実際には再帰的なクロック同期の問題のために解決策になりません。

注:最初のコメントでわかるように、誰も私がそれを解決したと信じていないので、すべてのシミュレーションを提供するこの回答を編集しました。これらの結果により、誰かがこのネットワーク測定パズルで少なくとも1つのエラーまたは正しさを見つけるのに役立つと確信し、承認できることを願っています!


3
私はこれがうまくいくとは思わない。帯域幅は同じであるため、AとBが見る唯一の違いは、それらが同時に開始した場合、Bはデータを受信する前に3秒待機し、Aは1秒待機することです。しかし、彼らは共有クロックを持っていないので、彼らは同時に始めたとは知りません。Aが最初にプロトコルの実行を開始したため、Aは10秒間何も聞こえません。
デビッドリチャービー14

誰でもいつでも開始できると同時に開始する必要はありません。両方ともしばらく実行する必要があります。レビューに時間を割いていただきありがとうございます。もう一度お読みください。これは統計的手法であり、収束を伴います。私は100%だと言っているわけではありませんが、私はシミュレートしていないので絶対に正しいと思いますが、あなたが行ったコメントだけは私の意見には当てはまりません。多分これは、より一般的な考え方を説明しています。あなたが1つのリンクが、実際にはより多くのパケットが含まれていますその帯域幅*遅れ製品は二つのリンクのために異なる受け入れる場合、 -それは、上記のアルゴによって感知することができる...
user3134164

誤解したとは思いませんが、可能です。AとBの両方が同じレートでデータを受信するように、帯域幅が同じであることに同意しますか?もしそうなら、両者はまったく同じものに収束しませんか?
デビッドリチャービー14

はい、もちろん同じレートで受信しますが、同じことで収束するわけではありません。ネットワークにはAパケットとBパケットがあります。質問は、見られるAパケットとBパケットの比率です。今は簡単なシミュレーションをいくつか実行しましたが、常にバイアスがかかっています。私はここですべてを投稿することはできないと思うので、アイデアを得るために、bは1パケットが1秒の送信を要するようなものであると仮定します。その後、常に4つのパケットが送信されます。統計収束法では機能しない同期クロック/イベント法を回避することで、OTTを測定することに成功したアルゴリズムとブームを適用してください!
user3134164 14

「A対Bのパケットの割合」とは何ですか?
ジル「SO-悪であるのをやめる」14

0

これは@ user3134164への回答ですが、コメントするには大きすぎます。

PバツバツRバツバツ

  • R1=1R2×1P2R2=1R1×1P1。アイデアは、ロボットが自身のパケットの1つを受信した場合、他のロボットが自身のパケットの代わりにそれを受信したことを意味するということです(したがって、1R2)そして、それ自体の代わりに送信することを選択したこと(したがって、 1P2)。
  • これにより、2つの未知数を持つ2つの方程式のシステムが得られます。 R1 そして R2。あなたはそれを解決したいかもしれませんが、それは本当に重要ではありません。実際、あなたが探している比率はそれぞれR11R1 そして R21R2。お気づきのとおり、これらの式に現れる唯一の用語は、各ロボットが他のロボットよりも自分のパケットを選択する確率です。両方のロボットがパケットを絶えずポンピングしているために、待ち時間が式に表示されないため、両方が常にパケットを受信して​​います。彼らは実際に異なる比率のパケットを受け取りますが、それは前述の確率にのみ依存します。

これが、これがあなたをどこにも導くとは思わない理由です。この推論の間に私が犯したかもしれない間違いを指摘してください。


コンピュータサイエンスへようこそ!あなたの答えは素晴らしく見えますが、あなたが述べているように、実際には@ user3134164の発言に関する詳細な解説です。次の方法でこの問題を解決できると思います1)これが実際の質問に対する回答であるように、回答を拡大してみてください。または2)user3134164のコメントからの重要な誤解と、これに類似した回答を含む自己回答を本質的に示す新しい質問を作成します。適切なものはあなた次第です。おそらく新しい質問をすることは良い考えだと思いますが、おそらくあなたは私が思っている以上に広げることができるでしょう。さらに質問があるかどうか尋ねてください。
離散トカゲ

もちろん、@ user3134164は、また質問へのコメントを「促進」に自由である
離散トカゲ

「Pxは、ロボットxが他のロボットのパケットの1つを受信したときに自身のパケットを選択する確率」は、仮定のコンピューターrandom()関数に由来します。たとえば、2種類のパケットの場合は常に0.5です。random()関数が十分に均一であれば、「AからBへのRTT遅延の実際の比率」を計算できます。あなたのRの定義では、R1 =(1-R2)* 0.5だと思うので、比率はわかっています。だから私はまだ私の答えがうまくいくと信じています。調べてくれてありがとう。
user3134164
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.