扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
TCP连接无法正常关闭导致服务器接受正常连接要求
基于 TCP 的网络应用有基于常连接的应用和短连接的应用两种,常连接指应用客户端在同服务器建立 TCP 连接后一直保持,一般不断开连接。短连接指当应用客户端每次需要传输应用数据时同服务器建立 TCP 连接,在应用数据传输完成后将连接关闭的应用。当短连接的应用服务由于某种原因无法及时关闭应断开的 TCP 连接时,会造成连接资源的占用,严重时会影响新的 TCP 连接的建立,从而影响应用的数据传输。
本案例中是一个基于 HTTP 的应用服务,客户端通过浏览器访问应用服务,访问该应用服务的客户端数量不多,但经常出现无法正常访问的现象,问题描述如下。
每当系统运行一段时间后,出现客户端无法访问的现象,而服务器上的应用进程运行正常,CPU和内存占用率很少,重新启动服务器上的HTTP服务和应用服务进程后客户端访问恢复正常,该应用成为了一个需要“定期重启”的应用系统。
由于该问题是间隙性问题,无法预知发生的具体时间,我们部署了Infinistream对访问服务器的流量进行长期流量捕获,分析发生问题时的应用连接状态以及问题原因,分析的过程如下。
1. 定位应用无法访问的原因
通过 Infinistream Console 过滤当时无法正常访问应用的客户端的访问流量,通过数据包分析定位应用无法访问的原因。
快速过滤当时到访问量
解码分析连接数据
如上图所示,我们过滤分析当时客户端的访问流量,发现出现客户端的TCP连接请求被拒绝的现象,也就是说服务器出现了拒绝服务现象。
2. 确认服务器服务是否宕机
通过分析在此期间其它客户端的应用请求是否正常来确定服务是否宕机。
其他连接分析
发现存在正常的TCP连接,同时服务器的应用响应正常,由此可以确认,应用服务并没有宕机,可能是由于服务TCP层连接资源耗尽造成的服务器的拒绝服务。
3. 服务器连接数量分析
利用Infinsitream的Application Intelligence 分析功能,能对应用的新建连接数量、活动的连接数量、关闭连接数量等参数进行分析,从而确定服务器的TCP 连接情况。结果如下图。
活动连接数量分析
如上图所示,服务器的新建连接数量随时间不断增加,同时活动连接数量也不断增加,说明有些TCP连接没有关闭,最终连接数量越来越多,造成服务器无法接受新的连接请求。
4. 在服务器上通过netstat命令查看连接情况我们在服务器上通过netstat命令查看服务器的TCP连接情况,发现大量的close wait连接,甚至超过了established连接,很多连接处于关闭等待状态。这说明很多连接处于“FIN-Wait-1”状态下,等待关闭。
5. 进一步分析等待关闭的连接流量通过过滤所有的 TCP “ FIN ”数据包分析等待关闭的连接情况,确认是否存在没有正常关闭的连接。
分析连接中“ FIN ”
如上图所示,过滤出的所有“FIN”包分析中,发现很多连接中存在多个“FIN”包,存在连接无法正常关闭现象,我们针对其中的一个连接进行分析,来确认整个会话的过程。结果如下图。
连接数据解码分析
从上图我们可以看出,服务器在完成应用数据传输后,向客户端发送“FIN”包关闭连接请求数据包,但没有收到客户端的“FIN”回应数据包。从而无法正常关闭连接,随后服务器不断地向客户端发送“FIN”包,但都没有得到回应,而连接一直没有关闭,一般来说,如果连接的一方处于“FIN-WAIT-1”状态下超过一定时间,会自动转到“FIN-WAIT-2”状态下,并关闭连接,而该应用服务进程长时间处于“FIN-WAIT-1”状态下,无法关闭连接,导致活动连接数越来越多,直至无法建立新的连接,确实是不正常的。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者