为什么https请求抓包的FIN如此怪异。

客户端是百度小程序,但应该跟客户端无关
正常的请求结束应该是这样的,keepalivetimeout到期服务器主动发送FIN包,客户端回应FIN包,链接结束。

但另一个服务器则很奇怪,请求结束后客户端没有回应FIN包

而是留到下个请求开始时跟SYN包一起发送

但是服务器好像是已经关闭上个链接了,所以没有理这个包,导致客户端一直发送这个无效的FIN包

这种奇怪的现象几个请求堆积起来就会导致客户端堵塞,最后请求超时
但有时服务器又会直接返回RST包终止,客户端反而没事了。

这是服务器哪里配置错了吗
这种现象导致我们线上的小程序请求偶尔会超时,请求成功率只有80%多,而正常成功率都应该是99%以上的,客户端代码翻遍了都没找到原因,最近才想到抓包看看,希望有人能解答下。
以下是超时请求

阅读 2.9k
1 个回答

从你的截图看到的似乎和你的描述不同,client 44364基于一些机制在较晚的时候才回复fin包给服务端,然后服务端一直没有回复ack给client,导致client一直尝试在重传这个ack。感觉此时问题在服务端,似乎是没有关闭连接导致的。此时client处于close_wait,而close_wait是没有超时,因此它会一直发发下去,除非server给他发rst,但是server应该很小几率会给他发rst,因为不在窗口里。

而客户端超时,rst这两个现象貌似跟这个问题无关。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进