Ist die Ankunft von FIN-Paketen garantiert?

Ist die Ankunft von FIN-Paketen garantiert?

Beim 4-Wege-Handshake haben wir Folgendes:

FIN ------->
<------- ACK
<---x--- FIN (what if this packet is lost?)
ACK ------->

Was passiert, wenn das dritte Paket verloren geht? Wird es erneut gesendet? Beachten Sie, dass das Programm bis zum Senden des dritten Pakets wahrscheinlich den Socket zerstört hat und daher nichts mehr senden kann!

Antwort1

Die kurze Antwort lautet: Es gibt keine Garantie dafür, dass Pakete ankommen. Eine Reihe von Bedingungen kann dazu führen, dass Pakete während der Übertragung verloren gehen oder verloren gehen. TCP enthält Wiederholungsregeln, um sicherzustellen, dass die Daten ankommen.

Ihr Szenario ist eine halb geschlossene Verbindung. Eine Seite schließt die Verbindung und kann nur Daten lesen, bis die andere Seite die Verbindung schließt.

FIN ------>
<------ ACK

Die Seite, die das FIN-Paket sendet, durchläuft beim Schließen der Verbindung die Zustände FIN_WAIT1, FIN_WAIT2 und TIME_WAIT. Die Seite, die das FIN-Paket empfängt, wechselt in den Zustand CLOSE_WAIT. Wenn sie die Verbindung schließt, wiederholt sie die FIN-Pakete gemäß ihren Wiederholungsregeln, bis sie eine ACK empfängt oder eine Zeitüberschreitung eintritt. Bis das zweite FIN gesendet wird, befindet sich die Verbindung in einem halb geschlossenen Zustand.

<------ FIN
ACK ------>

Verbindungen können mit 3 Paketen geschlossen werden. Diese sind in den Protokolldumps, die ich sehe, üblich. In einigen Fällen ist die Antwort auf das erste FIN ein RST (Reset) und das letzte ACK wird durch ein RST ersetzt.

FIN ------>
<------ FIN,ACK
ACK ------>

In einigen Fällen wird anstelle des ACK ein RST (Reset) gesendet und das letzte ACK durch ein RST ersetzt.

FIN ------>
<------ RST
RST ------>

Aufgrund von Netzwerkverzögerungen ist es möglich, dass beide Enden eine aktive Verbindung schließen. In diesem Fall können die ACK-Pakete in beliebiger Reihenfolge zugestellt werden.

<------ FIN
FIN ------>
<------ ACK
ACK ------>

Antwort2

AusRFC 793:

Halboffene Verbindungen und andere Anomalien

Eine hergestellte Verbindung wird als „halboffen“ bezeichnet, wenn einer der TCPs die Verbindung an seinem Ende ohne das Wissen des anderen geschlossen oder abgebrochen hat oder wenn die beiden Enden der Verbindung aufgrund eines Absturzes, der zu Speicherverlust führte, nicht mehr synchronisiert sind. Solche Verbindungen werden automatisch zurückgesetzt, wenn versucht wird, Daten in eine der beiden Richtungen zu senden. Halboffene Verbindungen sind jedoch voraussichtlich ungewöhnlich und das Wiederherstellungsverfahren ist nicht besonders aufwendig.

verwandte Informationen