TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?

事实上,这两个完全是两样不同东西,实现的层面也不同:

  • HTTP 的 Keep-Alive,是由应用层(用户态) 实现的,称为 HTTP 长连接;
  • TCP 的 Keepalive,是由 TCP 层(传输层、内核态) 实现的,称为 TCP 保活机制;

HTTP

短连接:在一次TCP连接中只能发送和响应一个HTTP请求,即:建立TCP->请求资源->响应资源->释放连接

长连接:在一次TCP连接中可以发送和响应多个HTTP请求

web服务软件会提供keepalive_timeout 参数和启动一个定时器,用来指定HTTP长连接的超时时间。如果在完成了一个HTTP请求后,在HTTP的超时时间之内没有发送新的HTTP请求,则调用回调函数释放TCP连接。

长连接的优点:减少多次TCP连接所带来的开销,给HTTP流水线技术提供了可实现的基础。
HTTP流水线:客户端一次可以发送多个请求,在发送过程中不需要等待服务器端的响应,减少了整体响应的时间。

TCP:

如果对端程序正常工作,在发送探测报文后,对端程序会进行正常的响应,此时TCP保活时间会被重置。

如果对端程序宕机:(是宕机,而不是进程崩溃。如果进程崩溃,操作系统在回收进程资源时会发送FIN报文来释放连接,而宕机的情况下是无法感知到的,所以需要TCP保活机制),或对端由于其他原因导致报文不可达时,会发送探测报文,当连续多个探测报文都没有回应时,TCP会报告TCP连接已死亡。

注意,应用程序若想使用 TCP 保活机制需要通过 socket 接口设置 SO_KEEPALIVE 选项才能够生效,如果没有设置,那么就无法使用 TCP 保活机制。

总结

HTTP 的 Keep-Alive 也叫 HTTP 长连接,该功能是由「应用程序」实现的,可以使得用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,减少了 HTTP 短连接带来的多次 TCP 连接建立和释放的开销。

TCP 的 Keepalive 也叫 TCP 保活机制,该功能是由「内核」实现的,当客户端和服务端长达一定时间没有进行数据交互时,内核为了确保该连接是否还有效,就会发送探测报文,来检测对方是否还在线,然后来决定是否要关闭该连接。

上述内容,用于本人学习相关专业知识,如有问题,请联系我,谢谢。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值