Garder Vivante TCP/IP sockets connectées sur Internet - quand? comment? et de combien?

Mise à JOUR: Passez à la réponse si vous voulez vous épargner le long préambule.

Connexions TCP/IP, les connexions actives sont spécifiés au moins une fois toutes les deux heures: http://tools.ietf.org/html/rfc1122#page-101. Le problème est que ceci a été écrit en 1989, et est préoccupé par le coût de l'envoi de l'extra KeepAlive paquet! Mais encore, il est l'heure par défaut de la plupart des OS est en conformité avec la spécification envoyer les connexions actives en bas d'un socket connecté après une période d'inactivité! Bien sûr, aujourd'hui, la plupart des connexions délai d'attente moyen avant que si inactif, et si elle est connectée à un de ses pairs, sur les connexions Internet de mourir à votre insu façon avant que (malgré le réglage de celles délai d'attente supérieur à celui, je crois, étant donné que le routeur tables entre les deux n'est pas la peine de le garder en vie - je me suis toujours demandé d'où la fuite dernier message va... mise à JOUR: La raison pour cela est "routeurs" qui peut être à votre ou à l'hôte distant fin sont "dynamiques" et de connexion au courant et la chute de la connexion après un certain temps d'inactivité - les routeurs que votre go par le biais de sur l'Internet ne peut pas laisser tomber votre connexion - ils qu'ils ne s'inquiètent pas - le paquet est juste de l'envoyer là où il doit aller). Donc, j'ai vu 2 des solutions communes afin de garder celles connexion sur Internet:

1) le Mépris (EDIT: comme cela a été souligné à moi, c'est de ne pas méconnaître les spec c'est seulement la modification de la valeur par défaut) la spécification et la modification de votre système à l'échelle de KeepAlive intervalle inférieur à 2 heures, ou 2) de mettre en œuvre votre propre "KeepAlive" système de vote par les pairs périodiquement.

De toute façon; ce qui est un délai raisonnable (de l'inactivité à laquelle envoyer votre KeepAlive)? J'ai tout vu, de 1 seconde à la valeur par défaut de 2 heures. Il semble que le nombre est aspiré hors de pouce... Si j'ai une application client de la connexion à partir potentiellement n'importe où dans le monde, ce qui est sûr et raisonnable de la période (je veux une seule connexion permanente)? Connexion à un de ses pairs, de nombreux sauts à l'écart de l'autre côté du monde sur Internet la connexion meurt sur 301 secondes (si vous ne savez plus quand vous essayez d'envoyer quelque chose) afin de fixer le délai à 300 secondes semble être le nombre magique - je obtenir le KeepAlive 1 seconde avant la mort - cet intervalle ne m'a jamais manqué.. mais est-il sûr?

EDIT: Cette connexion particulière im la mise en œuvre en C# 3.0, donc le code en que bienvenue.

la plupart TCP liées délais d'attente sont de 90 sec, alors j'aimerais envoyer des connexions actives toutes les 60 secondes
Merci mais les malades ont besoin de plus - avez-vous des exemples? Dans mon cas 5 minutes (300 secondes) semble très bien et j'ai du mal à imaginer quand il devrait être inférieur à celui qui (comme je l'ai été connecté à l'otherside du monde), peut-être que dial-up - dans ce cas, j'aurais besoin de laisser plus de temps pour le KeepAlive à atteindre par les pairs une fois envoyé...
Je veux être très clair, un routeur ne détient pas d'une connexion TCP, il ne se soucie pas, et il n'est pas avec état de toutes les connexions. Pure fonctionnalité de routage ne regarde que le l'en-tête IP (couche 3), pour voir où le paquet va, et c'est les tables de routage sont pré-calculés. Statefull noeuds dont les NATs (inclus sur la maison "routeurs") et les pare-feu peuvent être de connexion au courant, et chacun d'eux ont leurs propres délais d'attente. Sur pratiquement n'importe quel réseau de la quantité de trafic pour garder avie est petit. Toutefois, de ne pas définir ce vraiment bas sur un réseau de téléphonie mobile, comme il le fait de perdre BEAUCOUP de ressources.
Grâce à ce qui efface beaucoup de choses qui se rétrécit vers le bas de mon équipement qui doit en tenir inactifs les connexions locales sont plus que des connexions externes - ce qui explique pourquoi l'un ne marche pas rencontré ces problèmes jusqu'à ce que leur client est déployé à l'externe.. Si vous le mettez dans une réponse que j'ai pu le marquer comme réponse.. Merci!
Aussi serait-il vous arrive de savoir après combien de temps les utilisateurs à la maison statefull nœuds généralement chute de connexions TCP?

OriginalL'auteur markmnl | 2010-10-11