Como posso formular a latência da comunicação no TCP / IP?


12

Tenho dificuldade em derivar um modelo / equação matemática para estimar a latência de ida e volta entre dois nós que se comunicam usando TCP / IP. Os nós estão trocando dados com base no protocolo HTTP. Nesse modelo, os fatores mais importantes a serem estudados são a distância física entre dois nós na rede, número de saltos intermediários, largura de banda, atraso no processamento a cada salto. Pesquisei na web, mas não consegui encontrar nada nesse sentido, mas encontrei algo sobre redes de comutação de circuitos e protocolo UDP. Posso personalizá-los para caber no TCP?


Este é um alvo em movimento e há tantas dependências que alterariam as constantes do seu modelo. Por exemplo, se você deseja incluir um atraso de encaminhamento por salto, como linha de base, você precisa conhecer a marca e o modelo de cada dispositivo na linha. Se você não controla ou conhece cada dispositivo no caminho, como pela Internet ou outra rede, isso é praticamente impossível de considerar. Se você presumir que sabe tudo sobre cada salto no caminho, poderá aplicar um atraso de encaminhamento da linha de base, digamos 1,2 microssegundos para o modelo de chave "A" e 5,0 para o modelo de chave "B" e assim por diante.
Netdad #

1
+1 também aqui !, Seu deve bandeira no SO para retirar a sua pergunta agora, suas duplicatas
Grijesh Chauhan

código fonte de httpinghttping -Gbg www.google.com -c 5
:,

@Espanta, seu objetivo é estimar apenas a latência ou também a taxa de transferência? A taxa de transferência depende muito dos recursos de TCP, como SACK, RWIN, propriedade do protocolo de aplicativo e, é claro, latência.
generalnetworkerror

@generalnetworkerror, preciso de latência de ida e volta para obter e obter http solicitação e resposta.
Espanta 21/05

Respostas:


8

Este é um processo muito complicado, portanto, é extremamente difícil formular uma equação que possa ser útil para prever com precisão as RTTs. Na melhor das hipóteses, eu diria que você poderia criar um modelo que, usando um monte de médias para cada estágio, pudesse ajustar se você "soubesse" melhor de uma situação em particular o mais próximo possível. Atualmente, estou estudando isso para que eu possa lhe dizer o que sei até agora (desde o início, começando na camada física):

  • Veja minhas perguntas no Electronics SE; Atraso de codificação da Ethernet e a relação com a classificação de frequência do cabo e Velocidade da eletricidade (propagação de sinal?) Através do cobre para atraso de comunicação . Como você usaria velocidades padronizadas (100 Mbps, 1 Gbps, 10 Gbps etc.), não trate fibra ou cobre de maneira diferente. O "atraso" nos dois é quase o mesmo, mas o cobre não pode transmitir um sinal tão obviamente. Eu tenho essa pergunta no site da Physics SE, que eu sei a resposta agora. Eu só preciso encontrar tempo para corrigi-lo, então fique de olho nisso, se você estiver interessado (estarei postando mais algumas perguntas relacionadas ao uso de telecomunicações de fibra para as quais agora eu sei a resposta quando tiver uma chance )

  • Muito mais atraso será adicionado pelos dispositivos no final de um link. Não existe uma maneira padrão de dizer "oh 2 switches ao longo de um caminho é atraso de Xms, 4 switches são 2 * Xms, 2 roteadores são Yms ... etc". Supondo que você esteja usando, digamos, 1Gpbs, por exemplo, e os dispositivos no caminho a seguir na taxa de linha, sabemos que é 1000000000bps; portanto, a interface física está executando a uma taxa de codificação fixa (variando de 1 nanossegundo por bit até o máximo do esquema de codificação de símbolos em uso é, como 10b )

  • Existem três tipos principais de atraso (na camada física) dos quais você precisa estar ciente e levar em consideração; Atraso de serialização, atraso de codificação, atraso de propagação (e atraso de processamento, atraso de enfileiramento, atraso de codificação e decodificação, mas estes estão acima da camada física, mas precisam ser mencionados!). Estes documentos estão razoavelmente bem documentados na Internet, VoIP: uma análise aprofundada , slide 13 aqui , carrega no Google Scholar e muito mais.

  • À medida que avançamos na pilha de protocolos, eu trabalhava no pressuposto de que o MAC de destino está em cada tabela de comutadores e, na camada IP, o MAC de destino nas tabelas ARP. O atraso extra induzido por esses processos de descoberta ocorre apenas para o primeiro pacote em um fluxo, para que eles possam ser contornados aumentando os tempos limites e enviando ARPs gratuitos etc.

  • À medida que você chega à camada do aplicativo, isso fica realmente difícil, porque isso depende do servidor (por exemplo) processar a solicitação, que estará sujeita a um atraso de interrupção. O número de interrupções necessárias para processar a solicitação e as alternâncias de contexto devido ao carregamento é imprevisível.

Gostaria muito de ajudá-lo com sua pergunta. Infelizmente, é tudo o que tenho tempo agora. Vou atualizar esta resposta talvez mais tarde hoje à noite ou amanhã, eu queria postar o que tenho até agora.

Nesse meio tempo, a maioria das pessoas tende a trabalhar com o valor do atraso em uma camada física de cobre / fibra de cerca de 0,6 * c (C = velocidade da luz). Além disso, você precisa pensar na troca de ACKs do TCP a cada pacote X, o que difere se você estiver usando o SACK, por exemplo, e se estiver usando jumbo-frames e / ou tamanho MSS maior (agora o MTU também precisa ser considerado!) , se você estiver enviando mais ACKs intermediários (se o volume de dados transferidos for do seu interesse). Você também precisa levar em consideração o famoso produto de atraso de largura de banda e não fazer a interpretação estúpida que eu fiz dessa página. Comecei a fazer várias calculadoras de dados simples (e muito feias) aqui. Novamente um trabalho em andamento, tentarei atualizá-los em breve. Pretendo adicionar uma calculadora semelhante ao que você está tentando fazer. Também fiz algumas calculadoras de luz e fibra, se você estiver interessado, mas, novamente, não há tempo !, ainda não consegui carregá-las. Vou tentar o mais rápido possível para atualizar esta resposta um pouco mais, nos próximos dias.

PS Eu esqueci de mencionar QoS! Se a QoS estiver em jogo em qualquer lugar do caminho, será muito difícil calcular a RTT!


obrigado. Isso é bem legal em detalhes. Eu preciso enfatizar que o número de saltos entre dois nós tem alto impacto na distância física entre dois nós na rede com fio. (Pelo menos, uma vez que meus benchmarking reais mostram isso.) Então, reunirei todos e apresentarei meu modelo em breve. muito obrigado a todos aqueles que leram, votaram, responderam e responderão.
Espanta 20/05

O uso de telecomunicações de fibra (assumindo que o OP não esteja lidando com atrasos apenas dentro de um Data Center, ou alguma configuração em que ele tenha controle total sobre a infraestrutura física) pode ser interessante e tornar a modelagem quase impossível. Uma anedota para destacar o problema. Uma vez tive Louisville, KY <-> Lexington, KY e Louisville, KY <-> Cincinnati, OH do T-1. Liguei para a empresa de telecomunicações e eles me informaram que o corte de fibra no oeste de Illinois era o culpado. Olhe para um mapa e veja por que isso é loucura. No entanto, links de largura de banda mais alta são menos propensos a esse tipo de loucura das telecomunicações.
precisa

5

(Quero ressaltar que outras pessoas publicaram excelentes respostas sobre como os atrasos e outros funcionam e o que os causa. Mas o OP perguntou sobre modelagem; um modelo básico é simples e basta inserir números de exemplo. Se você quer saber por que os atrasos são o que são e, em seguida, veja as respostas de todos os outros: ^)

A latência da rede é simplesmente o tempo de trânsito de um ponto final para o outro ponto final, abrangendo N saltos entre eles .

Então você tem N segmentos (saltos) com nós intermediários N-1. Cada nó tem um atraso (o efeito cumulativo de várias coisas nesse nó, como atraso na fila, atrasos no processamento, etc.) e cada segmento tem um atraso no trânsito. No geral, são 2N - 1 variáveis ​​independentes. Então é seg1 + nó1 + seg2 ... + nó (N-1) + segN Um salto, é apenas = seg1, duas esperanças são seg1 + nó1 + seg2, etc.

Em seguida, você deve definir o que são todas essas peças. Portanto, você pode construir uma rede modelo com uma rede CATV, um link de satélite, um link de fibra óptica, uma Ethernet, etc. Para cada uma dessas tecnologias, é necessário procurar informações de exemplo.

Os atrasos no trânsito seriam aproximadamente o tamanho dos dados dividido pela velocidade de transmissão do segmento. Se você precisar de um modelo mais preciso, adicione o atraso no tempo de vôo - aproximadamente o comprimento do segmento, dividido pela velocidade do fluxo de dados (aproximadamente a velocidade da luz). Isso importa se você tiver um link de satélite; A subida e descida do satélite geossíncrono é significativa.

Os atrasos em cada nó que você terá que estimar com base no equipamento que você está colocando no seu modelo.

Se você deseja a latência do aplicativo (por exemplo, o atraso até o início do fluxo de dados de uma transferência FTP), acumula-se contando quantas vezes sua latência de rede entra em jogo. Por exemplo, um handshake TCP de três vias adiciona a latência de rede tripla e assim por diante, criando o que o aplicativo vê.


3

Você pode estimar a latência de ida e volta fazendo uma captura de pacotes em ambos os lados e depois medindo o atraso entre as solicitações que saem da máquina monitorada e as respostas que retornam. Por exemplo, se você marcar a hora em que um SYN saiu para a máquina remota e marcar a hora em que a resposta SYN + ACK chegou, a diferença forneceria uma estimativa muito boa da latência TCP de ida e volta.

Lembre-se de que isso será maior que a verdadeira latência da rede e quanto maior depende de quão pesada a máquina está.


obrigado por sua resposta, mas não quero medi-lo usando nenhuma codificação ou interpretação de máquina, preciso formulá-lo usando modelo matemático. Por exemplo, algo como: Atraso total = propagação total + transmissão total + armazenamento total e encaminhamento + processamento total. E para cada um desses momentos, posso ter outra fórmula. Portanto, pode ser medido matematicamente.
Espanta 20/05

3

O atraso entre dois hosts dependerá de vários fatores:

  • Atraso de propagação
  • Atraso de serialização
  • Atraso na fila / buffer

Atraso na propagação é quanto tempo leva fisicamente para os pacotes viajarem entre dois locais. A velocidade da luz na fibra é de cerca de 200000 km / s. A Suécia, onde moro, tem cerca de 1570 km, o que equivale a 7,85 m, mas, na realidade, é mais porque essa é a distância via vista dos pássaros.

Atraso de serialização é quanto tempo leva para serializar o pacote através do meio físico, ou seja, as interfaces no dispositivo de rede. Se você possui uma conexão de 2 Mbit e está enviando um pacote de 1500 bytes que seria de 6 ms para serializar o pacote (12000/2000000).

Atraso no enfileiramento / armazenamento em buffer é quanto tempo o pacote precisa permanecer em uma fila / buffer antes de ser enviado à interface. Dependendo da velocidade da interface e de como os buffers grandes são usados, isso pode ser o próximo, sem nada ou com um atraso significativo.

Depois, haveria algum atraso nos hosts para gerar os pacotes e para o aplicativo lidar com eles. Existem aplicativos para medir o atraso HTTP. As pessoas não aceitam muito atraso nos sites antes de desistir deles, por isso é um fator importante.


e quanto ao número de saltos? e atrasos em cada salto?
Espanta 20/05

É difícil fazer uma fórmula geral porque alguns fatores estão variando, como serialização e enfileiramento. Aqui está alguém que escreveu sobre isso. ccieflyer.com/pdf/2009-Mar-Oleg-Berzin.pdf - A matemática é além de minhas habilidades matemáticas embora :)
Daniel Dib
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.