Prise de connecter les délais d'expiration: où est la norme?
Le contexte de mon travail est mon réseau local.
Les exemples de code ci-dessous sont écrits en langage Java, mais ma question est sur TCP, pas de programmation.
J'ai expérimenté la suite de délai de connexion:
- 2 ms lorsque la connexion est établie
- 1 005 ms quand l'hôte est en vie, mais de ne pas écouter sur le socket spécifié port
- 21 000 ms lors de l'hôte est en baisse
Ces valeurs proviennent de l'observation de mon réseau mais je présume qu'il existe un RFC.
Voici quelques informations sur le délai d'attente:
- RFC 1122
- RFC 793
- Nagle's_algorithm et TCP_NO_DELAY
Pouvez-vous me donner plus de pointeurs?
@Override
public void run() {
for( int port = _portFirst; port < _portLast; ++port ) {
String host = "192.168.1." + _address;
boolean success = false;
long before = System.currentTimeMillis();
try {
Socket socket = new Socket();
SocketAddress endpoint = new InetSocketAddress( host, port );
socket.connect( endpoint, 0 );
success = true;
socket.close();
}//try
catch( ConnectException c ){/**/}
catch( Throwable t ){
t.printStackTrace();
}
long duration = System.currentTimeMillis() - before;
System.err.println( host + ":" + port + " = " + duration );
_listener.hostPinged( host, port, success, duration );
}
}
Ces délais d'attente sont contrôlés par votre système d'exploitation, système d'exploitation/Version avez-vous?
BTW balayage de port peut être fait facilement par les outils existants comme
Merci, je sais nmap, lookatlan.com ou overlooksoft.com mais mon objectif est d'acquérir des connaissances fondamentales
BTW balayage de port peut être fait facilement par les outils existants comme
nmap
je voudrais envisager de l'utiliser si vous le pouvez.Merci, je sais nmap, lookatlan.com ou overlooksoft.com mais mon objectif est d'acquérir des connaissances fondamentales
OriginalL'auteur Aubin | 2012-11-07
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de RFC pour les délais de connexion. Il est impossible pour tout RFC ou d'un autre document pour connaître les conditions en vigueur dans le réseau à l'avance.
En général, vous pouvez vous attendre à une connexion réussie à être très rapide; un
ECONNREFUSED
(ConnectException: connection refused
) pour être à peu près aussi rapide; et un délai d'attente de connexion (ConnectException: connect timeout
) à prendre aussi longtemps que nécessaire, en fonction de la cause, les plates-formes à ses deux extrémités, et la nature de l'intervention du réseau. Dans Windows, je crois, un délai d'attente de connexion est le total du temps à travers trois tentatives de connexion avec des délais d'attente de 6 ans, 12 ans, et 24s, le total des 42s; dans différents systèmes Unix, je crois que le total est plus comme des années 70, qui pourraient résulter d'3 tentatives avec des délais d'attente 10s, 20s, et 40s. Comme vous le voyez, c'est à la plate-forme. Il y a aussi le problème de remplissage de la file d'attente en retard à un serveur Windows va provoquer des Premières à être émises à la réception SYNs, où sur un serveur Unix/Linux, il ne causera pas de réponse à tous les entrants SYNs.Vous devriez également noter que dans Java, et contrairement à de nombreuses années de Javadoc:
Un zéro délai de connexion n'implique pas une infinité de délai d'attente, il implique la plate-forme de délai d'expiration par défaut, comme illustré ci-dessus n'est pas au-dessus d'environ 70;
Vous ne pouvez pas spécifier un timeout de la connexion qui augmente la plate-forme par défaut; vous pouvez utiliser seulement à la diminution de la plate-forme par défaut.
Il n'est pas impossible pour les Rfc pour spécifier les délais d'attente, mais ensuite je n'ai pas dit qu'il était.
que faire si je veux mettre en œuvre le protocole tcp longpolling techniques. Puis-je obtenir en quelque sorte au-dessus de ce max système de timeout?
Votre question comporte une contradiction dans les termes. Pas de.
ok. Donc je suppose que je suis sûr que si mon interrogation attend pour un maximum de 60 secondes.
OriginalL'auteur user207421
Comme vous l'avez appris, vous pouvez spécifier un délai d'attente dans l'
connect(...)
appel de la méthode en tant que telle:Et n'oubliez pas que "...Un délai d'attente de zéro est interprété comme une infinité de délai d'attente." (où "infini" souvent vraiment signifie "utiliser le système d'exploitation par défaut").
Comme pour les paramètres par défaut, ils sont des OS dépend, mais généralement assez cohérent de toute façon. Si vous êtes sur une linux box, un coup d'oeil à
/proc/sys/net/ipv4/tcp_keepalive*
(mais ne pas changer, sauf si vous savez ce que vous faites 🙂Acclamations,
Vrai, edit.
"Essayer pour voir"... C'est exactement ce que j'ai codé et essayé.
/proc/sys/net/ipv4/tcp_keepalive*
n'a rien à voir avec connecter les délais d'attente.Personnellement, je suis face à un problème dès maintenant, où je suis encore recevoir le délai d'attente malgré la fixation d'un très long délai d'attente dans mon connecter invocation. Ce n'est pas le respect de la valeur, je suppose parce que c'est de frapper le délai d'attente plus tôt que lorsque le délai d'attente je précise questions? Comment cela peut-il être?
OriginalL'auteur Anders R. Bystrup