J'essaie de comprendre pourquoi la connexion TCP / IP de mon application continue de hocher toutes les 10 minutes (exactement, dans les 1-2 secondes). J'ai couru Wireshark et découvert qu'après 10 minutes d'inactivité, l'autre extrémité envoie un paquet avec l'indicateur de réinitialisation (RST) défini. Une recherche Google me dit que "l'indicateur RESET signifie que le récepteur est devenu confus et veut donc interrompre la connexion" mais c'est un peu court des détails dont j'ai besoin. Qu'est-ce qui peut causer cela? Et est-il possible qu'un routeur en cours de route en soit responsable ou cela viendrait-il toujours de l'autre point de terminaison?
Edit: Il y a un routeur (en particulier un Linksys WRT-54G) assis entre mon ordinateur et l'autre point de terminaison - y a-t-il quelque chose que je devrais rechercher dans les paramètres du routeur?
la source
Réponses:
Un `` routeur '' pourrait faire n'importe quoi - en particulier NAT, ce qui pourrait impliquer n'importe quelle quantité de problèmes de bogue avec le trafic ...
Une des raisons pour lesquelles un périphérique enverra un RST est en réponse à la réception d'un paquet pour une socket fermée.
Il est difficile de donner une réponse ferme mais générale, car toutes les perversions possibles ont été visitées sur TCP depuis sa création, et toutes sortes de personnes pourraient insérer des RST pour tenter de bloquer le trafic. (Certains «pare-feu nationaux» fonctionnent comme ceci, par exemple.)
la source
Exécutez un renifleur de paquets (par exemple, Wireshark) également sur le pair pour voir si c'est le pair qui envoie le RST ou quelqu'un au milieu.
la source
Je viens de passer un certain temps à résoudre ce problème. Aucune des solutions proposées n'a fonctionné. Il s'est avéré que notre administrateur système attribuait par erreur la même adresse IP statique à deux serveurs indépendants appartenant à des groupes différents, mais assis sur le même réseau. Les résultats finaux étaient des connexions vnc supprimées par intermittence, un navigateur qui devait être actualisé plusieurs fois pour récupérer la page Web, et d'autres choses étranges.
la source
Certains pare-feu font cela si une connexion est inactive pendant x nombre de minutes. Certains FAI configurent leurs routeurs pour le faire également pour diverses raisons.
De nos jours, vous devrez gérer gracieusement (rétablir si nécessaire) cette condition.
la source
RST est envoyé par le côté effectuant la fermeture active car c'est le côté qui envoie le dernier ACK. Donc, s'il reçoit FIN du côté faisant la fermeture passive dans un état incorrect, il envoie un paquet RST qui indique à l'autre côté qu'une erreur s'est produite.
la source
S'il y a un routeur faisant du NAT, en particulier un routeur bas de gamme avec peu de ressources, il vieillira d'abord les sessions TCP les plus anciennes. Pour ce faire, il définit le
RST
drapeau dans le paquet qui indique effectivement à la station réceptrice de fermer (sans grâce) la connexion. ceci est fait pour économiser des ressources.la source
Une chose à savoir est que de nombreux pare-feu Linux Netfilter sont mal configurés.
Si vous avez quelque chose comme:
-A FORWARD -m state --state RELATED, ESTABLISHED -j ACCEPTER
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
la réorganisation des paquets peut alors amener le pare-feu à considérer les paquets comme non valides et à générer ainsi des réinitialisations qui interrompront alors les connexions autrement saines.
La réorganisation est particulièrement probable avec un réseau sans fil.
Cela devrait plutôt être:
-A FORWARD -m state --state RELATED, ESTABLISHED -j ACCEPTER
-A FORWARD -m état --state INVALID -j DROP
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
En gros, à chaque fois que vous avez:
... -m état --state RELATED, ESTABLISHED -j ACCEPTER
il doit être immédiatement suivi de:
... -m état --state INVALID -j DROP
Il vaut mieux abandonner un paquet puis générer une réinitialisation TCP potentiellement perturbatrice du protocole. Les réinitialisations sont meilleures lorsqu'elles sont prouvées comme la bonne chose à envoyer ... car cela élimine les délais d'attente. Mais s'il y a une chance qu'ils soient invalides, ils peuvent causer ce genre de douleur.
la source
En effet, il existe un autre processus dans le réseau qui envoie RST à votre connexion TCP.
Normalement, RST serait envoyé dans le cas suivant
Dans votre cas, cela ressemble à un processus qui connecte votre connexion (IP + port) et continue d'envoyer RST après avoir établi la connexion.
la source