
Я иногда использую Netcat для копирования файлов или образов дисков по сети. Хотя он и выполняет свою работу, я всегда чувствовал, что он всегда был на медленной и вялой стороне, независимо от использования ssh, без ssh, со сжатием или без сжатия.
Я начал тестировать udpcast (http://www.udpcast.linux.lu/cmd.html) и, кажется, он как минимум в 5 раз (или больше) быстрее. Udpcast со сжатыми каналами иногда во много раз быстрее, чем netcat без сжатых каналов. Сжатие с Nc обычно замедляет мою локальную сеть, поэтому я обычно избегаю его. Потому что моя сеть обычно работает на скорости 1gbs
Вот несколько примеров без ssh и без сжатия, которые я использую
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
Вот несколько основных примеров, которые я использую. Естественно, я также использую сжатые каналы. Во всех случаях udpcast будет работать быстрее Netcat минимум в 5 раз, и мне интересно, почему так происходит.
Я даже склонен думать, что Udpcast с каналами — хорошее дополнение для сетевой передачи файлов.
Вот udpcast с tar и untar pipe для 17,5 GiB по сети
реальный 9m26.186s
пользователь 0m1.247s
система 0m23.836s
А вот cp через Samba из Linux в Windows
real 9m17.729s
user 0m0.311s
sys 0m11.044s
Можно ли поймать производительность Udpcast с помощью Netcat?
Причина, по которой я иногда спрашиваю, это то, что некоторые дистрибутивы теперь могут предлагать Udpcast.
решение1
nc
по умолчанию используется TCP.
TCP начинает с малого "размера окна" и набирает скорость во время соединения, поскольку максимальный размер окна определяется как больший. Кроме того, TCP отправляет дополнительный трафик для поддержания соединений, т. е. ACK-пакеты. Это необходимо для поддержки понятия "соединения" и надежной, упорядоченной доставки.
UDP не поддерживает соединения или надежную доставку, поэтому никаких дополнительных хлопот не возникает, и поэтому он работает быстрее.
Я не особо экспериментировал udpcast
, но если в нем нет механизмов обнаружения ошибок, то вы рискуете получить некачественную копию переданного вами пакета, если ваша сеть решит отбросить пакет.
nc
имеет -u
опцию IIRC для отправки/получения с использованием UDP вместо TCP.