Що викликає надсилання прапора TCP / IP (RST)?


122

Я намагаюся з’ясувати, чому TCP / IP-зв’язок мого додатка продовжує іконитися кожні 10 хвилин (саме протягом 1-2 секунд). Я забіг Wireshark і виявив, що через 10 хвилин бездіяльності інший кінець надсилає пакет із встановленим прапором скидання (RST). Пошук в Google каже мені, що "прапор RESET означає, що приймач заплутався і тому хоче перервати з'єднання", але це трохи не вистачає деталей, які мені потрібні. Що може бути причиною цього? І чи можливо, що якийсь маршрутизатор по дорозі несе відповідальність за це чи це завжди походитиме з іншої кінцевої точки?

Редагувати: Між моїм комп’ютером та іншою кінцевою точкою сидить маршрутизатор (зокрема, Linksys WRT-54G) - чи є щось, що я повинен шукати в налаштуваннях маршрутизатора?


12
Ось ще: Comcast
Том Ріттер

1
Хе, на щастя, я не маю залежності від Comcast, оскільки це відбувається в локальній мережі. Я б хотів, щоб я міг легко перекласти провину, що легко;)
Люк

Ви коли-небудь розбиралися в цьому? Я не можу коментувати, тому що мені не вистачає балів, але у мене така ж точна проблема, що у вас була, і я шукаю виправлення.

До якої послуги відноситься цей конкретний випадок? Можливо, встановити збереження в сокеті (на рівні програми), тому тривалі періоди простою не призводять до того, що хтось (посередині чи ні) намагається примусити скинути з’єднання через відсутність ресурсів.
аріельф

Ви говорите "Comcast"? : D Ознайомтесь з цим пов’язаним репо: github.com/tylertreat/comcast
joonas.fi

Відповіді:


88

"Маршрутизатор" може робити що завгодно - особливо NAT, який може включати будь-яку кількість помилок, що псуються з трафіком ...

Однією з причин, що пристрій буде надсилати RST, є у відповідь на отримання пакету для закритого сокета.

Важко дати тверду, але загальну відповідь, тому що всі можливі збочення відвідували TCP з моменту її створення, і всілякі люди можуть вставляти RSTs для спроби перекрити трафік. (Наприклад, деякі "національні брандмауери" працюють так).


6
Або маршрутизатор має 10-хвилинний тайм-аут для підключення TCP, або маршрутизатор увімкнено "інтелектуальне виявлення шлюзу".
Девід Шварц

2
Це небагато, щоб припустити, що маршрутизатор може бути позбавлений помилок.
Маркіз Лорн

22

Запустіть sniffer пакетів (наприклад, Wireshark) також на одноранговому, щоб побачити, чи саме той, хто надсилає RST, чи хтось посередині.


14

Я просто витратив досить багато часу на усунення цієї самої проблеми. Жодне із запропонованих рішень не спрацювало. Виявилося, що наш sysadmin помилково призначив один і той же статичний IP двом непов'язаним серверам, що належать до різних груп, але сиділи в одній мережі. Кінцевими результатами були переривчасті підключення vnc, браузер, який довелося кілька разів оновлювати, щоб отримати веб-сторінку, та інші дивні речі.


7

RST надсилається стороною, яка робить активне закриття, оскільки саме сторона надсилає останній ACK. Отже, якщо він отримує FIN з боку, яка робить пасивний закритий у неправильному стані, він надсилає пакет RST, який вказує іншій стороні про помилку.


6
Обидві сторони надсилають та отримують FIN у звичайному закритті. У цій ситуації немає нічого поганого, а отже, жодна причина, щоб одна сторона не могла перезавантажитись. Перше речення навіть не має сенсу.
Маркіз Лорн

2
[RST, ACK] також може бути надіслана стороною, що приймає SYN, на порт, який не слухається. У випадку, коли я зіткнувся, RST / ACK з'явився приблизно через 60 секунд після першого SYN. FWIW
Лесь

6

Деякі міжмережеві екрани роблять це, якщо з'єднання не працює протягом x хвилин. Деякі провайдери встановлюють свої маршрутизатори також для цього з різних причин.

У цей день і вік вам потрібно буде витончено впоратися (відновити за потребою) цей стан.


2
З'єднання відновлюється просто чудово, проблема полягає в тому, що короткий період відключення викликає попередження без потреби.
Лука

1
У мене були конкретні проблеми з обладнанням Cisco PIX / ASA. У них особливо короткі проміжки часу, як за замовчуванням. Здебільшого дешевше обладнання в цьому плані зазвичай "краще" (оскільки вони не очікують на швидкість очікування) ...
Брайан Кноблауш,

6

Якщо маршрутизатор працює з NAT, особливо маршрутизатор низького рівня з мало ресурсами, він спочатку старіє найстарішим сеансам TCP. Для цього він встановлює RSTпрапор у пакеті, який ефективно повідомляє приймальній станції (дуже невдячно) закрити з'єднання. це робиться для економії ресурсів.


3

Потрібно пам’ятати, що багато брандмауерів Linux netfilter неправильно налаштовано.

Якщо у вас є щось на кшталт:

-А ВПЕРЕД, -м стан - держава ЗВ'ЯЗАНА, Встановлена ​​-j ПРИЙМАНО

-А ВПЕРЕД, -p tcp -j REJECT - відхилення-з tcp-скиданням

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

Перепорядкування особливо ймовірно для бездротової мережі.

Натомість це повинно бути:

-А ВПЕРЕД, -м стан - держава ЗВ'ЯЗАНА, Встановлена ​​-j ПРИЙМАНО

-Вперед, -м стан - держава НЕВЕРИЛЬНА -j ДРОП

-А ВПЕРЕД, -p tcp -j REJECT - відхилення-з tcp-скиданням

В основному в будь-який час, коли у вас є:

... -м стан - держава ЗВ'ЯЗАНА, Встановлена ​​-j ПРИЙМАНО

за ним слід негайно слідувати:

... -м стан - держава ІНВАЛІД -j ДРОП

Краще скинути пакет, щоб потім створити потенційно протокол, що порушує скидання tcp. Скидання краще, коли вони, очевидно, правильні речі для надсилання ..., оскільки це виключає тайм-аути. Але якщо є якийсь шанс, що вони недійсні, вони можуть завдати такого роду біль.


0

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

Зазвичай RST надсилається в наступному випадку

  • Процес закриття сокета, коли вмикається socket за допомогою параметра SO_LINGER
  • ОС виконує очищення ресурсів, коли ваш процес виходить, не закриваючи сокет.

У вашому випадку це здається, що процес підключення вашого з'єднання (IP + порт) і продовжує надсилати RST після встановлення з'єднання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.