FIN,ACK nach PSH,ACK
Ich versuche zu implementieren, die eine Kommunikation zwischen einem legacy-system und ein Linux-system, aber ich erhalte immer eine der folgenden Szenarien:
(Die legacy-system-server, der Linux-client)
Function recv(2) returns 0 (the peer has performed an orderly shutdown.)
> SYN
< SYN, ACK
> ACK
< PSH, ACK (the data)
> FIN, ACK
< ACK
> RST
< FIN, ACK
> RST
> RST
Function connect(2) returns -1 (error)
> SYN
< RST, ACK
Wenn der server schickt seine Daten, sollte der client die Antwort mit den Daten, aber stattdessen bekomme ich ein "FIN, ACK"
Warum ist es so? Wie soll ich das verstehen? Ich bin nicht so vertraut mit TCP auf dieser Ebene
- Sie müssen sich auf Ihrem client-code.
- Die FIN könnte piggyback auf die Daten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte es sein, dass, sobald der server die Daten versendet (Zeile 4) der AUFTRAGGEBER schließt den socket oder vorzeitig beendet und das Betriebssystem schließt das socket und sendet
FIN
(Linie 5). Der server antwortetFIN
mitACK
aber der client hat aufgehört zu existieren und das Betriebssystem reagiert mitRST
. (Ich würde erwarten, dass die client-OS im hintergrund zu ignorieren und verwerfen Sie alle TCP-Segmente kommen für eine geschlossene Verbindung während der berüchtigtenTIME-WAIT
Zustand, aber das passiert nicht aus irgendeinem Grund.)http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination:
Nach FIN, PSH, ACK --> Eine Transaktion abgeschlossen
Zweite Anforderung zu empfangen, aber senden [RST] seq=140 win=0 len=0