网络: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 @ 2023-07-09 15:56  Jaywee  阅读(72)  评论(0编辑  收藏  举报

👇