2009-12-07 3 views
1

J'ai un processus Java sur la machine A communiquant avec un Tomcat sur la machine B via TCP. La connexion TCP (juste l'échange syn-syn/ack) prend de l'ordre de 100 ms de manière cohérente, alors qu'une requête ping dure 1 ms (les services sont sur le même réseau local).TCP Connect prend X100 plus long que ping

  1. Qu'est-ce qui pourrait causer le retard accru dans l'établissement d'une connexion TCP?
  2. Comment l'optimiser?

Notez que:

  • Ce n'est pas encore 3 voies poignée de main, je mesure que le syn/échange syn-ack.
  • Le serveur est une machine très puissante et pas du tout chargée.
  • La demande de connexion est à une adresse IP, pas un nom d'hôte, donc aucune recherche DNS n'est impliquée. En fait, ce n'est pas pertinent puisque je mesure le temps sinus que le SYN a quitté la machine A.
+0

Avez-vous essayé de vous connecter à d'autres ports sur la même machine? De cette façon, vous pouvez déterminer si c'est la pile réseau ou Tomcat. –

+0

Même si vous utilisez des adresses IP, vous pouvez faire en sorte que le point de terminaison B tente de résoudre l'inverse de l'adresse IP. Est-ce que l'ajout d'un nom pour A dans le DNS local de B (/ etc/hosts) change quelque chose? – diciu

+0

diciu - ce n'est pas comme ça que TCP fonctionne. Un SYN/ACK ne fera pas la résolution DNS. – ripper234

Répondre

1

Il semble que le problème ne soit pas dans le client ou le serveur eux-mêmes. J'ai pris deux décharges de paquets sur le client et le serveur:

  1. Le client voit une différence de temps de 100-150 ms entre voir le SYN et recevoir le SYN/ACK.
  2. Le serveur ne voit qu'une différence de temps de 20 ms entre la réception du SYN et l'envoi du SYN/ACK.

Ergo, le problème doit être dans une couche intermédiaire (routeur/firewall/whatnot).

+0

Hmm vérifiez ma réponse sur SO pour rire. http://serverfault.com/questions/92167/why-am-i-getting-long-tcp-connect-latency-on-connect-in-a-lan-over-a-cross/92546#92546 – ripper234