我是靠谱客的博主 鲜艳乐曲,最近开发中收集的这篇文章主要介绍tcp、http中的保活机制keep-alive,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Tcp:
在双方长时间未通讯时,如何得知对方还活着?如何得知这个TCP连接是健康且具有通讯能力的?

  • TCP的保活机制就是用来解决此类问题,这个机制我们也可以称作:keepalive。保活机制默认是关闭的,TCP连接的任何一方都可打开此功能。有三个主要配置参数用来控制保活功能
    • 系统级:保活时间tcp_keepalive_time、探测时间间隔tcp_keepalive_intvl、探测循环次数tcp_keepalive_probes。
    • 保活时间(tcp_keepalive_time)默认7200秒,保活时间间隔(tcp_keepalive_intvl)默认75秒,探测循环次数(tcp_keepalive_probes)默认9次
      • 默认情况下一条TCP连接在2小时(7200秒)都没有报文交换后,会开始进行保活探测,若再经过9*75秒=11分钟15秒的循环探测都未收到探测响应,即共计:2小时11分钟15秒后会自动断开TCP连接。
    • 单条socket:保活时间TCP_KEEPIDLE、保活探测时间间隔TCP_KEEPINTVL、探测循环次数TCP_KEEPCNT
    • 是由 TCP 层(内核态) 实现的

如果在一段时间(保活时间:tcp_keepalive_time)内此连接都不活跃,开启保活功能的一端会向对端发送一个保活探测报文

  • 若对端正常存活,且连接有效,对端必然能收到探测报文并进行响应。此时,发送端收到响应报文则证明TCP连接正常,重置保活时间计数器即可
  • 在探测过程中,对端主机会处于以下四种状态之一:
    在这里插入图片描述

http:

  • 是由应用层实现的
  • http1.0默认是关闭的,通过http请求头设置“connection: keep-alive”进行开启;http1.1中默认开启,通过http请求头设置“connection: close”关闭
  • 在一次http请求中,服务器进行响应后,不再直接断开TCP连接,而是将TCP连接维持一段时间。在这段时间内,如果同一客户端再次向服务端发起http请求,便可以复用此TCP连接,向服务端发起请求,并重置timeout时间计数器,在接下来一段时间内还可以继续复用
  • 优点:1、keep-alive机制避免了频繁建立和销毁连接的开销。 2、减少服务端TIME_WAIT状态的TCP连接的数量

区别:

  • 发送方式:tcp具备双端连续收发报文的能力,开启了keep-alive的HTTP连接,由于协议本身的限制,服务端无法主动发起应用报文。
  • TCP中的keepalive是用来保鲜、保活的;HTTP中的keep-alive机制主要为了让支撑它的TCP连接活的的更久,所以通常又叫做:HTTP persistent connection(持久连接) 和 HTTP connection reuse(连接重用)

最后

以上就是鲜艳乐曲为你收集整理的tcp、http中的保活机制keep-alive的全部内容,希望文章能够帮你解决tcp、http中的保活机制keep-alive所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部