答え1
この症状は、クライアント側の受信処理のボトルネックがあることを明確に示しています。
トレースは、クライアント ネットワーク スタック (明らかに LwIP) の受信バッファがいっぱいになっていることを示しています。具体的には、一連のパケットがサーバーから受信されるにつれて、クライアントからの確認応答のウィンドウ サイズが縮小し、受信バッファが完全にいっぱいになり、データの送信を停止するように要求する「ZeroWindow」がクライアントからサーバーに送信されます。
これは通常、ソケットから読み取るアプリケーションが、ネットワーク スタックが到着するパケットに対応できるほどの速度で受信バッファーを排出していないことを示します。
サーバーからの頻繁な再送信とクライアントからの遅延した ACK の組み合わせは、クライアントの状態がネットワーク スタック内の下位レベルの受信パケット処理にも悪影響を及ぼしていることを示唆しています。
クライアント ホストが組み込みデバイスであると述べ、アプリが lwip_read() でブロックされているように見えるともコメントしています。待機は、別の IO または CPU リソース、またはスケジュールのボトルネックによって、読み取りスレッドがファイル転送に追いつくのに十分な CPU 時間を確保できない可能性があることを示唆しています。ただし、遅延した ACK は、より広範な問題がある可能性を示唆しています。組み込みデバイスについての詳細がわからないと、さらにトラブルシューティングを行うことは困難です。
LwIPには、ネットワーク呼び出しのサービスに関する特別な制約があり、実装に適用される可能性があります。このLwIPの落とし穴のページ。
この情報が問題解決に役立つことを願っています。