Copiar através de SSH via ferramentas Putty é mais lento do que via WinSCP

7

Fazer o upload do meu PC Windows (1) para minha máquina Ubuntu (2) em outra cidade usando as ferramentas do PuTTY é lento.

Eu testei isso em túnel OpenVPN e via encaminhamento de porta para (2). Acontece que usar o rsync (Unison) via SSH (plink.exe) ou pscp.exe é 70% mais lento do que copiar com WinSCP (SCP ou SFTP) na direção (1) - > (2). O download tem as mesmas velocidades para ambos.

Aqui estão alguns dados:

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 tem quase exatamente as mesmas velocidades que o pscp.

Eu inspecionei meus pacotes via Wireshark, mas não parece nada especial. Só que o WinSCP envia mais que o dobro da quantidade de pacotes ao mesmo tempo.

Enviar estilo:
WinSCP: 2 ou 3 SSH1 para o servidor, 1 para trás (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 para o servidor, 2 de volta (ACK) e um SSH2 de volta

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

A máquina Ubuntu não está fornecendo o SSH1, o WinSCP também escolheu o SSH2 em sua configuração.

Outra diferença são os valores WIN e ACK

  1. O ACK e o WIN têm alguma influência na velocidade de transferência?
  2. O que poderia estar causando esse problema?

Edit: Eu testei com Cygwin e OpenSSH: mesmas velocidades que o WinSCP. Eu fiz duas fotos comparando informações TCP WinSCP e Putty, estas são as diferenças:

                   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. O sinalizador TCP Push pode ser o motivo?

Atualização - 20 de abril.

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 = commercialVPN na minha casa Lan, cLAN = meu Office Lan, (3) - > (4) = cópia do laptop do escritório para o servidor do datacenter. Aqui o pscp também tem uma velocidade menor que o winscp!

A ordem do pacote para o pscp é muito simples. Depois de inspecionar os pacotes, o estilo é mais parecido com

...
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
...

Isso é muito firme. O WinSCP, em vez disso, faz ACKs para pacotes muito mais antigos, gerando assim mais pacotes em vôo e maior taxa de transferência, já que parece não esperar por um ACK até o envio dos próximos pacotes.

Parece que isso é de alguma forma causado por Putty esperando pelo ACK em vez de apenas enviar mais alguns pacotes (o que o winscp faz).

Outros testes:

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)

Eu ficaria feliz em testar mais, mas não sei o que testar, testar e monitorar.

    
por BadTenMan 16.04.2015 / 22:51

4 respostas

7

O WinSCP usa o código PuTTY internamente. Portanto, não deve haver diferença em um algoritmo de criptografia selecionado.

Embora WinSCP emprega algumas otimizações em cima do código PuTTY, particularmente maiores buffers internos e de rede. Isso ajuda em certos casos a alcançar um melhor rendimento.

Algumas referências:
link
link
link
link

Em relação ao sinalizador "TCP Push":

Isso é provável porque o WinSCP desativa o algoritmo de Nagle no soquete, enquanto as ferramentas de transferência do PuTTY não (o próprio PuTTY faz).

Espero que em qualquer rede razoável, isso não faça nenhuma diferença, já que os dois aplicativos enviam dados ao soquete o mais rápido possível, portanto, a camada de rede não deve ter motivos para atrasar os pacotes. E eu definitivamente não vejo nenhuma diferença em qualquer rede testada isso. Mas tenho relatos de alguns usuários de que isso faz diferença.

Enquanto você pode alternar o algoritmo de Nagle na configuração do terminal do PuTTY, você não pode alterná-lo nas ferramentas de transferência do PuTTY (psftp e pscp), ele está sempre ativado. link

    
por 17.04.2015 / 08:26
0

O melhor aconselha dado em FAQ - WINSCP SPEED , PLUS - atualize o WINSCP para a versão mais recente.

citação:

When using SSH, file transfers in WinSCP are encrypted and it's CPU intensive. Blowfish is usually a lot faster than AES (so,try BLOWFISH). It may also help if you turn off compression, if you have turned it on before.

In case the speed is throttled by connection latency, it may help if you use SCP protocol instead of SFTP. SCP is less affected by latency. In this case, it may help if you turn on compression.

    
por 22.07.2016 / 15:21
-1

O pscp não possui um switch -c para selecionar uma cifra como scp no * nix. Para contornar isso, você pode salvar seu host de destino como uma sessão putty, que permite alterar a ordem de seleção de cifras. Blowfish tende a dar melhor desempenho que o padrão AES.

    
por 17.04.2015 / 01:15
-2

O WinSCP em si (a menos que tenham sido corrigidos na última versão?) é terrivelmente lento comparado com outros, eu recomendaria o Filezilla sobre o WinSCP, MUITO mais rápido para transferências de arquivos ssh comparado ao winscp.

    
por 18.04.2015 / 12:51