1405バイトを超えるファイルをコピーするとSCPがクラッシュするのはなぜですか? [コピー]

1405バイトを超えるファイルをコピーするとSCPがクラッシュするのはなぜですか? [コピー]

私のローカルコンピュータの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」(したがって大きなパケットを取得する場合)でも、中断されます。

関連情報