ti-enxame.com

Quais são as chances de perder um pacote UDP?

Certo, estou programando meu curso de rede e tenho que implementar um projeto em Java usando UDP. Estamos implementando um servidor HTTP e cliente juntamente com uma função 'gremlin' que corrompe pacotes com uma probabilidade especificada.O servidor HTTP precisa dividir um arquivo grande em vários segmentos na camada de aplicativo para ser enviado ao cliente através de UDP. O cliente deve remontar os segmentos recebidos na camada de aplicativo. O UDP, por definição, não é confiável. Por que estou tendo que simular a falta de confiabilidade aqui?

Meu primeiro pensamento é que talvez seja porque meu instrutor está pensando no nosso caso, tanto o cliente quanto o servidor serão executados na mesma máquina e que o arquivo será transferido de um processo para outro 100% confiável, mesmo através do UDP, pois está entre dois processos no mesmo computador.

Isso me levou a questionar se o UDP, perdia um pacote, corrompia um pacote ou o entregava fora de ordem, se o servidor e o cliente fossem dois processos na mesma máquina e não precisassem sair pela rede real.

Também estou me perguntando quais as chances de realmente perder um pacote, corrompê-lo ou entregá-lo fora de ordem na realidade, normalmente seria pela Internet entre dois hosts geograficamente distantes.

Muito agradecimento a qualquer um que possa esclarecer alguma dessas perguntas para mim.

17
Cory Gross

se o UDP não é, por definição, confiável, por que estou tendo que simular a falta de confiabilidade aqui?

É muito útil ter um mecanismo controlado para simular os piores cenários e como o cliente e o servidor podem responder a eles. O instrutor provavelmente deseja que você demonstre o quão robusto o sistema pode ser.

Você também está falando sobre a validade da carga útil aqui e não apenas sobre a perda de pacotes.

Isso me levou a questionar se o UDP, perdia um pacote, corrompia um pacote ou o entregava fora de ordem, se o servidor e o cliente fossem dois processos na mesma máquina e não precisassem sair pela rede real.

Obviamente, é menos provável pelo adaptador de loopback, mas isso não é impossível.

Encontrei algumas postagens no fórum sobre o tópico aqui e aqui .

Também estou me perguntando quais as chances de realmente perder um pacote, corrompê-lo ou entregá-lo fora de ordem na realidade, normalmente seria pela Internet entre dois hosts geograficamente distantes.

Essa pergunta provavelmente precisaria ser reduzida um pouco. Existem vários fatores, tanto no nível do aplicativo (tamanho e frequência dos pacotes) quanto nas limitações/tráfego de roteadores e switches ao longo do caminho.

Não consegui encontrar números concretos sobre isso, mas parece ser bastante baixo ... como menos de 5%.

Você pode estar interessado em O Relatório de Tráfego na Internet e possivelmente em páginas como this .

9
Matthew Sanders

A perda de pacotes ocorre por vários motivos. Principalmente, é causado por erros em links individuais e congestionamento de rede.

A perda de pacotes devido a erros no link é muito baixa, quando os links estão funcionando corretamente. Menos de 0,01% não é incomum.

A perda de pacotes devido ao congestionamento obviamente depende de quão ocupado o link está. Se houver capacidade disponível ao longo de todo o caminho, esse número será 0%. Mas à medida que a rede fica ocupada, esse número aumenta. Quando o controle de fluxo é feito corretamente, esse número não fica muito alto. Um par de pacotes perdidos geralmente é suficiente para que alguém reduza sua velocidade de transmissão o suficiente para impedir a perda de pacotes devido ao congestionamento.

Se a perda de pacotes atingir 1%, algo está errado. Isso pode ser um bug na maneira como o algoritmo de controle de congestionamento responde à perda de pacotes. Se ele continuar enviando pacotes na mesma taxa, quando a rede estiver congestionada e perdendo pacotes, a perda de pacotes poderá ser aumentada muito mais; 99% de perda de pacotes será possível se o software estiver se comportando mal. Mas isso depende dos tipos de links envolvidos. A Gigabit Ethernet usa contrapressão para controlar o fluxo; portanto, se o caminho da origem ao destino for um único segmento Gigabit Ethernet, o aplicativo de envio poderá simplesmente ficar mais lento e nunca ver a perda real de pacotes.

Para testar o comportamento do software em caso de perda de pacotes, sugiro duas simulações diferentes.

  1. Em cada pacote, solte-o com uma probabilidade de 10% e transmita-o com uma probabilidade de 90%
  2. Transmita até 100 pacotes por segundo ou até 100 KB por segundo e descarte o restante se o aplicativo enviar mais.
8
Kasper