Що означає "скидання зв'язку з одноранговим"?


648

Яке значення помилки "скидання з'єднання одноранговими" на з'єднанні TCP? Це фатальна помилка чи просто сповіщення чи пов’язана з відмовою в мережі?

Відповіді:


771

Це фатально. Віддалений сервер надіслав вам пакет RST, який вказує на негайне припинення з'єднання, а не на звичайне рукостискання. Це обходить нормальний напівзакритий перехід стану. Мені подобається цей опис :

"Скидання з'єднання одноранговим" - це еквівалент TCP / IP відхилення телефону назад на гачку. Це ввічливіше, ніж просто не відповідати, залишаючи одне повішеним. Але це не FIN-ACK, якого очікує справді ввічливий конвертор TCP / IP.


49
Чому це позначено "скиданням зв'язку з боку однорангових "? Здається, це повинно бути "скидання з'єднання хостом" або "скидання з'єднання сервером"
Роберт,

27
@Robert Тому, що звідки прийшло скидання. Команда надіслала пакет RST.
Маркіз Лорн

106
... Роберто, твоя турбота для мене не має сенсу. Рівнознавець просто строго загальніший за це. У типовій моделі клієнт-сервер сервер може так само легко отримувати це повідомлення від "клієнта". Машина, яка спочатку вимагає з'єднання, має стільки ж сил для надсилання цього повідомлення. На рівні TCP це виглядає ідентично, коли з'єднання триває. Дві машини, спілкуючись, є лише однолітками.
codetaku

9
Цю упаковку міг би надіслати інший пристрій посередині, як маршрутизатор?
Арнольд Роа

3
Його не можна назвати "скиданням з'єднання сервером", оскільки він може бути надісланий клієнтом або сервером. Його не можна "обійти". Якщо клієнт отримує цю помилку, це означає, що з'єднання TCP більше не відкрите на сервері, наприклад, після того, як сервер вийшов з ладу і перезапустився.
Йоханнес Оверманн

193

Це означає, що отримано RST TCP і з'єднання закрито. Це відбувається, коли пакет надсилається з вашого кінця з'єднання, але інший кінець не розпізнає з'єднання; він надішле назад пакет із встановленим бітом RST для примусового закриття зв'язку.

Це може статися, якщо інша сторона виходить з ладу, а потім повертається назад або якщо вона зателефонує close()в сокет, поки є дані від вас в дорозі, і є вказівкою для вас, що деякі з даних, які ви раніше надіслали, можливо не були отримані.

Це ви, чи це помилка; якщо інформація, яку ви надсилали, була лише на користь віддаленого клієнта, це може не мати значення, що будь-які кінцеві дані можуть бути втрачені. Однак вам слід закрити сокет і звільнити будь-які інші ресурси, пов'язані з цим з'єднанням.


11
Якщо встановити параметр сокета SO_LINGER у нуль при відкритті нового сокета, а потім закрити його нормально, буде встановлено біт RST. Так ВСЕ з'єднання закінчиться скиданням. Не спробуйте цього вдома, це просто дратує. stackoverflow.com/questions/3757289
Кріс Хуанг-Лівер

1
Як потім виправити цю проблему, чи потрібно перезавантажувати як віддалений, так і наш хост?
користувач2225190

3
@ user2225190 Вам потрібно знову підключити клієнт, але спочатку потрібно вивчити програмне забезпечення, щоб переконатися, що воно не пов’язане з помилкою протоколу програми, тобто закриттям з'єднання, на яке інший кінець все ще пише.
Маркіз Лорн

1
Дякуємо за ваш коментар Це працювало два місяці. Я також пробую це з командного рядка, але все ж отримую цю помилку. Я намагаюся "sftp user @ machine". Помилка непослідовна.
користувач2225190
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.