Die Symptome zeigen eindeutig, dass es einen Engpass bei der Verarbeitung von Clients gibt.
Die Ablaufverfolgung zeigt, dass sich der Empfangspuffer im Client-Netzwerkstapel (LwIP anscheinend) füllt. Insbesondere die Fenstergröße in Bestätigungen des Clients nimmt ab, wenn eine Reihe von Paketen vom Server empfangen wird, bis der Empfangspuffer vollständig gefüllt ist und ein " ZeroWindow "wird vom Client an den Server gesendet, um anzufordern, dass keine Daten mehr gesendet werden.
Dies weist in der Regel darauf hin, dass das Lesen der Anwendung aus dem Socket den Empfangspuffer nicht schnell genug entleert, damit der Netzwerkstapel mit den ankommenden Paketen mithalten kann.
Die häufigen Neuübertragungen vom Server in Kombination mit verzögerten ACKs vom Client legen nahe, dass die Bedingungen auf dem Client auch die untergeordnete Empfangspaketverarbeitung im Netzwerkstapel negativ beeinflussen.
Sie haben erwähnt, dass der Client-Host ein eingebettetes Gerät war, und kommentierte außerdem, dass Ihre App anscheinend bei lwip_read () blockiert ist. Das Warten lässt darauf schließen, dass eine andere E / A- oder CPU-Ressource oder ein Engpass für die Zeitplanung möglicherweise dazu führt, dass der gelesene Thread nicht genügend CPU-Zeit erhält, um mit der Dateiübertragung Schritt zu halten. Die verzögerten ACKs deuten jedoch darauf hin, dass möglicherweise ein breiteres Problem vorliegt. Ohne mehr über das eingebettete Gerät zu wissen, ist es schwierig, weitere Probleme zu beheben.
Für LwIP gelten außerdem bestimmte Einschränkungen in Bezug auf die Bearbeitung von Netzwerkanrufen, die möglicherweise für Ihre Implementierung gelten. Weitere Informationen finden Sie auf dieser Seite .
Ich hoffe, dass diese Informationen zur Lösung Ihres Problems hilfreich sind.