Misurazione della latenza della rete a senso unico


20

Questo è un enigma sulla misurazione della latenza di rete che ho creato. Credo che la soluzione sia impossibile, ma gli amici non sono d'accordo. Sto cercando spiegazioni convincenti in entrambi i casi. (Anche se si pone come un puzzle, penso che si adatti a questo sito Web a causa della sua applicabilità al design e all'esperienza dei protocolli di comunicazione come nei giochi online, per non parlare dell'NTP.)

Supponiamo che due robot si trovino in due stanze, collegate da una rete con diverse latenze unidirezionali, come mostrato nell'immagine seguente. Quando il robot A invia un messaggio al robot B ci vogliono 3 secondi per arrivare, ma quando il robot B invia un messaggio al robot A ci vogliono 1 secondo per arrivare. Le latenze non variano mai.

I robot sono identici e non hanno un orologio condiviso, sebbene possano misurare il passare del tempo (ad es. Hanno cronometri). Non sanno chi di loro è il robot A (i cui messaggi sono ritardati di 3 secondi) e quale è il robot B (i cui messaggi sono ritardati di 1 secondo).

Un protocollo per scoprire il tempo di andata e ritorno è:

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

Esiste un protocollo per determinare i ritardi del viaggio di sola andata? I robot possono scoprire chi ha il ritardo di invio del messaggio più lungo?

Due robot una rete asimmetrica


5
Vedi Sincronizzazione dell'orologio in una rete con ritardi asimmetrici (che richiede qualcosa di fattibile con la tipica infrastruttura Internet). Penso da quello che abbiamo visto quando abbiamo discusso delle risposte sbagliate a quella domanda, la risposta alla tua domanda è che è impossibile.
Gilles 'SO-smetti di essere malvagio' il

Dovremmo unire le domande o sono abbastanza diverse nel target da tenere separate?
Craig Gidney,

No, sono domande diverse. La tua domanda stabilisce che è impossibile in un'impostazione a due macchine con il solo passaggio di messaggi. Spero che soluzioni basate, per esempio, sulla disponibilità di informazioni sulla latenza per alcuni collegamenti intermedi sulla rotta tra il client e il server e che abbiano un modo per propagare queste informazioni al client.
Gilles 'SO-smetti di essere malvagio' il

3
Se ci fosse un modo per farlo, la teoria della relatività di Einstein non funzionerebbe, poiché dipende dal fatto che due osservatori che sono separati come uno spazio e hanno latenze unidirezionali sconosciute non possono concordare un momento adeguato.
Peter Shor,

NTP infatti consente / implementa la misurazione di questo ritardo differenziale in base alle macchine che si scambiano reciprocamente il proprio tempo e non si limitano a tracciare il tempo di invio / ricezione dei propri msg ma anche gli altri server tramite i contenuti di msg, vedere la risposta alla domanda di
Gilles

Risposte:


14

Il seguente diagramma, tratto da un post sul blog che ho scritto , è una prova visiva dell'impossibilità:

Far scorrere l'orologio si inclina esattamente compensato dall'asimmetria di latenza

Nota come i tempi di arrivo dei pacchetti su ciascun lato rimangono gli stessi, anche se le latenze a senso unico cambiano (e diventano persino negative!). Il primo pacchetto raggiunge sempre il server a 1,5 secondi sull'orologio del server, il secondo raggiunge sempre il client a 2 secondi sull'orologio del client, ecc. Il contenuto del pacchetto e gli orari di arrivo locali sono le uniche cose su cui si potrebbe basare un protocollo, ma il i contenuti e i tempi di arrivo possono essere mantenuti costanti poiché l'asimmetria varia anche variando l'inclinazione dell'orologio iniziale.

Fondamentalmente, l'asimmetria nelle latenze a senso unico assomiglia esattamente all'inclinazione dell'orologio. Poiché il problema afferma che non iniziamo a conoscere l'inclinazione dell'orologio iniziale o l'asimmetria della latenza unidirezionale e la variazione di uno sembra variare l'altro in modo che i loro effetti siano indistinguibili, non possiamo separare i loro contributi al fine di risolvere per il asimmetria a latenza unidirezionale. È impossibile.

Più formalmente, non è possibile risolvere le lunghezze dei bordi quando vengono fornite solo le lunghezze dei cicli. La base del ciclo ha gradi di libertà, corrispondenti a inclinazioni di clock sconosciute rispetto a uno dei partecipanti. Puoi sempre nascondere le latenze unidirezionali, anche quando ci sono molti partecipanti:n - 1n1n1

Mal di mare

Se non sei così incline alla vista, ho un altro argomento intuitivo. Immagina un portale temporale per cento anni nel futuro. Mentre chiacchieri con qualcuno dall'altra parte, ti rendi conto che la conversazione è del tutto normale nonostante l'asimmetria centenaria nei ritardi a senso unico. Qualsiasi effetto osservabile sarebbe stato evidente su quella scala!


Qual è la tua opinione al riguardo? software.internet2.edu/owamp
CMCDragonkai

@CMCDragonkai Tieni presente che l'affermazione del puzzle è più restrittiva della realtà. In pratica hai opzioni come misurare la lunghezza delle linee in fibra ottica, registrare in punti intermedi, usare la conoscenza della topologia della rete, trasportare lentamente un orologio da un luogo all'altro, ecc. Ad esempio, i satelliti GPS si muovono in orbite note e tu può usarlo per rimuovere i gradi di libertà durante la risoluzione. Quindi in superficie non vedo alcun problema con uno strumento ping unidirezionale, fintanto che esso o gli orologi su cui si basa stanno sfruttando alcune di quelle dolci informazioni terziarie.
Craig Gidney,

Oh, in tal caso, potresti aggiornare la tua risposta con possibili soluzioni?
CMCDragonkai,

@CMCDragonkai È sufficiente averli nei commenti. Sono oltre lo scopo del puzzle.
Craig Gidney,

La latenza a senso unico è importante, ad esempio per le reti di gioco. Inoltre, tutti dicono impossibile, ma posso facilmente risolvere il puzzle su carta: una volta sincronizzati gli orologi, tutto ciò che fai è misurare il ritardo da A a B inviando il tempo di A a B, con ritardo A-> B uguale a B's time - A's sent time, e B-> A essendo uguale alatency - A->B delay
Llamageddon l'

1

Penso che sia impossibile capire la latenza unidirezionale solo confrontando i cronometri.

B C A 1 B C B 1 = 1 A C A 2 = 9 B C B 2 = 5 A BA invia a suo orologio , diciamo che il suo valore è 5. riconosce il messaggio al momento invia nuovamente il suo orologio, (latenza iniziale + andata e ritorno). riceve al momento . E così via. Né né possono capire quando l'altro robot ha ricevuto un messaggio rispetto ai loro orologi.BCA1
BCB1=1
ACA2=9
BCB2=5
AB

Forse se lo fai una domanda generosa qualcuno lo spezzerà. Fino ad allora, complimenti.


0

Ho trovato un modo per ENTRAMBI scoprire quale nodo è chi (ovvero chi ha il ritardo del messaggio più lungo) E stimare il ritardo del viaggio di sola andata. Mentre le altre risposte sono corrette, stanno SOLO prendendo in considerazione la misurazione dell'orologio diretto che ovviamente non può funzionare. Tuttavia, come sto dimostrando qui, questa è solo una parte della storia in quanto qui è il mio algoritmo di lavoro per quanto sopra:

Assumi come nella vita reale:

  • Collegamenti di larghezza di banda finita b

  • Ogni nodo ha un indirizzo univoco (ad es. A e B)

  • La dimensione del pacchetto p è molto più piccola del prodotto di latenza della larghezza di banda *

  • I nodi A e B sono in grado di riempire il canale

  • I nodi hanno una funzione random ()

Ogni nodo riempie il canale con i propri pacchetti (contrassegnati rispettivamente con A o B) OPPURE inoltra i pacchetti ricevuti da altri nodi come segue:

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

Spiegazione intuitiva Poiché il prodotto di latenza della larghezza di banda * di A è maggiore (poiché la latenza è maggiore) A riuscirà a ricevere più pacchetti di B, quindi ogni nodo può sapere chi sono nel diagramma .

Inoltre, con un tempo di convergenza sufficiente per l'esecuzione sopra l'algoritmo, il rapporto tra i pacchetti da A a B indicherà il rapporto effettivo del ritardo RTT da A a B e quindi l'OTT desiderato .

TRACCIA DEL RISULTATO DELLA SIMULAZIONE Ecco una simulazione che dimostra quanto sopra e mostra come A convergere con successo verso un ritardo di 3 secondi e B convergere attorno a un ritardo di 1 secondo:

Primi secondi di simulazione

Successivi secondi di simulazione

Spiegazione delle figure: ogni riga rappresenta 1 secondo di tempo (la dimensione del pacchetto viene scelta per avere un tempo di trasmissione di 1 secondo per chiarezza). Si noti che ciascun nodo può avviare l'algo in qualsiasi momento, non in una sequenza o momento particolare. Le colonne sono le seguenti:

  • NODO A riceve: ciò che il nodo A vede nel suo lato ricevente (questo è anche P4 sotto)

  • NODE A inietta: quale nodo A invia (nota che è A, o casualmente A o B)

  • P1, P2, P3: I tre pacchetti in transito (in ordine) tra A e B (1 secondo di trasmissione significa che 3 pacchetti sono in transito per una latenza di 3)

  • NODE B riceve: ciò che B vede nel suo lato ricevente (questo è P3)

  • NODE B inietta: ciò che B invia (nota che è B, o casualmente A o B per algo)

  • P4: pacchetto in transito da B ad A (vedi anche P1, P2, P3)

  • A conta A: ciò che A conta per i pacchetti A che ha visto

  • A conta B: ciò che A conta per i pacchetti B che ha visto

  • B conta A: ciò che B conta per i pacchetti A che ha visto

  • B conta B: ciò che B conta per i pacchetti B che ha visto

  • A-> B: la latenza stimata da A verso B (rapporto di RTT di 4 secondi basato sui pacchetti visti)

  • B-> A: la latenza stimata da B verso A (rapporto di RTT di 4 secondi basato sui pacchetti visti)

Come possiamo vedere entrambi i nodi convergere e rimanere attorno alla loro vera latenza (in realtà non lo vediamo per A perché per convergere sono necessari più secondi ma converge lo stesso comportamento di B)

Filtri migliori potrebbero convergere più velocemente, ma possiamo vedere chiaramente come entrambi convergono attorno ai valori corretti per i loro ritardi, quindi possono esattamente conoscere il loro ritardo (anche se sto mostrando la loro stima solo a scopo illustrativo).

Inoltre, anche se le larghezze di banda tra i collegamenti sono diverse, il metodo di cui sopra potrebbe ancora essere valido (anche se si dovrà pensarci più per essere più certi) utilizzando coppie di pacchetti per capire le stime della larghezza di banda e quindi applicare all'equazione delle proporzioni sopra.

Conclusione Abbiamo fornito un algoritmo per A e B per conoscere la loro posizione nella rete e conoscere la loro latenza sull'altro nodo per il diagramma sopra. Abbiamo usato un metodo di stima delle misure di rete piuttosto che approcci basati sull'orologio che in effetti non possono portare a una soluzione a causa di un problema di sincronizzazione dell'orologio ricorsivo.

Nota ora ho modificato questa risposta fornendo tutte le simulazioni perché nessuno mi crederebbe di averlo risolto per quanto si può vedere nei primi commenti. Spero che con questi risultati qualcuno possa essere più convinto e approvare per aiutare tutti almeno a trovare un errore o la correttezza in questo puzzle di misurazione della rete!


3
Non penso che funzioni. Poiché la larghezza di banda è la stessa, l'unica differenza che A e B vedono è che, se iniziassero contemporaneamente, B aspetterebbe 3 secondi prima di ricevere qualsiasi dato e A aspetterebbe 1 secondo. Ma non hanno un orologio condiviso, quindi non sanno che hanno iniziato contemporaneamente. Forse A non sente nulla per 10 anni perché ha iniziato a eseguire prima il protocollo.
David Richerby,

Non è necessario avviarlo contemporaneamente, chiunque può avviarlo in qualsiasi momento, ma devono funzionare entrambi per un po 'di tempo. Apprezzo il tempo che hai dedicato alla revisione, ma ti preghiamo di rileggere. Questo è un metodo statistico e implica la convergenza. Non sto dicendo che sono al 100%, è assolutamente corretto poiché non ho simulato, ma solo il commento che hai fatto non si applica davvero secondo me. Forse questo spiega l'idea più in generale: se si accetta che il ritardo della larghezza di banda * è diverso per i due collegamenti, un collegamento conterrà in effetti più pacchetti - e questo potrebbe essere rilevato da algo sopra ...
user3134164

Non credo di aver frainteso, ma è possibile. Sei d'accordo sul fatto che la larghezza di banda è la stessa, quindi sia A che B ricevono i dati alla stessa velocità? In tal caso, non convergeranno entrambi esattamente nella stessa cosa?
David Richerby,

Sì, ovviamente ricevono alla stessa velocità, ciò non significa che convergano alla stessa cosa. Ci sono pacchetti A e B nella rete, la domanda è: qual è il rapporto tra i pacchetti A vs B. Ho eseguito una semplice simulazione ora e ottengo sempre il pregiudizio. Per avere un'idea dal momento che suppongo di non poter pubblicare il tutto qui supponiamo che b sia tale che 1 pacchetto impieghi un secondo di trasmissione. Quindi ci sono sempre 4 pacchetti in transito. Applicando algoritmo e boom siamo riusciti a misurare l'OTT evitando i metodi sincronizzati di clock / eventi che non funzionano con i metodi di convergenza statistica!
user3134164,

Qual è "la proporzione di pacchetti di A vs B"?
Gilles 'SO- smetti di essere malvagio' il

0

Questa è una risposta a @ user3134164 ma è troppo grande per un commento.

Ecco il mio tentativo di mostrare perché questo non può funzionare (approccio matematico). Chiamiamo la probabilità che il robot scelga i suoi pacchetti quando riceve uno dei pacchetti dell'altro robot, e la probabilità che un robot pacchetto sia suo. Dopo che il regime stazionario è stato raggiunto (cioè dopo un "infinito" periodo di tempo, cioè tutta la convergenza è stata fatta), abbiamo quanto segue:PxxRxx

  • R 2 = ( 1 - R 1 ) × ( 1 - P 1 ) 1 - R 2 1 - P 2R1=(1R2)×(1P2) e similmente . L'idea è che se un robot riceve uno dei suoi pacchetti, significa che l'altro robot l'ha ricevuto invece di uno dei suoi (da qui l' ) e che ha ancora scelto di inviarlo invece di uno dei suoi (quindi il prodotto da ).R2=(1R1)×(1P1)1R21P2
  • Questo dà un sistema di due equazioni con due incognite, e . Potresti volerlo risolvere, ma non importa davvero. In effetti, i rapporti che stai cercando sono rispettivamente e . Come puoi notare, gli unici termini che compaiono in quelle espressioni sono le probabilità in cui ciascun robot sceglie il proprio pacchetto rispetto all'altro. Le latenze non compaiono nemmeno nella formula semplicemente perché entrambi i robot pompano costantemente i pacchetti, quindi entrambi ricevono costantemente pacchetti. Riceveranno effettivamente rapporti di pacchetti diversi, ma dipenderà solo dalle suddette probabilità.R 2 R 1R1R2 R2R11R1R21R2

Questo è il motivo per cui credo che questo non ti porterà da nessuna parte. Per favore, sottolinea qualsiasi errore che avrei potuto fare durante questo ragionamento.


Benvenuti in Informatica ! La tua risposta sembra carina ma, come dici tu, è in realtà un commento approfondito sull'osservazione di @ user3134164. Penso che puoi risolvere questo problema nei seguenti modi 1) Prova ad espandere la tua risposta in modo che questa sia anche una risposta alla domanda reale. oppure 2) Creare una nuova domanda che indichi essenzialmente il malinteso chiave dal commento e dall'auto-risposta di user3134164 con una risposta simile a questa. Quale è appropriato dipende da te. Penso che forse fare una nuova domanda sia una buona idea, ma forse puoi ampliare più di quanto penso. Chiedi se hai ulteriori domande.
Lucertola discreta

Naturalmente, @ user3134164 è anche libero di "promuovere" il commento in una domanda,
Lucertola discreta

"Px la probabilità che il robot x scelga i propri pacchetti quando riceve uno dei pacchetti dell'altro robot" deriva da una funzione random () del computer come nell'ipotesi, ad esempio per due tipi di pacchetti sarà sempre 0,5. Se la funzione random () è abbastanza uniforme, è possibile calcolare il "rapporto effettivo del ritardo RTT da A a B". Secondo la tua definizione R penso che R1 = (1-R2) * 0,5, quindi il rapporto è noto. Quindi credo ancora che la mia risposta funzioni bene. Grazie mille per aver dedicato del tempo per esaminarlo.
user3134164
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.