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
- O ACK e o WIN têm alguma influência na velocidade de transferência?
- 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
- 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.