Hello,
Woher weiß der Client, wie viele Segmente es insgesamt gibt?
Das weiss er nicht. Theoretisch sind das unendlich viele, bei einer Anwendung die unendlich läuft und zyklisch Daten empfängt.
Das betrifft die TCP-Socket-Verbindung. Die ist der Größe nach unlimitiert, hat aber üblicherweise ein Timeout. Wenn länger nix kommt, wird nachgefragt und/oder die Verbindung geschlossen.
Für die einzelne Datenübertragung (ich will das hier ruhig nochmal "Datei" nennen), wird schon vereinbart, wieviele Bytes der Sender zu übertragen wünscht. Der Empfänger muss dafür i.d.R. genügend Platz reservieren, weil nicht sichergestellt ist, in welcher Reihenfolge die Pakete zur Verfügung stehen werden. Erst wenn alle Pakete vollständig vorhanden sind, kann die Datei geschlossen werden. Es können aber alle Pakete bis zur Lücke aus dem Ringpuffer an das OS und damit vermutlich auch an die Applikation ausgeliefert werden. Das ist Sache des NICs. Übliche Größen sind hier heute zwischen 1 und 4 MB.
Wie das nun genau abläuft, dass da mehrere Verbindungen gleichzeitig abgewickelt werden können, weiß ich auch nicht mehr.
Wenn der zugewiesene Puffer im NIC überläuft, muss die Verbindung (für diese eine Übertragung) abgebrochen werden und der (Teil)Puffer wird geleert.
Die TCP-Sockets (aufgabe der OSse) sind davon aber erst einmal nicht betroffen. Die bleiben empfangs- und sendebereit.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg