Dies ist ein Rätsel zur Messung der Netzwerklatenz, das ich erstellt habe. Ich glaube, die Lösung ist, dass es unmöglich ist, aber Freunde nicht einverstanden sind. Ich suche so oder so nach überzeugenden Erklärungen. (Obwohl es sich um ein Puzzle handelt, passt es meiner Meinung nach auf diese Website, da es sich auf das Design und die Erfahrung von Kommunikationsprotokollen wie in Online-Spielen bezieht, ganz zu schweigen von NTP.)
Angenommen, zwei Roboter befinden sich in zwei Räumen, die durch ein Netzwerk mit unterschiedlichen Latenzen in eine Richtung verbunden sind (siehe Abbildung unten). Wenn Roboter A eine Nachricht an Roboter B sendet, dauert es 3 Sekunden, bis sie eintrifft, aber wenn Roboter B eine Nachricht an Roboter A sendet, dauert es 1 Sekunde, bis sie eintrifft. Die Latenzen variieren nie.
Die Roboter sind identisch und haben keine gemeinsame Uhr, obwohl sie den Lauf der Zeit messen können (z. B. haben sie Stoppuhren). Sie wissen nicht, welcher von ihnen Roboter A ist (dessen Nachrichten 3s verzögert sind) und welcher Roboter B ist (dessen Nachrichten um 1s verzögert sind).
Ein Protokoll zur Ermittlung der Umlaufzeit lautet:
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
Gibt es ein Protokoll zur Ermittlung der Einwegverspätungen? Können die Roboter herausfinden, welcher von ihnen die längere Verspätung beim Senden von Nachrichten hat?
quelle
Antworten:
Das folgende Diagramm von einem Blogbeitrag, den ich geschrieben habe , ist ein visueller Beweis dafür, dass es unmöglich ist:
Beachten Sie, dass die Paketankunftszeiten auf jeder Seite gleich bleiben, auch wenn sich die Einweglatenzen ändern (und sogar negativ werden!). Das erste Paket erreicht den Server immer um 1,5 Sekunden nach der Uhr des Servers, das zweite erreicht den Client immer um 2 Sekunden nach der Uhr des Clients usw. Der Paketinhalt und die lokalen Ankunftszeiten sind die einzigen Dinge, auf denen ein Protokoll basieren könnte Inhalt und Ankunftszeiten können konstant gehalten werden, da die Asymmetrie variiert, indem auch der anfängliche Taktversatz variiert wird.
Grundsätzlich sieht Asymmetrie bei den Einweg-Latenzen aus genau der Zeitverschiebung. Da das Problem besagt, dass wir den anfänglichen Taktversatz oder die Einweg-Latenz-Asymmetrie nicht kennen und das Variieren des einen wie das Variieren des anderen aussieht, so dass ihre Effekte nicht zu unterscheiden sind, können wir ihre Beiträge nicht trennen, um das zu lösen Einweg-Latenz-Asymmetrie. Es ist unmöglich.
Wenn Sie visuell nicht so geneigt sind, habe ich ein anderes intuitives Argument. Stellen Sie sich ein Zeitportal für hundert Jahre in der Zukunft vor. Wenn Sie sich mit jemandem auf der anderen Seite darüber unterhalten, stellen Sie fest, dass die Konversation trotz der hundertjährigen Asymmetrie bei einseitigen Verzögerungen völlig normal ist. Jeder beobachtbare Effekt wäre in dieser Größenordnung offensichtlich gewesen!
quelle
B's time - A's sent time
und ist B-> Ein Wesen gleichlatency - A->B delay
Ich denke, es ist unmöglich, die Latenz in eine Richtung nur durch einen Vergleich der Stoppuhren zu ermitteln.
Vielleicht wird es jemand knacken, wenn Sie es zu einer Kopfgeldfrage machen. Bis dahin ein dickes Lob.
quelle
Ich habe einen Weg gefunden, BEIDES herauszufinden, welcher Knoten wer ist (dh wer die längere Nachrichtenverzögerung hat) UND die Einweg-Auslöseverzögerung abzuschätzen. Die anderen Antworten sind zwar korrekt, sie berücksichtigen jedoch NUR die Annäherung an die direkte Taktmessung, was natürlich nicht funktionieren kann. Wie ich hier beweise, ist dies jedoch nur ein Teil der Geschichte, da hier mein Arbeitsalgorithmus für das Obige ist:
Angenommen, wie im wirklichen Leben:
Links mit endlicher Bandbreite b
Jeder Knoten hat eine eindeutige Adresse (zB A und B)
Die Paketgröße p ist viel kleiner als das Latenzprodukt für Bandbreite *
Die Knoten A und B können den Kanal füllen
Knoten haben eine zufällige () Funktion
Jeder Knoten füllt den Kanal mit seinen eigenen Paketen (mit A oder B markiert) ODER leitet die von anderen Knoten empfangenen Pakete wie folgt weiter:
Intuitive Erklärung Da das Latenzprodukt für Bandbreite * von A höher ist (weil die Latenz höher ist), kann A mehr Pakete empfangen als B, sodass jeder Knoten wissen kann, wer sie im Diagramm sind .
Weiterhin mit genügend Konvergenzzeit wird bezeichnen obigen Algorithmus des Laufens das Verhältnis von Paketen , von A zu B das tatsächliche Verhältnis von RTT Verzögerung von A nach B und damit die gewünschte OTT .
VERFOLGUNG DER SIMULATIONSERGEBNISSE Hier ist eine Simulation, die das Obige beweist und zeigt, wie A erfolgreich in Richtung einer Verzögerung von 3 Sekunden und B in Richtung einer Verzögerung von 1 Sekunde konvergiert:
Erläuterung der Figuren: Jede Zeile repräsentiert 1 Sekunde der Zeit (die Paketgröße wird aus Gründen der Klarheit so gewählt, dass sie 1 Sekunde Übertragungszeit hat). Beachten Sie, dass jeder Knoten den Algo jederzeit und nicht in einer bestimmten Reihenfolge oder Zeit starten kann. Die Spalten lauten wie folgt:
NODE A empfängt: Was Node A auf seiner Empfangsseite sieht (dies ist auch P4 unten)
Knoten A injiziert: Was Knoten A aussendet (beachten Sie, dass dies A oder zufällig A oder B ist)
P1, P2, P3: Die drei Pakete, die zwischen A und B (in der Reihenfolge) übertragen werden (1 Sekunde bedeutet, dass 3 Pakete für eine Latenz von 3 übertragen werden)
NODE B empfängt: Was B auf seiner Empfangsseite sieht (dies ist P3)
NODE B injiziert: Was B aussendet (beachten Sie, dass dies B ist oder zufällig A oder B pro Algo)
P4: Das Paket auf dem Weg von B nach A (siehe auch P1, P2, P3)
A zählt A: Was A für die A-Pakete zählt, die es gesehen hat
A zählt B: Was A für die B-Pakete zählt, die es gesehen hat
B zählt A: Was B für die A-Pakete zählt, die es gesehen hat
B zählt B: Was B für die B-Pakete zählt, die es gesehen hat
A-> B: Die Latenz, die A in Richtung B schätzt (Verhältnis der RTT von 4 Sekunden basierend auf den gesehenen Paketen)
B-> A: Die Latenz, die B in Richtung A schätzt (Verhältnis der RTT von 4 Sekunden basierend auf den gesehenen Paketen)
Wie wir sehen können, konvergieren beide Knoten und bleiben um ihre wahre Latenz herum (tatsächlich sehen wir das für A nicht, weil mehr Sekunden benötigt werden, um zu konvergieren, aber es konvergiert dasselbe Verhalten wie B)
Bessere Filter könnten schneller konvergieren, aber wir können deutlich sehen, wie sie beide um die korrekten Werte für ihre Verzögerungen konvergieren, daher können sie genau sie ihre Verzögerung kennen (obwohl ich ihre Schätzung nur zur Veranschaulichung zeige).
Auch wenn die Bandbreiten zwischen den Verbindungen unterschiedlich sind, könnte das obige Verfahren immer noch gelten (obwohl man sich mehr Gedanken darüber machen muss, um sicherer zu sein), indem Paketpaare verwendet werden, um Bandbreitenschätzungen herauszufinden, und dann einfach auf die obige Proportionsgleichung angewendet werden.
Schlussfolgerung Wir haben einen Algorithmus bereitgestellt, mit dem sowohl A als auch B ihre Position im Netzwerk und ihre Latenz zum anderen Knoten für das obige Diagramm kennen. Wir verwendeten eine Schätzmethode für die Netzwerkmessung anstelle von taktbasierten Ansätzen, die aufgrund von Problemen mit der rekursiven Taktsynchronisation in der Tat nicht zu einer Lösung führen können.
Hinweis: Ich habe diese Antwort jetzt bearbeitet und alle Simulationen bereitgestellt, da mir niemand glauben würde, dass ich sie gelöst habe, wie Sie in den ersten Kommentaren sehen können. Hoffentlich kann jemand mit diesen Ergebnissen überzeugter sein und jedem helfen, mindestens einen Fehler oder eine Richtigkeit in diesem Netzwerk-Messrätsel zu finden!
quelle
Dies ist eine Antwort auf @ user3134164, aber für einen Kommentar zu groß.
Deshalb glaube ich, dass Sie dies nirgendwo hinführen wird. Bitte weisen Sie auf einen Fehler hin, den ich bei dieser Überlegung hätte machen können.
quelle