Что вызывает отправку флага сброса TCP/IP (RST)?


Я пытаюсь выяснить, почему TCP / IP-соединение моего приложения продолжает икать каждые 10 минут (точно, в течение 1-2 секунд). Я запустил Wireshark и обнаружил, что после 10 минут бездействия другой конец отправляет пакет с установленным флагом reset (RST). Поиск google говорит мне: "флаг сброса означает, что получатель запутался и поэтому хочет прервать соединение", но это немного не хватает деталей, которые мне нужны. Что может быть причиной этого? И возможно ли, что некоторые маршрутизатор по пути отвечает за это или это всегда будет исходить от другой конечной точки?

Edit: есть маршрутизатор (в частности, Linksys WRT-54G), расположенный между моим компьютером и другой конечной точкой-есть ли что-нибудь, что я должен искать в настройках маршрутизатора?

6 101

6 ответов:

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

одна из причин, по которой устройство отправит RST, - это ответ на получение пакета для закрытого сокета.

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

запустите анализатор пакетов (например, Wireshark) также на узле, чтобы увидеть, является ли это узлом, который отправляет первый или кто-то посередине.

Я только что потратил довольно много времени на устранение этой самой проблемы. Ни одно из предложенных решений работал. Оказалось, что наш сисадмин по ошибке присвоил один и тот же статический IP двум несвязанным серверам, принадлежащим к разным группам, но сидящим в одной сети. Конечные результаты были периодически отброшены VNC-соединения, браузер, который должен был быть обновлен несколько раз, чтобы получить веб-страницу, и другие странные вещи.

некоторые брандмауэры делают это, если соединение простаивает в течение x минут. Некоторые интернет-провайдеры устанавливают свои маршрутизаторы для этого по разным причинам.

в этот день и возраст вам нужно будет изящно обрабатывать (восстанавливать по мере необходимости) это условие.

RST отправляется стороной, выполняющей активное закрытие, потому что это сторона, которая отправляет последний ACK. Поэтому, если он получает FIN со стороны, выполняющей пассивное закрытие в неправильном состоянии, он отправляет первый пакет, который указывает другой стороне, что произошла ошибка.

Если есть маршрутизатор, выполняющий NAT, особенно маршрутизатор низкого уровня с небольшим количеством ресурсов, он сначала будет стареть самые старые сеансы TCP. Для этого он устанавливает RST флаг в пакете, который эффективно говорит принимающей станции (очень нелюбезно) закрыть соединение. это делается для экономии ресурсов.