web-dev-qa-db-ja.com

大きなファイルをFTPするときにTCP接続タイムアウトを防ぐ方法は?

大きなファイルをインターネットからLinux VMにFTP(取得)できません。しばらくするとタイムアウトします。

実際のエラーは「制御接続からの応答を読み取れませんでした-タイムアウトしました。 "このエラーは、ファイルの適切なチャンクがすでに転送された後、数分後に発生します。

設定は次のとおりです。

 FTPクライアント:VMWare Player 3.0上のLinuxで実行されているncftpget 
 FTPサーバー:インターネット上の他の誰かのマシン、設定は不明
ゲストOS:Ubuntu 8.10 Linux 32ビット、 vmxnetおよびvmwareツールがインストールされています。
ホストOS:Vista 64ビット
ネットワーク:Linux VMはブリッジドNICを介してインターネットに接続します(NATも試しました)
 FTPモード:PASV 
  • VMWare Player 3.0からVirtualBox 3.0.xに切り替えましたが、うまくいきません。
  • また、NATからブリッジ仮想NICに変更しましたが、うまくいきませんでした

[〜#〜] update [〜#〜] Linux VMのNetstatとDIR-655ルーターの同等の管理ページの両方で、接続が有効であることが示されています(tcp 'ESTABLISHED ' 状態)。 Vistaには接続がまったく表示されません。接続状態がVM内でのみ管理されている場合、これは正常だと思います。

役に立つ場合に備えて、Vistaでのnetsh interface tcp show globalの出力を次に示します。

 C:\ Users\alex> netsh interface tcp show global 
アクティブ状態のクエリ中... 
 
 TCPグローバルパラメータ
 ---- ------------------------------------------ 
受信側スケーリング状態:有効
チムニーオフロード状態:無効
受信ウィンドウ自動チューニングレベル:非常に制限
アドオン輻輳制御プロバイダー:なし
 ECN機能:無効
 RFC 1323タイムスタンプ:無効
 **上記のautotuninglevel設定は、Windowsスケーリングヒューリスティックス
がローカル/ポリシー構成を上書きした結果です。
8
Alex R

トラブルシューティングの目的で、wgetまたはcurlを介して同じファイルをダウンロードしてみてください。 PEraは正しいと思います。NOOPコマンドはこれを防ぎ、おそらくwgetまたはcurlがそれらを送信するでしょう。

2
Josh

NATを使用している場合は、NATタイマーがあなたを切断している可能性があります。ホテルの部屋からマシンにsshし、し​​ばらくの間何もできない(5未満)時々分!)

# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time
# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes

それらを試してください。これにより、ソケットのアクティビティに関係なく、すべてのTCPストリームで毎分1回キープアライブが送信されます。

FTPクライアントは実際にはキープアライブを使用しない場合があることに注意してください。これは、アプリケーションが要求する必要があるものです。それが失敗した場合は、別のFTPクライアントをインストールするとうまくいくでしょう。 NetBSD FTPクライアント(lukemftp)が利用できるかもしれませんが、これは私が今まで見た中で最高のコマンドラインFTPクライアントです。

非アクティブのためにリモートエンドが接続を閉じている可能性もあります。もしそうなら、それは現実のかなり壊れた考えを持っています。これらのTCP上記のキープアライブハックで問題が解決しない場合は、クライアントが定期的にコマンド(NOOPなど)を送信する必要があるか、FTPサーバーの管理者がエンドを変更する必要があります。

6
Michael Graff

VMとFTPサーバーの間の途中にある任意のフィルタリングデバイスである可能性があります。ほとんどのファイアウォール(ホームルーターを含む)には、アイドルTCPセッションは、一定のタイムアウト後にリセットされます。

VM NICを(NATの代わりに)ブリッジモードに変更してホストOSを整理することができます。次に、FTPクライアントがNOOPコマンドを送信することを確認してください定期的にコマンドチャネルが開いています。コマンドセッションが閉じられていることがわかった場合、データ接続を閉じるファイアウォールがあります。データ接続がアイドル状態であるか、トラフィックを伝送しているかに関係なく...

HTH、
PEra

3
PEra

コマンドラインからこれを行っている場合は、「ハッシュ」を有効にしてみてください(「バイナリ」は私が常にオンにしているもう1つのものです)。これにより、制御ポートで十分なトラフィックが生成され、タイムアウトしないようにすることができます。

2
Peter

FTPは2つのソケットを使用します-1つは制御用、もう1つはデータ用です。

NAT VMのステートテーブル)が、そのソケットでの非アクティブのために制御接続のタイムアウトを引き起こしている可能性があります。

VMシステム上で「アクティブFTP」を有効にすることで、これを回避できる可能性があります。これにより、VMwareがFTPセッションをアクティブに監視し、データがまだ流れている限り、制御ソケットを存続させることができます。

1
Alnitak

FTPサーバーがVistaの場合、FTPサイトのプロパティに移動し、タイムアウトを15分(デフォルト)から増やします。転送しようとしているファイルのサイズはどれくらいですか?

0
Nasa