Загрузка с моего ПК с Windows (1) на мою машину Ubuntu (2) в другом городе с использованием инструментов PuTTY выполняется медленно.
Я тестировал это через туннель OpenVPN и через переадресацию порта на (2). Оказывается, использование rsync (Unison) через SSH (plink.exe) или pscp.exe на 70% медленнее, чем копирование с помощью WinSCP (SCP или SFTP) в направлении (1) -> (2). Скорость загрузки одинакова для обоих.
Вот некоторые данные:
link protocol software source target max speed (kb/s)
theoretical speed 4.5mbits 1 2 560
theoretical speed 6.0mbits 2 1 750
VPN SFTP pscp.exe 1 2 180 <- not ok
VPN SFTP pscp.exe 2 1 640
VPN SFTP winscp 1 2 570 <- ok
VPN SFTP winscp 2 1 670
PF SFTP pscp.exe 1 2 185 <- not ok
PF SFTP pscp.exe 2 1 700
PF SFTP winscp 1 2 600 <- ok
PF SFTP winscp 2 1 680
Unison имеет почти такую же скорость, что и pscp.
Я проверил свои пакеты через Wireshark, но вроде ничего особенного. Просто WinSCP отправляет в два раза больше пакетов за одно и то же время.
Стиль отправки:
WinSCP: 2 или 3 SSH1 на сервер, 1 назад (ACK)
No. Time Source Destination Protocol Length Info
797 1.003187000 10.8.0.6 10.8.0.10 TCP 54 22?51739 [ACK] Seq=5089 Ack=496673 Win=7079 Len=0
798 1.003208000 10.8.0.10 10.8.0.6 SSH 1241 Client: Encrypted packet (len=1187)
799 1.003211000 10.8.0.10 10.8.0.6 SSH 1241 Client: Encrypted packet (len=1187)
800 1.008147000 10.8.0.6 10.8.0.10 TCP 54 22?51739 [ACK] Seq=5089 Ack=499047 Win=7079 Len=0
801 1.008166000 10.8.0.10 10.8.0.6 SSH 1241 Client: Encrypted packet (len=1187)
802 1.008180000 10.8.0.10 10.8.0.6 SSH 1241 Client: Encrypted packet (len=1187)
803 1.008357000 10.8.0.6 10.8.0.10 TCP 54 22?51739 [ACK] Seq=5089 Ack=501421 Win=7079 Len=0
pscp: 4 SSH2 на сервер, 2 назад (ACK) и один SSH2 назад
No. Time Source Destination Protocol Length Info
210 11.000452000 10.8.0.6 10.8.0.10 TCP 54 22?51744 [ACK] Seq=6178 Ack=97187 Win=185856 Len=0
211 11.005520000 10.8.0.6 10.8.0.10 TCP 54 22?51744 [ACK] Seq=6178 Ack=98989 Win=185856 Len=0
212 11.005585000 10.8.0.10 10.8.0.6 SSHv2 1241 Client: Encrypted packet (len=1187)
213 11.005589000 10.8.0.10 10.8.0.6 SSHv2 1241 Client: Encrypted packet (len=1187)
214 11.005591000 10.8.0.10 10.8.0.6 SSHv2 1241 Client: Encrypted packet (len=1187)
215 11.005592000 10.8.0.10 10.8.0.6 SSHv2 669 Client: Encrypted packet (len=615)
216 11.006578000 10.8.0.6 10.8.0.10 SSHv2 134 Server: Encrypted packet (len=80)
217 11.032385000 10.8.0.6 10.8.0.10 TCP 54 22?51744 [ACK] Seq=6258 Ack=101363 Win=185856 Len=0
218 11.037768000 10.8.0.6 10.8.0.10 TCP 54 22?51744 [ACK] Seq=6258 Ack=103165 Win=185856 Len=0
Машина Ubuntu не предоставляет SSH1, WinSCP также выбрал SSH2 в своей конфигурации.
Еще одно отличие - значения WIN и ACK.
Изменить: я тестировал с Cygwin и OpenSSH: те же скорости, что и WinSCP. Я сделал две картинки, сравнивая информацию о WinSCP и Putty TCP, вот различия:
Putty WinSCP
TCP Segment Len: 615 1187
TCP Push: Set Not set
Window size value 4014 4118
calc. Window size 16056 16472
[Bytes in flight:] 8352 91399
Обновление - 20 апреля.
link protocol software source target max speed (kb/s)
cVPN SFTP pscp.exe 3 4 250 <- not ok
cVPN SFTP winscp 3 4 580 <- ok
cLAN SFTP pscp.exe 3 4 10200 <- maybe not ok
cLAN SFTP winscp 3 4 11500 <- as expected
cVPN = коммерческийVPN на моем домашнем LAN, cLAN = my Office Lan, (3) -> (4) = копирование с офисного ноутбука на сервер центра обработки данных. Здесь pscp также имеет меньшую скорость, чем winscp!
Порядок пакетов для pscp слишком прост. После проверки пакетов стиль больше похож на
...
8 client data (100% fill)
9 client data (100%)
10 client data (60%)
11 server data?
12 server ACK to packet #1
13 server ACK to packet #3
14 client ACK to packet #11
...
Это очень стабильно. WinSCP вместо этого выполняет ACK для гораздо более старых пакетов, тем самым генерируя больше пакетов в полете и более высокую пропускную способность, поскольку кажется, что не нужно ждать ACK до отправки следующих пакетов.
Похоже, это каким-то образом вызвано тем, что Putty ожидает ACK вместо того, чтобы просто отправлять еще несколько пакетов (что делает winscp).
Другие тесты:
ctcp (de)activated - no change
rtt to ack winscp = 100ms
irtt winscp no info
rtt to ack pscp = 50ms
irtt pscp = 40ms
winscp: window scaling status: unknown (-1)
pscp: window scaling status: disabled(-2)
Я был бы рад протестировать больше, но не знаю, что тестировать, пробовать и контролировать.
WinSCP внутренне использует код PuTTY. Таким образом, не должно быть никаких различий в выбранном алгоритме шифрования.
Хотя WinSCP применяет некоторые оптимизации поверх кода PuTTY, особенно большие внутренние и сетевые буферы. В некоторых случаях это помогает повысить пропускную способность.
Некоторые ссылки:
https://winscp.net/tracker/615
https://winscp.net/tracker/690
https://winscp.net/tracker/1273
https://winscp.net/tracker/1295
Что касается флага «TCP Push»:
Вероятно, это потому, что WinSCP отключает Алгоритм Нагла на сокете, а инструменты передачи PuTTY - нет (сам PuTTY делает).
Я надеюсь, что в любой разумной сети это не должно иметь никакого значения, поскольку оба приложения загружают данные в сокет как можно быстрее, поэтому у сетевого уровня не должно быть причин для задержки пакетов. И я точно не вижу разницы ни в одной сети при тестировании этой. Но у меня есть сообщения от некоторых пользователей, что это имеет значение.
Хотя вы можете переключать алгоритм Нагла в конфигурации терминала PuTTY, вы не можете переключать его в инструментах передачи PuTTY (psftp и pscp), он всегда включен.
https://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter4.html#config-nodelay
Лучшие советы по FAQ - СКОРОСТЬ WINSCP, PLUS - обновить WINSCP до последней версии.
цитата:
При использовании SSH передача файлов в WinSCP зашифрована и требует большой нагрузки на ЦП. Blowfish обычно намного быстрее, чем AES (так что попробуйте BLOWFISH). Также может помочь отключение сжатия, если оно было включено раньше.
В случае, если скорость ограничена задержкой соединения, может помочь использование протокола SCP вместо SFTP. На SCP меньше влияет задержка. В этом случае может помочь включение сжатия.
Pscp не имеет переключателя -c для выбора шифра, например scp на * nix. Чтобы обойти это, вы можете сохранить целевой хост как сеанс замазки, который позволяет вам изменять порядок выбора шифров. Blowfish обычно дает лучшую производительность, чем AES по умолчанию.
Сам WinSCP (если они не исправлены в последней версии?) Ужасно медленный по сравнению с другими, я бы рекомендовал Filezilla вместо WinSCP, НАМНОГО быстрее для передачи файлов ssh по сравнению с winscp.