web-dev-qa-db-ja.com

PuTTYツールを介したSSH経由のコピーは、WinSCPを介した場合よりも遅い

PuTTYツールを使用して、Windows PC(1)から別の都市のUbuntuマシン(2)にアップロードするのが遅い。

私はこれをOpenVPNトンネル経由で、(2)へのポート転送を介してテストしました。 SSH(plink.exe)またはpscp.exeを介してrsync(Unison)を使用すると、WinSCP(SCPまたはSFTP)で(1)->(2)方向にコピーするよりも70%遅いことがわかります。ダウンロードの速度は両方とも同じです。

ここにいくつかのデータがあります:

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が2倍以上の量のパッケージを同時に送信します。

送信スタイル:
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)、1 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も選択しています。

もう1つの違いは、WINとACKの値です。

  1. ACKとWINは転送速度に影響しますか?
  2. この問題の原因は何ですか?

編集:CygwinとOpenSSHでテストしました。WinSCPと同じ速度です。 WinSCPとPuTTYを比較する2つの画像を作成しました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フラグが理由かもしれませんか?

更新-4月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 = commercialVPN at my home Lan、cLAN = my Office Lan、(3)->(4)= copy from office laptop from datacenter server。ここでも、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)

私はもっ​​とテストしたいと思いますが、何をテストするかわからないので、試して、監視してください。

7
BadTenMan

WinSCPはPuTTYコードを内部で使用します。したがって、選択した暗号化アルゴリズムに違いはありません。

WinSCPはPuTTYコードに加えていくつかの最適化を採用していますが、特により大きな内部およびネットワークバッファーです。これは、特定の場合にスループットを向上させるのに役立ちます。

いくつかの参照:
https://winscp.net/tracker/615
https://winscp.net/tracker/69
https://winscp.net/tracker/127
https://winscp.net/tracker/1295


「TCPプッシュ」フラグについて:

これはおそらく、WinSCPがソケットで Nagleのアルゴリズム を無効にしているのに対し、PuTTY転送ツールは無効にしていないためです(PuTTY自体はそうです)。

両方のアプリケーションがデータをソケットにできるだけ早くプッシュするため、ネットワーク層がパケットを遅延させる理由がないようにする必要があるため、合理的なネットワークでは、これが問題にならないことを願っています。そして、私はこれをテストしたときにどんなネットワークにも間違いはありません。しかし、私はそれが違いを生むと一部のユーザーから報告があります。

NaTgleのアルゴリズムはPuTTY端末構成で切り替えることができますが、PuTTY転送ツール(psftpおよびpscp)では切り替えることができません。常に有効になっています。
https://the.earth.li/~sgtatham/PuTTY/latest/htmldoc/Chapter4.html#config-nodelay

7
Martin Prikryl

FAQ-WINSCP SPEED 、PLUS-WINSCPを最新バージョンに更新してください。

見積もり:

SSHを使用する場合、WinSCPのファイル転送は暗号化され、CPUに負荷がかかります。通常、BlowfishはAESよりもはるかに高速です(BLOWFISHを試してください)。圧縮をオフにした場合、以前にオンにしたことがある場合も役立ちます。

接続遅延によって速度が抑制される場合は、SFTPではなくSCPプロトコルを使用すると役立つことがあります。 SCPはレイテンシーの影響をあまり受けません。この場合、圧縮をオンにすると役立つことがあります。

0
T.Todua