Was bedeutet "Verbindung durch Peer zurücksetzen"?

648

Was bedeutet der Fehler "Verbindung durch Peer zurücksetzen" bei einer TCP-Verbindung? Handelt es sich um einen schwerwiegenden Fehler oder nur um eine Benachrichtigung oder um einen Netzwerkfehler?

Franck Freiburger
quelle

Antworten:

771

Es ist tödlich. Der Remote-Server hat Ihnen ein RST-Paket gesendet, das darauf hinweist, dass die Verbindung sofort unterbrochen wird und nicht wie üblich. Dies umgeht den normalen halbgeschlossenen Zustandsübergang. Ich mag diese Beschreibung :

"Verbindung durch Peer zurückgesetzt" ist das TCP / IP-Äquivalent zum erneuten Zuschlagen des Telefons. Es ist höflicher als nur nicht zu antworten und einen hängen zu lassen. Aber es ist nicht das FIN-ACK, das von der wirklich höflichen TCP / IP-Konversation erwartet wird.

ire_and_curses
quelle
49
Warum wird es als "Verbindungs-Reset durch Peer " bezeichnet? Es klingt so, als ob es "Verbindungs-Reset vom Host" oder "Verbindungs-Reset vom Server" sein sollte
Robert
27
@ Robert Weil von dort der Reset kam. Der Peer hat ein RST-Paket gesendet.
Marquis von Lorne
105
... Robert, deine Sorge macht für mich keinen Sinn. Peer ist nur allgemeiner. In einem typischen Client-Server-Modell kann der Server diese Benachrichtigung genauso einfach vom "Client" empfangen. Der Computer, der anfänglich die Verbindung anfordert, kann diese Benachrichtigung genauso gut senden. Auf TCP-Ebene sieht es identisch aus, sobald die Verbindung besteht. Bei der Kommunikation sind die beiden Maschinen nur Peers.
Codetaku
9
Dieses Paket könnte von einem anderen Gerät in der Mitte wie ein Router gesendet worden sein?
Arnold Roa
3
Es kann nicht als "Verbindung vom Server zurückgesetzt" bezeichnet werden, da es vom Client oder vom Server gesendet werden kann. Es kann nicht umgangen werden. Wenn ein Client diesen Fehler erhält, bedeutet dies, dass die TCP-Verbindung auf dem Server nicht mehr geöffnet ist, beispielsweise seit der Server abgestürzt ist und neu gestartet wurde.
Johannes Overmann
193

Dies bedeutet, dass ein TCP-RST empfangen wurde und die Verbindung jetzt geschlossen ist. Dies tritt auf, wenn ein Paket von Ihrem Ende der Verbindung gesendet wird, das andere Ende die Verbindung jedoch nicht erkennt. Es wird ein Paket mit gesetztem RST-Bit zurückgesendet, um die Verbindung zwangsweise zu schließen.

Dies kann passieren, wenn die andere Seite abstürzt und dann wieder hochfährt oder wenn sie close()den Socket anruft, während Daten von Ihnen übertragen werden. Dies ist ein Hinweis darauf, dass einige der zuvor gesendeten Daten möglicherweise nicht empfangen wurden.

Es liegt an Ihnen, ob dies ein Fehler ist; Wenn die von Ihnen gesendeten Informationen nur dem Remote-Client zugute kamen, spielt es möglicherweise keine Rolle, dass endgültige Daten verloren gegangen sind. Sie sollten jedoch den Socket schließen und alle anderen mit der Verbindung verbundenen Ressourcen freigeben.

mark4o
quelle
11
Wenn Sie die Socket-Option SO_LINGER beim Öffnen eines neuen Sockets auf Null setzen und dann normal schließen, wird das RST-Bit gesetzt. Die ALLE Verbindung endet also mit einem Reset. Versuchen Sie es nicht zu Hause, es ist nur ärgerlich. stackoverflow.com/questions/3757289
Chris Huang-Leaver
1
Wie kann dieses Problem behoben werden? Müssen wir sowohl Remote als auch unseren Host neu starten?
user2225190
3
@ user2225190 Sie müssen den Client erneut verbinden, aber zuerst müssen Sie Ihre Software untersuchen, um sicherzustellen, dass dies nicht auf einen Anwendungsprotokollfehler zurückzuführen ist, dh das Schließen einer Verbindung, an die das andere Ende noch schreibt.
Marquis von Lorne
1
Vielen Dank für Ihren Kommentar. Es hat zwei Monate lang funktioniert. Ich versuche es auch über eine Befehlszeile, erhalte aber immer noch diesen Fehler. Ich versuche "sftp user @ machine". Fehler ist inkonsistent.
user2225190