[TCP/IP]Zeitpunkt eines ACKs

Herakles

Profifragensteller
Moin!

Wann und von "wem" wird ein TCP-Acknowledge generiert?

Die Idee hinter meiner Frage ist, ob ein ACK wirklich erst dann versendet wird, wenn die Anwendung, die mit einem read(2) Daten liest, die Daten bekommen hat oder schon vorher.

TCP ist ja bekanntlich Layer 3 und demzufolge müsste das ACK schon versendet werden, bevor die Anwendung die Daten erhalten hat.

Aber was geschieht, wenn das ACK versendet wird, die Anwendung das Paket aber nicht erhalten hat(aus welchen Gründen auch immer). Wird dann die Nachricht so lange im Puffer vorgehalten, bis sie von der Anwendung abgeholt wurde?

Für Tipps bin ich sehr dankbar.

Viele Grüße
Herakles
 

Salve.

Wann und von "wem" wird ein TCP-Acknowledge generiert?

Client: SYN
Server: SYN ACK
Client: ACK

Die Idee hinter meiner Frage ist, ob ein ACK wirklich erst dann versendet wird, wenn die Anwendung, die mit einem read(2) Daten liest, die Daten bekommen hat oder schon vorher.

TCP ist ja bekanntlich Layer 3 und demzufolge müsste das ACK schon versendet werden, bevor die Anwendung die Daten erhalten hat.

connect(2) stellt die Verbindung her, d.h. der Handshake erfolgt vor write(2) oder read(2). Also wie Du vermutest. Sollte man mit tcpdump auch sehen können.

Aber was geschieht, wenn das ACK versendet wird, die Anwendung das Paket aber nicht erhalten hat(aus welchen Gründen auch immer). Wird dann die Nachricht so lange im Puffer vorgehalten, bis sie von der Anwendung abgeholt wurde?

Dazu habe ich folgendes gefunden: http://stackoverflow.com/questions/...way-handshake-in-tcp-and-unix-listen-function

Hoffe, dass das hilfreich ist.
 
Das hilft auf jeden Fall! Genau nach sowas hatte ich im Netz gesucht, im Gegensatz zu Dir aber nichts gefunden.

Danke!
 
Zurück
Oben