私のローカルコンピュータの1つからリモートコンピュータにファイルをコピーしようとしています。最大1405バイトサイズのファイルをコピーし、正常に動作します。大きなファイルをscpしようとすると、ファイルはコピーされますが、scpプロセスは中断され終了しません。シェルに戻るには、Ctrl-Cを押す必要があります。
FTPでも同様の動作を観察した。この問題の原因に関するアイデアはありますか?
答え1
これは@Konerakが指摘したようなMTU問題のように聞こえますが、これが私がテストした方法です:
ip link set eth0 mtu 1400
これにより、ネットワークインターフェイスで許可されるネットワークパケットサイズが一時的に1400に設定されますeth0
(名前を調整する必要があるかもしれません)。その後、システムはこのサイズより大きいパケットをネットワークに送信する前に断片化します。このように scp コマンドが修正された場合は、ネットワークで問題を検出するか、この醜い修正を永久に修正する必要があります。 ;)
答え2
MTUは通常1500Bです(イーサネット制限のため)。その1500Bのすべてが「データ」に使用されるわけではありません。いわゆるプロトコルオーバーヘッドは、これらの1,500個のオーバーヘッドの大部分を占めています。
- SCP(非圧縮)には65Bヘッダーが必要です。
- TCPには20-60Bヘッダーが必要です。
- IP には 20-60B ヘッダーが必要です。
これを考慮すると、ペイロードが1405Bに制限されることは驚くべきことではありません。
PS:Wiresharkを試してIPヘッダーを確認してください。パケット断片化を許可しますか?
答え3
私は悪いハードウェアのように聞こえます。 LANにシステムが1つしかない場合、イーサネットカードが不良になる可能性があります。 LAN上のすべてのシステムの場合は、ハブまたはルーターを確認してください。
答え4
関連するソースコンピュータとターゲットコンピュータの間には一種のトンネルがある。 TCPは接続を開くとき(ssh / scpで使用されます)MSSを送信し、途中でトンネリング(カプセル化を追加して利用可能な最大MTUを減らす)は、宛先に行く途中でそのMSSを透過的に変更する必要があります(その逆も同様)。 )。
一部のトンネル(VPN?)は私の役割を果たしていません。または、コンピュータのMSS設定が正しくありません。
コピーしたいマシンにsshを接続して空のディレクトリでlsを実行すると、同じ動作が表示されます。うまくいくでしょう。ただし、「cd/;ls -lR」(したがって大きなパケットを取得する場合)でも、中断されます。