java - FIN ACK TCP 延迟

标签 java sockets tomcat tcp httpclient

我有两个使用 HTTP 通信的服务器:查看部分客户端代码

 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

关于这个延迟有什么线索吗?

最佳答案

一个 FIN ACK 数据包被组装成:

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

在第一台服务器的 FIN 和 ACK 之间,是另一台服务器的 ACK 和 FIN 对,因此这个连接终止阶段(四次握手)需要时间才能发生。

问候

关于java - FIN ACK TCP 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621645/

相关文章:

java - FFT解释

java - 在运行时添加监听器? -Java MVC

java - 你如何在 IntelliJ 中做到这一点

tomcat - 如何在 Tomcat 6/7 中滚动日志文件?

java - sqlite 打开数据库 : './sqlite.db' : permission denied

java - 如何在 selenium webDriver 中为多个类创建相同的实例

c++ - 客户端和服务器之间连续的 UDP 数据包流问题

c++ - Linux 服务器中的接收缓冲区大小

wireshark - UDP 数据未正确读取(延迟)

java - 如何在 Mac 中获取 Tomcat 的堆转储和线程转储