网络:HTTP Keep-Alive 和 TCP Keepalive

HTTP Keep-Alive TCP Keepalive
含义 HTTP 长连接,持久连接 TCP 保活机制
实现 应用层(用户态) TCP 层(内核态)

HTTP Keep-Alive

  • HTTP 基于 TCP 协议
    • 进行 HTTP 通信之前,需要先建立 TCP 连接。
    • 结束 HTTP 通信之后,需要断开 TCP 连接。
  • HTTP 采用请求-应答模式:客户端发起请求,服务端才会返回响应。

短连接 & 长连接

  • 短连接

    • 每进行一次 HTTP 请求/应答,都建立和断开一个 TCP 连接
    • 客户端只能串行请求,且增加了双方的通信开销
  • 长连接

    • 只要任意一端没有明确提出断连,则保持 TCP 连接状态
    • 减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻服务端的负载。

    短连接与长连接

Keep-Alive

  • HTTP 1.0 默认关闭:如果要开启 Keep-Alive,客户端和服务器需要在报文首部中添加。

    Connection: Keep-Alive
    
  • HTTP 1.1 默认开启:如果要关闭 Keep-Alive,需要在报文首部中添加。

    Connection: close
    

TCP Keepalive

保活机制:在双方没有数据交互时,通过探测报文来确定对方 TCP 连接是否存活。

触发 TCP 保活机制的条件时,内核的 TCP 协议栈就会发送探测报文。

  • 对端程序正常工作:对端收到探测报文后会正常响应,此时会重置 TCP 保活时间

  • 对端主机宕机 or 探测报文不可达:如果达到保活探测次数后仍没收到对端响应,TCP 报告该 TCP 连接已经死亡

    TCP 保活机制

Hint

  • 进程崩溃 ≠ 主机宕机:进程崩溃后操作系统在回收资源时会发送 FIN 报文,而主机宕机无法感知。
  • 启用保活机制:应用程序使用 TCP 保活机制,需要通过 socket 设置 SO_KEEPALIVE 选项。
posted @   Jaywee  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

👇

点击右上角即可分享
微信分享提示