J'essaie de comprendre pourquoi la connexion TCP/IP de mon application continue à faire du hoquet toutes les 10 minutes (exactement, dans un délai de 1 à 2 secondes). J'ai exécuté Wireshark et découvert qu'après 10 minutes d'inactivité, l'autre extrémité envoyait un paquet avec l'indicateur de réinitialisation (RST) défini. Une recherche sur Google me dit "le drapeau RESET signifie que le récepteur est confus et veut donc interrompre la connexion", mais cela me laisse un peu moins de détails. Qu'est-ce qui peut causer cela? Et est-il possible qu'un routeur le long du chemin en soit responsable ou que cela vienne toujours de l'autre point d'extrémité?
Edit: Il y a un routeur (en particulier un Linksys WRT-54G) 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?
Un 'routeur' peut faire n'importe quoi - en particulier le NAT, qui peut impliquer une quantité de problèmes liés au 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 chaque perversion possible a été visitée le TCP depuis sa création, et toutes sortes de personnes pourraient insérer des fichiers RST dans le but de bloquer le trafic. (Certains 'pare-feu nationaux' fonctionnent de la sorte, par exemple.)
Exécutez un renifleur de paquet (par exemple, Wireshark) également sur l'homologue pour voir si c'est l'homologue qui envoie la taxe de vente au détail ou quelqu'un au milieu.
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 avait attribué par erreur la même adresse IP statique à deux serveurs indépendants, appartenant à des groupes différents mais situés sur le même réseau. Les résultats finaux étaient des connexions vnc abandonnées par intermittence, un navigateur qui devait être actualisé plusieurs fois pour aller chercher la page Web et d’autres choses étranges.
Certains pare-feu le font si une connexion est inactive pendant x minutes. Certains fournisseurs d'accès définissent leurs routeurs pour faire cela pour diverses raisons également.
De nos jours, vous devrez gérer (rétablir au besoin) avec élégance cette condition.
Si un routeur utilise la traduction d'adresses réseau, en particulier un routeur bas de gamme avec peu de ressources, il vieillira d'abord les sessions les plus anciennes TCP. Pour ce faire, il active l'indicateur RST
dans le paquet, qui indique effectivement à la station réceptrice de fermer (de manière très ingrate) la connexion. ceci est fait pour économiser des ressources.
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é effectuant la fermeture passive dans un état incorrect, il envoie un paquet RST qui indique à l'autre côté qu'une erreur s'est produite.
Il faut savoir que de nombreux pare-feu Linux Netfilter sont mal configurés.
Si vous avez quelque chose comme:
-A FORWARD -m état --état LIÉ, ÉTABLI -j ACCEPTER
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
dans ce cas, le pare-feu considère que les paquets sont invalides et génère ainsi des réinitialisations qui rompent alors les connexions saines.
La réorganisation est particulièrement probable avec un réseau sans fil.
Cela devrait plutôt être:
-A FORWARD -m état --état LIÉ, ÉTABLI -j ACCEPTER
-A FORWARD -m état --état INVALID -j DROP
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
Fondamentalement, chaque fois que vous avez:
... -m state --state RELATED, ESTABLISHED -j ACCEPTER
il devrait immédiatement être suivi de:
... -m état --etat INVALID -j DROP
Il vaut mieux laisser tomber un paquet que de générer une réinitialisation de protocole potentiellement perturbatrice. Les réinitialisations sont meilleures quand il est prouvé que c'est la bonne chose à envoyer ... puisque 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.