Como medir e minimizar a perda de pacotes UDP

Como medir e minimizar a perda de pacotes UDP

Às vezes, enfrento quebra de voz ao ligar por meio de um aplicativo VOIP. Como todos os aplicativos VOIP usam UDP para transmissão de dados, existe alguma ferramenta no Linux para medir a quantidade de perda de pacotes e medir o desempenho da rede.

Qual poderia ser o motivo geral da perda de pacotes UDP e quais medidas preciso tomar quando houver muita perda de pacotes?

Responder1

Um dos principais culpados pela perda de UDP, especialmente em LANs, são os buffer overflows. Isso pode acontecer no switch ou nos servidores de envio ou recebimento. Um mecanismo que você pode usar no Linux para verificar a perda de pacotes é executar o seguinte comando:

watch -n 1 -d 'cat /proc/net/udp'

Isso mostrará uma saída semelhante à seguinte, onde a última coluna é o número de pacotes descartados:

Every 1.0s: cat /proc/net/udp                                                                                                                                 Mon Sep 28 15:01:00 2015

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
11362: 00000000:3443 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 18224 2 ffff880808040000 0
19543: 00000000:D438 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 3809742 2 ffff8808060c8400 0
30819: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 12644 2 ffff88100f2b0400 0

Você pode então tentar vários truques diferentes para tentar resolver isso (novamente usando o Linux como exemplo):

  • garantir que o aplicativo que consome os dados tenha CPU suficiente disponível,
  • garantir que os threads que realizam a E/S estejam o mais próximo possível do dispositivo de rede
  • certifique-se de que os tamanhos dos buffers udp sejam grandes o suficiente para acomodar os dados (novamente, você pode observar a saída do comando watch para ver se as colunas tx_queueou aumentam) e, em seguida, aumente os buffers udp usando sudo , ou , ou (observe que o xxx ,aaaa,zzz são definidosrx_queuesysctl -w 'net/ipv4/udp_mem=xxx yyy zzzz'sysctl -w 'net/core/rmem_default=????'sysctl -w 'net/core/wmem_default=????'aqui

Numa autopromoção desavergonhada, criei um produto chamadoGerenciador de threads Pontus Visionque continuamente ajusta isso automaticamente.

Responder2

Qual poderia ser o motivo geral para a perda de pacotes UDP

Congestionamento (muitos pacotes) com falta de QOS (pacotes aleatórios descartados, VoIP não tratado com prioridade) e/ou equipamento defeituoso (qualidade da linha etc.) Para o primeiro, obtenha equipamento compatível com QOS, para o último verifique as linhas (hardware, interruptores, tanto faz) por serem ruins.

Para uma conexão com a Internet, você precisa de roteadores QOS em ambas as extremidades - o que você não terá (a menos que o VoIP seja oferecido pelo seu provedor, ele provavelmente terá a infraestrutura instalada). Dito isto, como o seu canal descendente é normalmente muito maior que o canal ascendente, um roteador local que prioriza apenas o canal descendente normalmente é "bom o suficiente".

No entanto, a má qualidade da linha é um problema difícil de resolver.

Responder3

Se você está sofrendo perda de pacotes UDP, é quase certo que também está sofrendo perda de pacotes TCP. A diferença é que o TCP retransmitirá pacotes perdidos e o UDP não. Os aplicativos VoIP não podem retransmitir porque, se o fizessem, a informação não seria mais útil.

Presumo que suas chamadas VoIP sejam feitas pela Internet. QoS pode ser necessário, mas não adiantará nada se sua conexão com a Internet não estiver funcionando corretamente. Usa istoteste de perda de pacotespara conferir. Ele dirá onde está acontecendo a perda de pacotes, ou seja, no ISP ou no seu site local.

Se encontrar problemas em seu site local, é hora de verificar seu modem a cabo ou DSL para obter uma boa relação de ruído de sinal, potência de saída e atenuação (DSL).

informação relacionada