Co oznacza „resetowanie połączenia przez partnera”?


648

Co oznacza błąd „resetowanie połączenia przez peer” w połączeniu TCP? Czy to błąd krytyczny, czy tylko powiadomienie lub związany z awarią sieci?

Odpowiedzi:


771

To fatalne. Serwer zdalny wysłał ci pakiet RST, który wskazuje na natychmiastowe zerwanie połączenia, a nie zwykłe uzgadnianie. Pomija to normalne przejście do stanu pół-zamkniętego. Podoba mi się ten opis :

„Resetowanie połączenia przez peer” to odpowiednik protokołu TCP / IP polegający na zrzuceniu telefonu z powrotem na zaczep. Jest to bardziej grzeczne niż zwykłe nie odpowiadanie, pozostawiając jednego zawieszonego. Ale nie jest to FIN-ACK oczekiwany od naprawdę grzecznego konwersatora TCP / IP.


49
Dlaczego jest oznaczony jako „resetowanie połączenia przez peera ”? Wygląda na to, że powinno to być „resetowanie połączenia przez hosta” lub „resetowanie połączenia przez serwer”
Robert,

27
@Robert Ponieważ stąd pochodzi reset. Uczestnik wysłał pakiet RST.
Markiz Lorne

106
... Robert, twoja troska nie ma dla mnie sensu. Rówieśnik jest po prostu bardziej ogólny. W typowym modelu klient-serwer serwer może równie łatwo otrzymać to powiadomienie od „klienta”. Urządzenie, które początkowo żąda połączenia, ma taką samą moc, aby wysłać to powiadomienie. Na poziomie TCP wygląda identycznie po nawiązaniu połączenia. Dwie maszyny, gdy się komunikują, są tylko równorzędne.
codetaku

9
To spakowane mogło zostać wysłane przez inne urządzenie pośrodku, takie jak router?
Arnold Roa,

3
Nie można go nazwać „resetowaniem połączenia przez serwer”, ponieważ może zostać wysłany przez klienta lub serwer. Nie można go ominąć. Jeśli klient otrzyma ten błąd, oznacza to, że połączenie TCP nie jest już otwarte na serwerze, na przykład ponieważ serwer uległ awarii i został zrestartowany.
Johannes Overmann

193

Oznacza to, że odebrano protokół TCP RST i połączenie jest teraz zamknięte. Dzieje się tak, gdy pakiet jest wysyłany z twojego końca połączenia, ale drugi koniec nie rozpoznaje połączenia; odeśle pakiet z ustawionym bitem RST w celu wymuszonego zamknięcia połączenia.

Może się to zdarzyć, jeśli druga strona ulegnie awarii, a następnie wróci do góry lub gdy zadzwoni close()do gniazda, gdy przesyłane są dane od Ciebie, i oznacza to, że niektóre dane, które wcześniej wysłałeś, mogły nie zostać odebrane.

To od Ciebie zależy, czy to błąd; jeśli wysyłane informacje były przeznaczone wyłącznie na korzyść klienta zdalnego, może nie mieć znaczenia, że ​​mogły zostać utracone jakiekolwiek dane końcowe. Należy jednak zamknąć gniazdo i zwolnić wszelkie inne zasoby związane z połączeniem.


11
Jeśli ustawisz opcję gniazda SO_LINGER na zero podczas otwierania nowego gniazda, a następnie zamkniesz go normalnie, bit RST zostanie ustawiony. Więc WSZYSTKIE połączenie zakończy się resetem. Nie próbuj tego w domu, to po prostu denerwujące. stackoverflow.com/questions/3757289
Chris Huang-Leaver

1
Jak rozwiązać ten problem, czy musimy ponownie uruchomić zarówno zdalny, jak i nasz host?
user2225190,

3
@ user2225190 Musisz ponownie połączyć klienta, ale najpierw musisz sprawdzić oprogramowanie, aby upewnić się, że nie jest to spowodowane błędem protokołu aplikacji, tj. zamknięciem połączenia, do którego drugi koniec wciąż pisze.
Markiz Lorne

1
Dzięki za komentarz. Pracował przez dwa miesiące. Próbuję również z wiersza polecenia, ale nadal pojawia się ten błąd. Próbuję „sftp user @ machine”. Błąd jest niespójny.
user2225190,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.