Назад | Перейти на главную страницу

Копирование через SSH с помощью инструментов Putty происходит медленнее, чем через WinSCP

Загрузка с моего ПК с 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.

  1. Влияют ли ACK и WIN на скорость передачи?
  2. Что могло вызвать эту проблему?

Изменить: я тестировал с 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
  1. Может ли быть причиной флаг TCP Push?

Обновление - 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.