关于tcp健康检查

方法1: connect then close

这种情况,上层应用会感知到一个连接的进入,并准备开始处理,然后便因为client端close而中止

方法2: send syn then receive syn-ack then send reset

这样的话,远端根本不需要完成一个tcp连接,也不会被上层应用感知到;这样需要更加底层的socket(raw socket)编程

方法3: send syn then receive syn-ack then send ack then send reset

2015-12-17 更新:

初写这篇文章时,阿里金融云SLB的tcp健康检查使用的是方法1,也是因此才写的该文章;今天发现阿里金融云SLB的tcp健康检查使用的是方法2,于是在此更新一下该文章。

2016-11-10 更新:

发现阿里金融云的SLB的tcp健康检查又不是方法2了, 阿里云文档上写的是方法2,实际上不是方法2,而是方法3,方法3更坑爹,有些web server会报client异常关闭连接

2018-8-2 更新:

SLB的HTTP模式下,健康检查允许关闭, TCP模式下不允许关闭健康检查;虽然允许设置检查其他端口来避免健康检查对某些服务的骚扰,但依然觉得很别扭;

2018-11-09更新:

对于HTTP服务,仅检查端口存活不大严格,如果进程假死,依然无法提供服务,但是端口是活的,所以,对于HTTP服务,通过HTTP请求来检查还是比较合理的,为了避免不必要的访问日志,可以对这种请求不记录访问日志

 

nmap 的半连接端口检查:

 

 

 

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据