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(连接重用)
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值