0

i have two servers that communicate with HTTP: view part of client code

 PostMethod postMethod = new PostMethod(strURL);
    int bodylength=UCIPBodyRequestGen.toStringBodyRequest(_request, DEFAULT_CHARSET).length();
    setRequestHeader(postMethod,bodylength);
    postMethod.setRequestBody(requestBody);
    HttpClient myClient = new HttpClient();
    myClient.setConnectionTimeout(mcf.getTimeout());
    myClient.setTimeout(mcf.getTimeout());
   int statusCode = myClient.executeMethod(postMethod);
   responseBody=postMethod.getResponseBodyAsString();

i have a little delay in some request ~500ms and the other average is ~20ms

TCPDUMP show that the delay is in TCP FIN-ACK

2014-12-23 09:38:59.069230  HTTP/XML    1534    POST /Servlet HTTP/1.1 
2014-12-23 09:38:59.070450  HTTP    514 HTTP/1.1 200 OK 
2014-12-23 09:38:59.110758  TCP 66  14783?9770 [ACK] Seq=1469 Ack=450 Win=33920 Len=0 TSval=2321949059 TSecr=2321949019
2014-12-23 09:38:59.602623  TCP 66  14783?9770 [FIN, ACK] Seq=1469 Ack=450 Win=33920 Len=0 TSval=2321949551 TSecr=2321949019

any clue about this delay?

Darshan Lila
  • 5,772
  • 2
  • 24
  • 34
cool spook
  • 11
  • 3
  • Maybe this helps: http://stackoverflow.com/questions/11711218/client-sends-delayed-fin-ack-500ms-to-server – slowy Dec 23 '14 at 14:54

1 Answers1

2

A FIN ACK packet is assembled as:

http://upload.wikimedia.org/wikipedia/commons/thumb/5/55/TCP_CLOSE.svg/375px-TCP_CLOSE.svg.png

Between the first servers FIN and ACK, is the ACK and FIN pair of the other server, so this connection termination phase (four-way handshake) takes time to take place.

Regards

LetsCode
  • 82
  • 8