Por que o Udcast é muitas vezes mais rápido que o Netcat?

Por que o Udcast é muitas vezes mais rápido que o Netcat?

Eu uso o Netcat de vez em quando para copiar arquivos ou imagens de disco pela rede. Embora ele faça o trabalho, sempre senti que estava sempre lento, independentemente de usar ssh, sem ssh, compactação ou sem compactação.

Comecei a testar o udpcast (http://www.udpcast.linux.lu/cmd.html) e parece ser pelo menos 5 vezes (ou mais) mais rápido. O Udpcast com pipes compactados às vezes é muitas vezes mais rápido que o netcat sem pipes compactados. A compactação com Nc geralmente fica mais lenta na minha rede local, então geralmente a evito. Porque minha rede geralmente funciona a 1GBs

Aqui estão alguns exemplos sem ssh e sem compactação que eu uso

dd if=somedisk |pv|nc -l -p 9999  
nc networkaddr 9999|pv >./disk.img  


udp-sender --full-duplex --file /dev/somedisk
udp-receiver --file ./disk.img

Estes são alguns exemplos básicos que uso. Naturalmente eu também uso tubos comprimidos. Em todos os casos, o udpcast terá desempenho mínimo de 5x na velocidade do Netcat e estou me perguntando por que isso acontece.

Estou até inclinado a pensar que Udpcast com pipes é um bom complemento para transferência de arquivos em rede.

Aqui udpcast com tar e untar pipe para 17,5 GiB na rede

real 9m26.186s
usuário 0m1.247s
sys 0m23.836s

E aqui está o cp sobre Samba do Linux para o Windows
real 9m17.729s
usuário 0m0.311s
sys 0m11.044s

É possível capturar o desempenho do Udpcast com o Netcat?
A razão pela qual estou perguntando às vezes é que alguma distro agora pode oferecer Udpcast.

Responder1

ncpor padrão usa TCP.

O TCP começa com um “tamanho de janela” baixo e ganha velocidade durante uma conexão à medida que o tamanho máximo da janela é determinado como maior. Além disso, o TCP envia tráfego extra para manter as conexões, ou seja, pacotes ACK. Isto é necessário para apoiar a noção de uma “conexão” e de uma entrega ordenada e confiável.

O UDP não oferece suporte a conexões ou entrega confiável, portanto, não existe nenhuma bagagem extra e, portanto, é mais rápido.

Não brinquei udpcastmuito, mas se não houver nenhum mecanismo de detecção de erros, você corre o risco de não ter uma boa cópia do que transmitiu se sua rede decidir descartar um pacote.

nctem uma -uopção IIRC para enviar/receber usando UDP em vez de TCP.

informação relacionada