"半连接"检测的研究
来源:互联网 发布:fda医疗器械数据库 编辑:程序博客网 时间:2024/04/28 23:54
所谓半开TCP连接,简单地说就是发送了TCP连接请求,但还没有得到对方应答的状态(实际上要复杂些),也就是连接尚未完全建立起来,双方还无法进行通信交互的状态。
我这里讨论的"半连接"是在tcp已经建立后,进行通讯的过程中,一方的连接因为异常断掉,另一方没有收到任何数据包,仍处于ESTABLISHED的状态。
半连接占用了tcp的资源,在大量并发的网站会使服务器资源耗尽而导致服务器的假死甚至瘫痪。另半连接的状态下,tcp协议栈仍能正常工作,应用层的程序不能觉察。
检测半连接的方法,一般使用tcp提供的keepalive的属性,需要设置的选项包含;
setsockopt函数的选项,组合使用:
SOL_SOCKET, SO_KEEPALIVE
IPPROTO_TCP, TCP_KEEPIDLE
IPPROTO_TCP, TCP_KEEPINTVL
IPPROTO_TCP, TCP_KEEPCNT
当tcp协议栈检测到半连接的状态,会发送reset包,关闭连接,避免产生time_wait的状态。
也用在业务层发送心跳包,检测半连接,但是一定要有响应包,如果超时,就关闭连接。close会产生time_wait.
如果只发送心跳包是没法检测半连接的,因为应用层会把包发送到tcp的发送缓冲区,不返回错误信息。
- "半连接"检测的研究
- 前景检测方面的研究
- 表连接的研究
- 失效连接的检测
- 碰撞检测中的K_DOPS算法的研究
- 显著目标检测的研究思路
- 三相异步电机检测技术的应用研究
- 图像检测技术的研究现状
- 时间序列异常检测机制的研究
- Oracle数据库的连接研究
- 碰撞检测的资源连接
- 数据连接池的研究与实现
- 关于String 连接的一些研究
- 基于DM642的图像边缘检测算法的研究
- 关于检测输入正误的提示的研究
- 如何去检测网络的连接状态
- TCP连接异常断开的检测
- 关于epoll检测异步连接的方法
- android4.0.3去掉底部状态栏statusbar,全屏显示示例代码
- jbpm4.4整合spring2.5
- uva 10229 - Modular Fibonacci(矩阵快速幂)
- UVA 991 Safe Salutations
- 如何在vs2010中设置C++ main 函数的实参int main(int argc ,char *argv[])
- "半连接"检测的研究
- C语言交换a和b的值
- 模板卷积Template Convolution
- XCode的文件组织
- 互联网广告的RTB革命
- web.xml中load-on-startup的作用
- 书:计算机网络高级软件编程技术(P88) 之 基础训练:路由追踪程序的实现(tracert程序)
- OCP-1Z0-052-V8.02-179题
- SVN 重定向