2009-12-07 3 views
1

У меня есть процесс java на машине A, общающийся с Tomcat на машине B через TCP. TCP-соединение (только обмен syn-syn/ack) принимает последовательность 100 мс последовательно, в то время как запрос ping занимает 1 мс (сервисы находятся в одной локальной сети).TCP Connect занимает X100 дольше, чем ping

  1. Что может вызвать увеличение задержки при установлении соединения TCP?
  2. Как его оптимизировать?

Обратите внимание, что:

  • Это еще не является 3-полосная-рукопожатие, я измерения только обмен син/син-Ack.
  • Сервер - очень прочная машина, а не под нагрузкой.
  • Запрос на подключение - это IP-адрес, а не имя хоста, поэтому поиск DNS не выполняется. На самом деле это не имеет значения, так как я измеряю время синуса SYN, оставленного машиной A.
+0

Вы пытались подключиться к другим портам на одной машине? Таким образом, вы могли бы решить, будет ли это сетевой стек или Tomcat. –

+0

Даже если вы используете IP-адреса, вы можете указать конечную точку B, чтобы попытаться решить проблему обратного IP-адреса. Добавляет ли имя A в локальный DNS (/ etc/hosts) B что-нибудь изменить? – diciu

+0

diciu - это не то, как работает TCP. SYN/ACK не будет выполнять разрешение DNS. – ripper234

ответ

1

Кажется, проблема не в самом клиенте или сервере. Я взял две пакетные дампы на клиенте и сервере:

  1. Клиент видит разницу во времени 100-150 мс между просмотром SYN и получением SYN/ACK.
  2. Сервер видит только разницу во времени 20 мс между получением SYN и отправкой SYN/ACK.

Ergo, проблема должна быть в каком-то промежуточном слое (маршрутизатор/брандмауэр/whatnot).

+0

Хм, проверьте мой ответ на ТАК для смеха. http://serverfault.com/questions/92167/why-am-i-getting-long-tcp-connect-latency-on-connect-in-a-lan-over-a-cross/92546#92546 – ripper234