2011-11-01 7 views
3

Je suis en train de se connecter à un hôte distant via le programme java:connexion TCP création

socket = new java.net.Socket(host,port);  

Je reçois l'exception suivante:

java.net.ConnectException: Connection refused: connect 

Tracing paquets IP entre mon ordinateur et la télécommande hôte, je vois que mon ordinateur a envoyé des paquets SYN trois fois, et a reçu des paquets [RST, ACK] trois fois.

Pourquoi mon ordinateur envoie-t-il trois paquets SYN malgré un seul établissement de connexion?

Est-ce dû à la pile TCP/IP de l'OS?

Ou est-ce dû à l'implémentation Java de la classe java.net.Socket?

+0

Le pare-feu et le gestionnaire de sécurité Java ont déjà été vérifiés aux deux extrémités de la connexion? Cela devrait fonctionner. Je l'utilise tout le temps sans problème. Essayez le vieux redémarrage? – jefflunt

+1

La question n'était pas de savoir pourquoi la connexion de réinitialisation de l'hôte distant, mais pourquoi 3 paquets SYN ont été envoyés. –

+0

Serait-ce une nouvelle tentative? http://stackoverflow.com/questions/1045964/how-to-view-change-socket-connection-timeout-on-linux –

Répondre

2

La retransmission du SYN se fait sans doute de se conformer aux RFC793:

Le TCP doit récupérer à partir des données qui est endommagé, perdu, en double, ou délivra de commande par le système de communication Internet. Ce est obtenu en attribuant un numéro de séquence à chaque octet transmis, et nécessitant un accusé de réception positif (ACK) du recevant TCP. Si l'ACK n'est pas reçu dans un délai de , les données sont retransmises.

Il est logique que le SYN soit réessayé car il est possible que, pour une raison quelconque, l'accusé de réception soit perdu. Le nombre de fois que cela est retransmis et le timeout dépend de l'implémentation TCP et non de Java.

+0

3 Les paquets SYN ont été envoyés dans l'intervalle court (moins d'une seconde). Trois paquets de l'hôte distant ont été reçus avec des drapeaux ACK et RST. Donc je pense que la raison n'est pas la perte de paquets ou le timeout. –

+0

3 paquets SYN ont-ils été envoyés à la suite, ou votre ordinateur at-il attendu un paquet ACK/RST avant d'envoyer un autre SYN? –