CN112769651B - 一种tcp连接检测方法、装置及电子设备 - Google Patents
一种tcp连接检测方法、装置及电子设备 Download PDFInfo
- Publication number
- CN112769651B CN112769651B CN202110043041.9A CN202110043041A CN112769651B CN 112769651 B CN112769651 B CN 112769651B CN 202110043041 A CN202110043041 A CN 202110043041A CN 112769651 B CN112769651 B CN 112769651B
- Authority
- CN
- China
- Prior art keywords
- tcp
- connection
- target
- time
- socket
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/12—Network monitoring probes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
Abstract
本申请提供一种TCP连接检测方法、装置及电子设备,所述方法包括:获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号;检测所述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值;如果是,则基于与所述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与所述TCP连接对应的客户端发送所述keepalive报文;如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接。本申请可以在服务端未开启keepalive检测应用程序的情况下,及时检测出TCP死连接,以保证应用程序的正常运行。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种TCP连接检测方法、装置、电子设备及机器可读存储介质。
背景技术
客户端与服务端基于TCP协议进行通信时,通过三次握手的过程可以建立TCP连接,并为其分配一个文件描述符,用于收发数据,进行网络通信;客户端可以向服务端发送FIN报文,以通过四次挥手的过程关闭TCP连接,并释放为其分配的文件描述符。通常,应用程序可以使用的文件描述符的数量是有限的,文件描述符都被占用时,就无法建立新的TCP连接,导致应用程序无法正常提供服务。
在实际应用中,网络中断、服务器重启等异常情况,可能会导致服务端并未接收到来自客户端的用于关闭TCP连接的报文,认为TCP连接仍然保持为established状态,并且为其分配的文件描述符也会一直被占用。但是,客户端与服务端之间已经不会再通过该TCP连接进行通信了,就形成了TCP死连接。
发明内容
有鉴于此,本申请提供一种TCP连接检测方法、装置、电子设备及机器可读存储介质,以解决在服务端不支持或者未开启keepalive检测应用程序的情况下,无法及时释放TCP死连接占用的资源的问题。
本申请提供一种TCP连接检测方法,所述方法包括:
获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号;
检测所述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值;
如果是,则基于与所述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与所述TCP连接对应的客户端发送所述keepalive报文;
如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接。
可选的,所述获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,包括:
将服务端所维护的所有与established状态的TCP连接对应的TCP套接字依次确定为目标TCP套接字;
获取与目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号。
可选的,所述最近一次传输数据的时刻,包括:
最近一次发送数据的时刻与最近一次接收数据的时刻中的最小值。
可选的,所述如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接,包括:
如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则向所述客户端重新发送所述keepalive报文;
当向所述客户端重新发送所述keepalive报文的次数达到预设次数时,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接。
可选的,所述方法还包括:
当确定与所述目标TCP套接字对应的TCP连接为TCP死连接时,基于与所述目标TCP套接字对应的发送序列号和接收序列号生成TCP RST报文;
向与所述TCP死连接对应的服务端发送所述TCP RST报文,以关闭所述TCP死连接。
可选的,所述获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,包括:
按照预设的检测周期,周期性地获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,以确定与所述目标TCP套接字对应的TCP连接是否为TCP死连接。
本申请还提供一种TCP连接检测装置,所述装置包括:
获取单元,用于获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号;
检测单元,用于检测所述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值;
探活单元,用于如果所述检测单元检测到所述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔大于预设阈值,则基于与所述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与所述TCP连接对应的客户端发送所述keepalive报文;如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接。
可选的,所述获取单元,具体用于:
将服务端所维护的所有与established状态的TCP连接对应的TCP套接字依次确定为目标TCP套接字;
获取与目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号。
可选的,所述最近一次传输数据的时刻,包括:
最近一次发送数据的时刻与最近一次接收数据的时刻中的最小值。
可选的,所述探活单元,具体用于:
如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则向所述客户端重新发送所述keepalive报文;
当向所述客户端重新发送所述keepalive报文的次数达到预设次数时,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接。
可选的,所述装置还包括关闭单元,用于:
当所述探活单元确定与所述目标TCP套接字对应的TCP连接为TCP死连接时,基于与所述目标TCP套接字对应的发送序列号和接收序列号生成TCP RST报文;
向与所述TCP死连接对应的服务端发送所述TCP RST报文,以关闭所述TCP死连接。
可选的,所述获取单元,具体用于:
按照预设的检测周期,周期性地获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,以确定与所述目标TCP套接字对应的TCP连接是否为TCP死连接。
本申请还提供一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述方法。
本申请还提供一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述方法。
通过以上实施例,一方面,通过检测与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值,就可以确定客户端与服务端之间是否通过所述TCP连接进行通信,而无需对服务端所维护的所有TCP连接都生成keepalive报文来进一步地检测,从而可以合理利用系统资源;另一方面,扫描程序利用生成的keepalive报文,伪装为服务端进行keepalive检测,可以在服务端不支持或者未开启keepalive检测应用程序的情况下,确定与目标TCP套接字对应的TCP连接是否为TCP死连接,从而及时发现服务端所维护的大量TCP连接中的TCP死连接。
附图说明
图1是一示例性的实施例示出的一种TCP连接检测方法的流程图;
图2是一示例性的实施例示出的一种TCP连接检测装置的框图;
图3是一示例性的实施例示出的一种TCP连接检测装置所在电子设备的硬件结构图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本技术领域的人员更好地理解本说明书实施例中的技术方案,下面先对本说明书实施例涉及的检测TCP死连接的相关技术,进行简要说明。
在Linux操作系统中,套接字(socket)通过为其分配的文件描述符收发数据,进行网络通信。通常,应用程序可以使用的文件描述符的数量是有限的,文件描述符都被占用时,就没有可用的文件描述符,导致无法建立新的TCP连接,应用程序无法正常提供服务。由此可见,为了保证系统可以正常运行,应用程序可以正常提供服务,需要及时释放被占用的文件描述符。
在实际应用中,客户端与通信端基于TCP协议进行通信时,通过三次握手的过程可以建立TCP连接,并在服务端生成与该TCP连接对应的TCP套接字,以及为其分配一个文件描述符;客户端还可以向服务端发送FIN报文,以通过四次挥手的过程关闭对应的TCP连接,并释放为其分配的文件描述符。关于上述通过三次握手建立TCP连接以及通过四次挥手关闭TCP连接的过程,请参见相关技术,在此不再赘述。
当网络中断、服务器重启、防护强安全设备配置等异常情况导致TCP连接关闭时,由于服务端并未接收到来自客户端的FIN报文或者TCP RST报文,服务端可能会认为此TCP连接仍然存活,因此服务端所维护的与此TCP连接对应的TCP套接字中,记录的此TCP连接的状态一直保持为established状态;实际上,客户端与服务端之间已经不会再通过该TCP连接进行通信了,就形成了TCP死连接。然而服务端所维护的与此TCP连接对应的TCP套接字会一直占用着为其分配的文件描述符,可能会影响服务端上应用程序的正常运行,导致系统存在资源泄露的隐患。
在一种现有技术方案中,服务端可以开启keepalive检测应用程序,来检测服务端与客户端之间的TCP连接是否存活。服务端可以通过keepalive检测应用程序向客户端发送keepalive报文;当服务端接收到客户端响应于上述keepalive报文返回的响应报文时,就可以确定检测的TCP连接仍然存活;当服务端未接收到客户端响应于上述keepalive报文返回的响应报文时,就可以确定检测的TCP连接为TCP死连接;进一步地,服务端还可以利用keepalive检测应用程序关闭TCP死连接,以释放其占用的文件描述符。
但是,在上述现有技术方案中,一方面,由于不是所有的服务端应用程序都支持keepalive,如果服务端应用程序不支持keepalive,则无法利用keepalive检测应用程序来对TCP连接进行保活探测;另一方面,对于支持keepalive的服务端应用程序,用户需要在服务端手动配置,以开启keepalive检测应用程序,操作较复杂。
有鉴于此,本说明书旨在提出一种基于获取的目标TCP套接字的socket信息生成keepalive报文,来检测与目标TCP套接字对应的TCP连接是否为TCP死连接的技术方案。
在实现时,扫描程序获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号;
检测上述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值;
如果是,则基于与上述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与上述TCP连接对应的客户端发送上述keepalive报文;
如果未接收到上述客户端响应于上述keepalive报文返回的响应报文,则确定与上述目标TCP套接字对应的TCP连接为TCP死连接。
由此可见,相较于现有技术方案,在本说明书中的技术方案中,一方面,扫描程序可以基于获取的目标TCP套接字的socket信息生成keepalive报文,伪装为服务端进行keepalive检测,从而无需在服务端开启keepalive检测应用程序,可以使用户的操作更简单;另一方面,在服务端不支持或者未开启keepalive检测应用程序的情况下,可以及时发现服务端所维护的大量TCP连接中的TCP死连接。
下面通过具体实施例,并结合具体的应用场景对本申请进行描述。
请参见图1,图1是一示例性的实施例示出的一种TCP连接检测方法的流程图,上述方法执行以下步骤:
步骤101:获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号;
步骤102:检测上述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值;
步骤103:如果是,则基于与上述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与上述TCP连接对应的客户端发送上述keepalive报文;
步骤104:如果未接收到上述客户端响应于上述keepalive报文返回的响应报文,则确定与上述目标TCP套接字对应的TCP连接为TCP死连接。
在本说明书中,上述TCP连接检测方法应用于服务端,具体可以应用于服务端的应用程序,如扫描程序等。下面各实施例中,以上述TCP连接检测方法应用于服务端的扫描程序为例进行说明。
在本说明书中,扫描程序获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号。
在实际应用中,扫描程序可以获取上述目标TCP套接字的socket信息;其中,上述目标TCP套接字的socket信息,至少可以包括与上述目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号。关于与目标TCP套接字对应的发送序列号与接收序列号,请参见TCP滑动窗口的相关技术,在此不再赘述。
例如,在Linux内核中tcp_info结构体中加入snd_nxt和rcv_nxt字段,其中,snd_nxt字段表示发送序列号,rcv_nxt字段表示接收序列号,delta_transmit_time字段表示最近一次传输数据的时刻与当前时刻的时长间隔;利用tcp_get_info函数,可以读取目标TCP套接字的snd_nxt和rcv_nxt字段,并保存到tcp_info结构体中的对应字段上。扫描程序可以通过扩展后的TCP diag接口获取目标TCP套接字的delta_transmit_time、snd_nxt和rcv_nxt字段。
需要说明的是,在以上示出的实施方式中,snd_nxt和rcv_nxt字段是扩展得到的字段,相较于相关技术中的TCP diag接口,扩展后的TCP diag接口可以获取目标TCP套接字的snd_nxt和rcv_nxt字段,即可以获取与目标TCP套接字对应的发送序列号和接收序列号,以用于后续构造keepalive报文或者TCP RST报文。
在实际应用中,上述目标TCP套接字的socket信息,还可以包括与上述目标TCP套接字对应的TCP连接的源IP地址、源端口、目的IP地址、目的端口、TCP协议状态、最近一次发送数据的时刻与当前时刻的时长间隔、最近一次接收数据的时刻与当前时刻的时长间隔、进程ID以及进程名称等信息。应当理解的是,通过TCP diag接口可以获取与目标TCP套接字对应的TCP连接的相关信息,以上示出的socket信息仅仅是示例性的举例,并不对本说明书作限制。
在示出的一种实施方式中,扫描程序获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,具体包括:扫描程序将服务端所维护的所有与established状态的TCP连接对应的TCP套接字依次确定为目标TCP套接字;获取与目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号。
在实际应用中,在客户端与服务端之间通过三次握手的过程建立TCP连接后,并且在客户端向服务端请求通过四次挥手关闭该TCP连接之前,服务端与该TCP连接对应的TCP套接字可以维护其TCP状态为established状态;在服务端接收到客户端发送的FIN报文,开始四次挥手的过程后,服务端与该TCP连接对应的TCP套接字可以将其TCP状态依次转换为close-wait状态、last-ack状态以及close状态。由此可见,如果服务端未接收到客户端发送的FIN报文,导致形成的TCP死连接的TCP状态为established状态;所以,扫描程序可以将服务端所维护的所有与established状态的TCP连接对应的TCP套接字依次确定为目标TCP套接字,并对与每个目标TCP套接字对应的TCP连接依次进行检测,以确定是依然存活的TCP连接,还是TCP死连接。
例如,扫描程序可以先遍历服务端所维护的所有TCP套接字,获取所有与established状态的TCP连接对应的TCP套接字;扫描程序可以将上述TCP套接字依次确定为目标TCP套接字,并通过扩展后的TCP diag接口获取目标TCP套接字的delta_transmit_time、snd_nxt和rcv_nxt字段。
需要说明的是,如果在客户端与服务端之间进行四次挥手的过程中出现网络异常,导致形成的TCP死连接的TCP状态可能为close-wait状态或者last-ack状态;所以,扫描程序还可以将服务端所维护的所有与close-wait状态或last-ack状态的TCP连接对应的TCP套接字依次确定为目标TCP套接字,并对与每个目标TCP套接字对应的TCP连接依次进行检测,以确定是依然存活的TCP连接,还是TCP死连接,具体过程与以上示出的实施方式相似,在此不再赘述。
在本说明书中,扫描程序检测与上述目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值。
在实际应用中,由于客户端与服务端之间已经不再通过TCP死连接传输数据了,所以较长时间没有传输数据的TCP连接,就可能是TCP死连接。用户可以根据需求,灵活地配置阈值。如果扫描程序检测到与上述目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔大于预设阈值,就说明该TCP连接有可能是TCP死连接,也有可能是较长时间没有传输数据的存活的TCP连接,需要进一步的检测;如果扫描程序检测到与上述目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔小于或等于预设阈值,就说明该TCP连接仍然存活。
例如,用户可以根据需求,将预设阈值配置为1小时;扫描程序可以检测与目标TCP套接字对应的delta_transmit_time字段的值是否大于1小时。需要说明的是,关于上述预设阈值的具体取值,用户可以根据需求灵活设置,以上仅仅是示例性的描述,并不对本说明书做限制。
在示出的一种实施方式中,上述最近一次传输数据的时刻,包括最近一次发送数据的时刻与最近一次接收数据的时刻中的最小值。
在实际应用中,扫描程序可以分别获取与目标TCP套接字对应的最近一次发送数据的时刻与最近一次接收数据的时刻,对二者进行比较,将二者中较小的值作为最近一次传输数据的时刻。扫描程序还可以分别获取与目标TCP套接字对应的最近一次发送数据的时刻与当前时刻的时长间隔、以及最近一次接收数据的时刻与当前时刻的时长间隔,并将二者中较小的值作为最近一次传输数据的时刻与当前时刻的时长间隔。
例如,服务端所维护的目标TCP套接字的socket信息中,delta_last_data_send_time字段表示最近一次发送数据的时刻与当前时刻的时长间隔,delta_last_data_rcv_time字段表示最近一次接收数据的时刻与当前时刻的时长间隔。如果delta_last_data_send_time字段的取值为100秒,delta_last_data_rcv_time字段的取值为200秒,则将delta_last_data_send_time字段的取值赋给delta_transmit_time字段。
在本说明书中,如果与上述目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔大于预设阈值,则扫描程序基于与上述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与上述TCP连接对应的客户端发送上述keepalive报文。
在实际应用中,如果与上述目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔大于预设阈值,说明该TCP连接有可能是TCP死连接,需要进一步地检测。扫描程序可以基于与上述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与上述TCP连接对应的客户端发送上述keepalive报文。
例如,扫描程序可以利用raw socket,根据已获得的与目标TCP套接字对应的snd_nxt和rcv_nxt字段,还可以根据已获得的与目标TCP套接字对应的五元组信息等,构造出keepalive报文,并将生成的keepalive报文,发送给客户端。关于raw socket以及构造keepalive报文的具体过程,请参见相关技术,在此不作赘述。
需要说明的是,扫描程序可以伪装为服务端上安装的keepalive检测应用程序,基于构造出的keepalive报文实现探活检测,从而在服务端并未开启keepalive检测应用程序的情况下,确定与目标TCP套接字对应的TCP连接是否为TCP死连接,从而及时发现服务端所维护的大量TCP连接中的TCP死连接。
在本说明书中,如果扫描程序未接收到上述客户端响应于上述keepalive报文返回的响应报文,则确定与上述目标TCP套接字对应的TCP连接为TCP死连接。
在实际应用中,上述服务端可以接收上述客户端响应于上述keepalive报文返回的响应报文,上述扫描程序也可以利用raw socket接收上述响应报文。如果扫描程序接收到客户端响应于上述keepalive报文返回的响应报文,则可以确定与上述目标TCP套接字对应的TCP连接依然存活,不是TCP死连接。
例如,如果扫描程序向客户端发送生成的keepalive报文,没有接收到上述客户端响应于上述keepalive报文返回的响应报文,则可以确定与上述目标TCP套接字对应的TCP连接为TCP死连接。
需要说明的是,上述没有接收到上述客户端响应于上述keepalive报文返回的响应报文,可以是扫描程序利用raw socket没有接收到响应报文,也可以是扫描程序未监听到服务端接收到响应报文,本说明书不做限定。
在示出的一种实施方式中,如果扫描程序未接收到上述客户端响应于上述keepalive报文返回的响应报文,则确定与上述目标TCP套接字对应的TCP连接为TCP死连接,具体包括:如果扫描程序未接收到上述客户端响应于上述keepalive报文返回的响应报文,则向上述客户端重新发送上述keepalive报文;当向上述客户端重新发送上述keepalive报文的次数达到预设次数时,则确定与上述目标TCP套接字对应的TCP连接为TCP死连接。
在实际应用中,用户可以根据需求,灵活地配置预设次数,即重新发送保活探测报文的次数;如果向上述客户端重新发送上述keepalive报文的次数达到预设次数,才确定与上述目标TCP套接字对应的TCP连接为TCP死连接。用户还可以根据需求,灵活地配置等待时长,即keepalive报文的发送间隔;如果未接收到上述客户端响应于上述keepalive报文返回的响应报文,则在等待时长结束后,向上述客户端重新发送上述keepalive报文。
例如,用户可以根据需求,将预设次数配置为3次,将等待时长配置为3秒。如果扫描程序未接收到上述客户端响应于上述keepalive报文返回的响应报文,并且重新发送keepalive报文的次数不大于3次,则等待3秒后,向上述客户端重新发送上述keepalive报文;如果扫描程序未接收到响应报文,并且重新发送keepalive报文的次数已达到3次,则可以确定与上述目标TCP套接字对应的TCP连接为TCP死连接。
需要说明的是,在以上示出的实施方式中,一方面,扫描程序可以向客户端多次发送生成的keepalive报文,如果多次重新发送后依然未接收到客户端返回的响应报文,才确定该TCP连接为TCP死连接,从而可以减少误判率,避免网络问题导致服务端未接收到keepalive报文对应的响应报文,将仍然存活的TCP连接误判为TCP死连接;另一方面,用户可以灵活地配置预设次数和等待时长,从而合理地利用系统资源。
在示出的另一种实施方式中,上述TCP连接检测方法,还包括:当扫描程序确定与上述目标TCP套接字对应的TCP连接为TCP死连接时,基于与上述目标TCP套接字对应的发送序列号和接收序列号生成TCP RST报文;向与上述TCP死连接对应的服务端发送上述TCPRST报文,以关闭上述TCP死连接。
在实际应用中,扫描程序可以基于与上述目标TCP套接字对应的发送序列号和接收序列号生成TCP RST报文,并伪装成客户端,向上述服务端发送上述生成的TCP RST报文。
例如,扫描程序可以利用raw socket,根据已获得的与目标TCP套接字对应的snd_nxt和rcv_nxt字段,还可以根据已获得的与目标TCP套接字对应的五元组信息等,构造出TCP RST报文,并将生成的TCP RST报文发送给服务端。关于构造TCP RST报文的具体过程,请参见相关技术,在此不作赘述。
需要说明的是,在以上示出的实施方式中,扫描程序利用生成的TCP RST报文,在服务端未开启keepalive检测应用程序的情况下,可以直接关闭检测到的TCP死连接,从而及时释放TCP死连接所占用的文件描述符,避免出现资源泄漏;相较于通过重启进程来释放TCP死连接所占用的文件描述符的相关技术方案,本说明书的技术方案中,由于无需重启进程,就可以使服务端关闭检测到的TCP死连接,从而在无法重启进程的场景中,在检测并清除TCP死连接的同时,不会影响其他业务的正常运行。
另外,需要说明的是,扫描程序还可以基于与上述目标TCP套接字对应的发送序列号和接收序列号生成FIN报文,并发送给服务端,以使客户端与服务端重新通过四次挥手的过程关闭TCP连接,具体过程请参见相关技术,在此不再赘述。而扫描程序利用生成的TCPRST报文关闭TCP死连接时,无需等待四次挥手的过程,服务端接收到TCP RST报文时,可以直接触发应用程序关闭TCP死连接。
在示出的一种实施方式中,按照预设的检测周期,周期性地获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,以确定与上述目标TCP套接字对应的TCP连接是否为TCP死连接。
在实际应用中,用户可以根据需求,设置检测周期,以使扫描程序可以按照预设的检测周期,周期性地对服务端进行TCP连接检测。
例如,扫描程序对所有目标TCP套接字依次检测完毕后,如果用户预设的检测周期为6小时,则扫描程序可以进入睡眠状态;等到6小时后,再重新启动,获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,对服务端进行TCP连接检测。应当理解的是,关于预设的检测周期的具体时长,以上仅仅是示例性的描述,并不对本说明书做限制。
需要说明的是,在以上示出的实施方式中,扫描程序按照预设的检测周期,周期性地对服务端进行TCP连接检测,一方面,可以及时地发现服务端所维护的大量TCP连接中的TCP死连接;另一方面,可以避免过于频繁的检测影响系统性能。
通过以上技术方案可知,一方面,扫描程序检测与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值,可以确定客户端与服务端之间是否通过上述TCP连接进行通信,无需对服务端所维护的所有TCP连接都生成keepalive报文来进一步地检测,从而合理利用系统资源;另一方面,扫描程序利用生成的keepalive报文,伪装为服务端进行keepalive检测,可以在服务端不支持或者未开启keepalive检测应用程序的情况下,确定与目标TCP套接字对应的TCP连接是否为TCP死连接,从而及时发现服务端所维护的大量TCP连接中的TCP死连接。
与上述方法实施例对应地,本说明书还提供了一种TCP连接检测装置的实施例。
请参见图2,图2是一示例性的实施例示出的一种TCP连接检测装置的框图,上述装置可以包括如下所示模块:
获取单元201,用于获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号;
检测单元202,用于检测上述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值;
探活单元203,用于如果上述检测单元202检测到上述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔大于预设阈值,则基于与上述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与上述TCP连接对应的客户端发送上述keepalive报文;如果未接收到上述客户端响应于上述keepalive报文返回的响应报文,则确定与上述目标TCP套接字对应的TCP连接为TCP死连接。
在本实施例中,上述获取单元201,具体用于:
将服务端所维护的所有与established状态的TCP连接对应的TCP套接字依次确定为目标TCP套接字;
获取与目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号。
在本实施例中,上述最近一次传输数据的时刻,包括:
最近一次发送数据的时刻与最近一次接收数据的时刻中的最小值。
在本实施例中,上述探活单元203,具体用于:
如果未接收到上述客户端响应于上述keepalive报文返回的响应报文,则向上述客户端重新发送上述keepalive报文;
当向上述客户端重新发送上述keepalive报文的次数达到预设次数时,则确定与上述目标TCP套接字对应的TCP连接为TCP死连接。
在本实施例中,上述装置还包括关闭单元,用于:
当上述探活单元203确定与上述目标TCP套接字对应的TCP连接为TCP死连接时,基于与上述目标TCP套接字对应的发送序列号和接收序列号生成TCP RST报文;
向与上述TCP死连接对应的服务端发送上述TCP RST报文,以关闭上述TCP死连接。
在本实施例中,上述获取单元201,具体用于:
按照预设的检测周期,周期性地获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,以确定与上述目标TCP套接字对应的TCP连接是否为TCP死连接。
此外,本说明书还提供了一种TCP连接检测装置所在的电子设备的实施例。
与上述方法实施例对应地,本说明书还提供了一种TCP连接检测装置的实施例。本说明书的TCP连接检测装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器,将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,请参见图3,图3是一示例性的实施例示出的一种TCP连接检测装置所在电子设备的硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例只是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (10)
1.一种TCP连接检测方法,其特征在于,应用于服务端应用程序,所述服务端应用程序不支持keepalive,无法利用keepalive检测应用程序来对TCP连接进行保活探测;所述方法包括:
获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号;
检测所述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值;
如果是,则基于与所述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与所述TCP连接对应的客户端发送所述keepalive报文;
如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接。
2.根据权利要求1所述的方法,其特征在于,所述获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,包括:
将服务端所维护的所有与established状态的TCP连接对应的TCP套接字依次确定为目标TCP套接字;
获取与目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号。
3.根据权利要求1所述的方法,其特征在于,所述最近一次传输数据的时刻,包括:
最近一次发送数据的时刻与最近一次接收数据的时刻中的最小值。
4.根据权利要求1所述的方法,其特征在于,所述如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接,包括:
如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则向所述客户端重新发送所述keepalive报文;
当向所述客户端重新发送所述keepalive报文的次数达到预设次数时,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接。
5.根据权利要求1所述的方法,其特征在于,还包括:
当确定与所述目标TCP套接字对应的TCP连接为TCP死连接时,基于与所述目标TCP套接字对应的发送序列号和接收序列号生成TCP RST报文;
向与所述TCP死连接对应的服务端发送所述TCP RST报文,以关闭所述TCP死连接。
6.根据权利要求1所述的方法,其特征在于,所述获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,包括:
按照预设的检测周期,周期性地获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号,以确定与所述目标TCP套接字对应的TCP连接是否为TCP死连接。
7.一种TCP连接检测装置,其特征在于,应用于服务端应用程序,所述服务端应用程序不支持keepalive,无法利用keepalive检测应用程序来对TCP连接进行保活探测;所述装置包括:
获取单元,用于获取与服务端所维护的目标TCP套接字对应的TCP连接最近一次传输数据的时刻与当前时刻的时长间隔、发送序列号和接收序列号;
检测单元,用于检测所述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔是否大于预设阈值;
探活单元,用于如果所述检测单元检测到所述TCP连接最近一次传输数据的时刻与当前时刻的时长间隔大于预设阈值,则基于与所述目标TCP套接字对应的发送序列号和接收序列号生成keepalive报文,并向与所述TCP连接对应的客户端发送所述keepalive报文;如果未接收到所述客户端响应于所述keepalive报文返回的响应报文,则确定与所述目标TCP套接字对应的TCP连接为TCP死连接。
8.根据权利要求7所述的装置,其特征在于,还包括关闭单元,用于:
当所述探活单元确定与所述目标TCP套接字对应的TCP连接为TCP死连接时,基于与所述目标TCP套接字对应的发送序列号和接收序列号生成TCP RST报文;
向与所述TCP死连接对应的服务端发送所述TCP RST报文,以关闭所述TCP死连接。
9.一种电子设备,其特征在于,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行权利要求1至6任一项所述的方法。
10.一种机器可读存储介质,其特征在于,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现权利要求1至6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110043041.9A CN112769651B (zh) | 2021-01-13 | 2021-01-13 | 一种tcp连接检测方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110043041.9A CN112769651B (zh) | 2021-01-13 | 2021-01-13 | 一种tcp连接检测方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112769651A CN112769651A (zh) | 2021-05-07 |
CN112769651B true CN112769651B (zh) | 2022-04-26 |
Family
ID=75700119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110043041.9A Active CN112769651B (zh) | 2021-01-13 | 2021-01-13 | 一种tcp连接检测方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112769651B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114205260B (zh) * | 2021-11-08 | 2023-07-14 | 南方电网数字平台科技(广东)有限公司 | 基于go语言的tcp连接探活方法及装置 |
CN114285771B (zh) * | 2021-12-30 | 2024-02-06 | 阿里巴巴(中国)有限公司 | 一种tcp连接的连接状态追踪方法及装置 |
CN115225690B (zh) * | 2022-06-22 | 2024-04-19 | 中科驭数(北京)科技有限公司 | 基于硬件协议栈的tcp长连接保活方法及装置 |
CN115865734A (zh) * | 2022-12-02 | 2023-03-28 | 上海浦东发展银行股份有限公司 | 一种故障检测方法、数据生成方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101299689A (zh) * | 2008-06-19 | 2008-11-05 | 北京立通无限科技有限公司 | 一种在线检测的方法及邮件服务器 |
CN104378230A (zh) * | 2014-11-06 | 2015-02-25 | 上海斐讯数据通信技术有限公司 | 一种提高Telnet服务端稳定性的系统和方法 |
CN106941713A (zh) * | 2017-05-16 | 2017-07-11 | 努比亚技术有限公司 | 一种降低移动终端功耗的方法及其装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7219158B2 (en) * | 2000-07-21 | 2007-05-15 | Hughes Network Systems Llc | Method and system for improving network performance using a performance enhancing proxy |
US9215131B2 (en) * | 2012-06-29 | 2015-12-15 | Cisco Technology, Inc. | Methods for exchanging network management messages using UDP over HTTP protocol |
CN109347929B (zh) * | 2018-09-27 | 2023-08-22 | 中国平安人寿保险股份有限公司 | 基于轻量级接口的心跳模拟探测方法、装置及存储介质 |
-
2021
- 2021-01-13 CN CN202110043041.9A patent/CN112769651B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101299689A (zh) * | 2008-06-19 | 2008-11-05 | 北京立通无限科技有限公司 | 一种在线检测的方法及邮件服务器 |
CN104378230A (zh) * | 2014-11-06 | 2015-02-25 | 上海斐讯数据通信技术有限公司 | 一种提高Telnet服务端稳定性的系统和方法 |
CN106941713A (zh) * | 2017-05-16 | 2017-07-11 | 努比亚技术有限公司 | 一种降低移动终端功耗的方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112769651A (zh) | 2021-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112769651B (zh) | 一种tcp连接检测方法、装置及电子设备 | |
US20190273749A1 (en) | Unauthorized Communication Detection Apparatus and Recording Medium | |
CN111225020B (zh) | 一种用户态网络文件系统双栈访问方法、装置及设备 | |
TW201526654A (zh) | 實現視訊通話的方法及系統 | |
US9900385B2 (en) | Connection management device, communication system, connection management method, and computer program product | |
US11218541B2 (en) | Data storage method, storage server, and storage medium and system | |
KR20150120482A (ko) | 데이터 접속을 구축하기 위한 방법, 장치 및 시스템 | |
US20190150206A1 (en) | Method and Device for Establishing Wireless Connection through First Application on User Equipment | |
US10499311B2 (en) | Method and apparatus for implementing network sharing | |
CN112398847B (zh) | 一种基于TCP Socket和改进心跳机制的内网穿透方法和系统 | |
CN110213759B (zh) | 基于广播的防丢检测方法、存储介质和电子设备 | |
CN111314181A (zh) | 网络联通性诊断方法、装置、终端和存储介质 | |
CN111796948A (zh) | 一种共享内存访问方法、装置、计算机设备和存储介质 | |
CN113364885B (zh) | 微服务调用方法、装置、电子设备和可读存储介质 | |
CN111901386A (zh) | 一种远端文件处理的方法、系统、设备及可读存储介质 | |
JPWO2014076878A1 (ja) | データ共有システム | |
CN109766347B (zh) | 一种数据更新方法、装置、系统、计算机设备及存储介质 | |
CN113391931B (zh) | 基于蓝牙的远程控制方法、装置、计算机设备和存储介质 | |
CN112866238B (zh) | 会话控制方法及装置 | |
CN106487650B (zh) | 消息同步方法、及服务器 | |
CN114629820B (zh) | 网络连通性检测方法、装置、设备及介质 | |
US10080127B2 (en) | Network communication method | |
CN114285771B (zh) | 一种tcp连接的连接状态追踪方法及装置 | |
CN109819274B (zh) | 数据传输方法、数据处理方法及装置 | |
WO2016202080A1 (zh) | 一种获取地址的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |