Domanda

Sto costruendo un'applicazione Ethernet in cui invierò i pacchetti da un lato e li riceverò dall'altro.Voglio calcolare il ritardo nei pacchetti sul lato ricevitore come in RFC 3393.Quindi devo inserire un timestamp nel pacchetto dal lato del mittente e poi prendere il timestamp dal lato del destinatario non appena ricevo il pacchetto.Sottraendo i valori otterrò la differenza nei timestamp e quindi sottraendo questo valore con la successiva differenza otterrò il ritardo ipdv unidirezionale. Entrambi gli orologi non sono sincronizzati. Quindi qualsiasi aiuto è molto apprezzato.Grazie.

È stato utile?

Soluzione

RFC 3393 serve per misurare il varianza nel ritardo del pacchetto, non per misurare il ritardo stesso.

Per fare un esempio:stai scrivendo un'applicazione di streaming video.Si desidera memorizzare nel buffer il minor numero di dati video possibile (in modo che la riproduzione del video inizi il prima possibile).Diciamo che i dati sempre sempre Sempre impiega 20 ms per passare dalla macchina A alla macchina B.In questo caso (e presupponendo che la macchina A possa inviare i dati video alla velocità necessaria per riprodurli), non è necessario alcun buffer.Non appena ricevi il primo frame, puoi iniziare a giocare, con la certezza che quando sarà necessario il frame successivo, sarà già arrivato (perché i dati impiegano sempre esattamente 20 ms per arrivare e la macchina A sta inviando almeno velocemente mentre giochi).

Funziona indipendentemente dalla durata dei 20 ms, purché sia ​​sempre lo stesso.Potrebbero essere 1000 ms - il primo fotogramma impiega 1000 ms per arrivare, ma puoi comunque iniziare a giocare non appena arriva, perché anche il fotogramma successivo impiegherà 1000 ms ed è stato inviato subito dopo il primo fotogramma - in altre parole, è già sul suo modo e sarà qui per un momento.Ovviamente il mondo reale non è così.

Prendiamo l'altro estremo:nella maggior parte dei casi, i dati arrivano in 20 ms.Tranne a volte, quando ci vogliono 5000 ms.Se non mantieni alcun buffer e il ritardo sui fotogrammi da 1 a 50 è di 20 ms, puoi riprodurre i primi 50 fotogrammi senza problemi.Quindi il frame 51 impiega 5000 ms per arrivare e rimani senza dati video per 5000 ms.L'utente va e visita un altro sito per i suoi video di gatti carini.Ciò di cui avevi veramente bisogno era un buffer di 5000 ms di dati, quindi avresti avuto tutto il necessario.

Esempio lungo, punto breve:non ti interessa ciò che assoluto il ritardo sui pacchetti è, ti interessa sapere cosa varianza in quel ritardo è - ecco quanto deve essere grande il tuo buffer.

Per misurare il assoluto ritardo, dovresti sincronizzare gli orologi su entrambe le macchine.La macchina A invierebbe un pacchetto con timestamp 12337849227 28 e quando è arrivato alla macchina B all'ora 12337849227 48, sapresti che il pacchetto ha impiegato 20 ms per arrivare lì.

Ma poiché sei interessato a varianza, sono necessari (come descritto nella RFC 3393) diversi pacchetti dalla macchina A.La macchina A invia il pacchetto 1 con timestamp 1233784922 72 8, quindi 10 ms dopo invia il pacchetto 2 con timestamp 1233784922 73 8, quindi 10 ms dopo invia il pacchetto 3 con timestamp 1233784922 74 8.

La macchina B riceve il pacchetto 1 a quello che ritiene sia il timestamp 1233784922 12 8.In questo caso (dal punto di vista della macchina B) il ritardo unidirezionale tra la macchina A e la macchina B è stato di -600 ms.Ovviamente è tutta spazzatura, ma non ci interessa.La macchina B riceve il pacchetto 2 a quello che ritiene sia il timestamp 1233784922 15 8.Il ritardo unidirezionale è stato di -580 ms.La macchina B riceve il pacchetto 3 a quello che ritiene sia il timestamp 1233784922 16 8.Il ritardo unidirezionale è stato ancora una volta di -580 ms.

Come sopra, non ci interessa quale sia il ritardo assoluto, quindi non ci interessa nemmeno se è negativo, o tre ore, o altro.Ciò che ci interessa è che la quantità di ritardo vari di 20 ms.Quindi è necessario un buffer di 20 ms di dati.

Si noti che qui sto sorvolando completamente il problema della deriva dell'orologio (vale a dire, gli orologi sulle macchine A e B che funzionano a velocità leggermente diverse, in modo che, ad esempio, il tempo della macchina A avanza ad una velocità di 1,00001 secondi per ogni secondo che in realtà passato).Sebbene ciò introduca imprecisioni nelle misurazioni, è probabile che il suo effetto pratico non costituisca un problema nella maggior parte delle applicazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top