WindowsコマンドラインFTPプログラムを使用して、2つのWindowsサーバー間で大きなファイル(〜130 MB)を転送するスケジュールされたタスクがあります。非常に遅く(約30分かかります)、転送が完了する前に終了することがあります。サーバーは2003(送信)と2008(受信)です。
FileZillaのGUIを使用してファイルを手動で転送すると、実行速度が大幅に向上し、数分で完了します。ただし、これを自動的に実行する必要があり、FileZillaをスクリプト化できないため、このアプローチを使用することはできません。
また、Windows 2003ファイアウォールを無効にすると、コマンドラインFTPが突然はるかに高速になり、FileZillaと同じ速度に達することにも気づきました。
そのため、転送の前後にファイアウォールを無効/有効にする回避策があるようです。しかし、広範囲にグーグルした後、これは一般的な問題ではないようで、どこかで何かが間違って構成されているように感じます。
ファイアウォールを無効にすると速度が劇的に向上する理由を誰かが明らかにすることはできますか?そして、なぜFileZillaはコマンドラインFTPよりも速いのですか(ファイアウォールが有効になっている場合)?
パケットを確認し、FTPのものを見つけます。
server1.domain.com:12345 -> server2.domain.com:21
ICMPはインターネットホストの要件です。管理者は、「セキュリティ上のリスクがあると聞いた」ために、すべてのICMPをブロックすることがあります。ただし、ICMPはオプションではなく、TCPはICMPに依存しています。(少なくとも、 'フラグメンテーションが必要です' 許可する必要があります。)
問題は、コマンドラインFTPがアクティブモードFTPを使用することです。
Filezillaは自動的にパッシブモードのftpに切り替わります。これは、ファイアウォールにはるかに適しています。
コマンドラインFTPはアクティブのみをサポートしているため、そこで立ち往生しています。
コマンドラインからパッシブモードをサポートするftpの代替ユーティリティを使用します(ニーズを満たす可能性のあるfilezillaのコマンドラインオプションがあります)。