先介绍下业务背景:
最近由于业务调整,加了个上传附件的功能,采用的是http form 表单提交。使用的工具是httpclient-4.4.1,MultipartEntityBuilder方式直接提交。每次上传文件成功之后,就大概率出现后面的post请求read time out。整个文件大小在100kb左右,耗费的时间大概是1s到2s。抓包发现每次要是文件上传出现tcp Retransmission/TCP Out_of_Order等错误情况下,后面的请求无法正常连接对方服务器,请求则出现read time out.、
分析下面的抓包情况(文章底部有WireShark错误说明):
上面的情况很有可能是网络的原因,又由于时间紧迫,对方这个接口已经上线一年了。
说他们没问题,没法继续查。
一旦出现了上面这种情况,后面的请求只要是该端口发送到443,则一定会出现read time out.
http4以上,众所周知都是Apache自己去有连接池去连接,并不是我们手动去管理连接了。
由于时间紧迫,对方提出了用sftp上传文件,还没找出为啥,这个问题就绕过去了。简单记录下吧。
WireShark出现的常见提示
TCP Out_of_Order的原因分析:一般来说是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元,因为他们可能是由不同的路径到达你的电脑上面。
TCP Retransmission原因分析:
很明显是上面的超时引发的数据重传。
TCP dup ack XXX#X原因分析:
就是重复应答#前的表示报文到哪个序号丢失,#后面的是表示第几次丢失。
tcp previous segment not captured原因分析
意思就是报文没有捕捉到,出现报文的丢失。
参考:
http://blog.csdn.net/chenfengdejuanlian/article/details/53761004