我有两个使用 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 数据包被组装成:
在第一台服务器的 FIN 和 ACK 之间,是另一台服务器的 ACK 和 FIN 对,因此这个连接终止阶段(四次握手)需要时间才能发生。
问候
关于java - FIN ACK TCP 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621645/