答案1
這些症狀清楚地表明存在客戶接收處理瓶頸。
追蹤顯示客戶端網路堆疊(顯然是LwIP)中的接收緩衝區正在填充- 具體來說,隨著從伺服器接收到一系列資料包,客戶端確認中的視窗大小正在縮小,直到接收緩衝區完全填滿並出現“ ZeroWindow”從客戶端發送到伺服器以請求其停止發送資料。
這通常表明從套接字讀取的應用程式沒有足夠快地耗盡接收緩衝區,無法讓網路堆疊跟上到達的資料包。
伺服器的頻繁重傳以及客戶端的延遲 ACK 表明客戶端的狀況也會對網路堆疊中較低層級的接收資料包處理產生負面影響。
您提到客戶端主機是嵌入式設備,並且還評論說您的應用程式似乎在 lwip_read() 處被阻止。等待表明另一個 IO 或 CPU 資源或調度瓶頸可能會阻止您的讀取線程獲得足夠的 CPU 時間來跟上檔案傳輸。然而,延遲的 ACK 表明可能存在更廣泛的問題。如果不了解有關嵌入式設備的更多信息,就很難進一步排除故障。
LwIP 還具有與服務網路呼叫相關的特殊限制,這些限制可能適用於您的實作 - 請參閱這個 LwIP 陷阱頁面。
我希望這些資訊有助於解決您的問題。