Pergunta

Estou construindo uma aplicação Ethernet em que eu estarei enviando pacotes de um lado e recebê-lo no outro lado. Eu quero calcular atraso em pacotes no lado do receptor como em RFC 3393. Então eu tenho que colocar uma data e hora em que o pacote do lado do remetente e, em seguida, tomar as marcas de tempo no lado do receptor, logo que eu receber o pacote. Subtraindo os valores i receberá a diferença de marcas de tempo e, em seguida, subtrair esse valor com diferença posterior i vai ter atraso Uma maneira ipdv. Ambos os relógios não estiverem sincronizados. Assim, qualquer ajuda é muito apreciada. Obrigado.

Foi útil?

Solução

RFC 3393 é para medir a variância no atraso de pacotes, não para medir o próprio atraso.

Para dar um exemplo: você está escrevendo um aplicativo de streaming de vídeo. Você quer tampão como dados de vídeo mínimo possível (para que o vídeo começa a jogar o mais rápido possível). Digamos que os dados sempre sempre sempre leva 20ms para ir de máquina A para a máquina B. Neste caso (e assumindo que a máquina A pode enviar os dados de vídeo tão rápido quanto ele precisa jogar), você don' t precisa de qualquer tampão de todo. Assim que você receber o primeiro quadro, você pode começar a jogar, com a certeza de que pelo tempo que for necessário o próximo quadro, ele terá chegado (porque os dados sempre leva exatamente 20ms para chegar e máquina A está enviando pelo menos tão rápido quanto você está jogando).

Isso funciona não importa quanto tempo que 20ms é, contanto que é sempre o mesmo. Poderia ser 1000ms - o primeiro quadro leva 1000ms para chegar, mas você ainda pode começar a jogar assim que chega, porque o próximo quadro também terá 1000ms e foi enviado logo atrás do primeiro quadro - em outras palavras, ele já está em seu caminho e estará aqui momentaneamente. Obviamente, o mundo real não é assim.

Leve o outro extremo: na maioria das vezes, os dados chega em 20ms. Exceto às vezes, quando se leva 5000ms. Se você continuar sem buffer e o atraso em quadros de 1 a 50 é 20ms, então você começa a jogar os primeiros 50 quadros sem um problema. Então quadro 51 leva 5000ms para chegar e você é deixado sem quaisquer dados de vídeo para 5000ms. O usuário vai e visitas outro local para os seus vídeos bonito do gato. O que você realmente precisava era de um tampão de 5000ms de dados -. Então você teria sido bom

exemplo Longo, ponto de curto: você não está interessado no que o absoluta atraso nos pacotes é, você está interessado em que o variância em que o atraso é -. isso é o quão grande o seu tampão tem de ser

Para medir o absoluta atraso, você teria que ter os relógios em ambas as máquinas serem sincronizados. Máquina A iria enviar um pacote com timestamp 12337849227 28 20ms e quando isso chegou a máquina B no momento 12337849227 48 , você saberia o pacote tinha tomado para chegar lá.

Mas já que você está interessado no variância , você precisa (como RFC 3393 descreve) vários pacotes de máquina A. máquina A envia o pacote 1 com timestamp 1233784922 72 8, depois de 10 ms depois envia pacotes 2 com hora e data 1233784922 73 8, depois de 10 ms depois envia o pacote 3 com hora e data 1233784922 74 8.

Máquina B recebe pacote 1 com o que ele pensa que é timestamp 1233784922 12 8. O atraso de um caminho entre a máquina A e máquina B tem neste caso (do ponto de vista da máquina do B) foram -600ms. Esta é obviamente uma besteira completa, mas nós não nos importamos. Máquina B recebe pacote 2 com o que ele pensa que é timestamp 1233784922 15 8. O atraso de um caminho foi -580ms. Máquina B recebe pacote 3 para o que ele pensa que é timestamp 1233784922 16 8. O atraso de ida foi novamente -580ms.

Como acima, nós não nos importamos o que o atraso absoluto é - por isso não me importo mesmo se for negativo, ou três horas, ou o que quer. O que importa é que a quantidade de atraso variou de 20ms. Então você precisa de um tampão de 20ms de dados.

Note que estou inteiramente discorrer sobre a questão da deriva relógio aqui (isto é, os relógios em máquinas A e B rodando a taxas ligeiramente diferentes, de modo que para o tempo avança exemplo máquina de à uma taxa de 1.00001 segundos para cada segundo que realmente passado). Enquanto isso introduzir imprecisão nas medições, o seu efeito prático não é provável que seja um problema na maioria das aplicações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top