2014-12-23 71 views
0

我具有与HTTP通信的两个服务器:鉴于客户端代码部分延迟在FIN ACK TCP

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(); 

我有在一些请求~500ms和其他平均稍微延迟是~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 

关于这个延迟的任何线索?

+0

也许这可以帮助:http://stackoverflow.com/questions/11711218/client-sends-delayed-fin-ack-500ms-to-server – slowy

回答

1

甲FIN ACK分组组装为:

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

第一服务器FIN和ACK之间,是ACK和FIN对中的另一个服务器的,所以这种连接终止阶段(四向握手)需要时间才能发生。

问候