基本概念区分
- TCP的Keepalive:由TCP层(内核态)实现,称为TCP保活机制。
- HTTP的Keep-Alive:由应用层(用户态)实现,称为HTTP长连接。
HTTP的Keep-Alive
- 工作原理:允许使用同一个TCP连接发送和接收多个HTTP请求/应答,避免连接建立和释放的开销。
- 特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态。
- 实现方式:
- HTTP 1.0:默认关闭,需在请求头添加
Connection: keep-alive
来开启。 - HTTP 1.1:默认开启,需在请求头添加
Connection: close
来关闭。
- HTTP 1.0:默认关闭,需在请求头添加
- HTTP流水线技术:允许客户端一次性发送多个请求,不需等待服务器回应。
- 队头阻塞问题:服务器响应顺序,可能造成客户端无法发出下一批请求。
- 资源浪费问题:通过
keepalive_timeout
参数设置超时时间,避免TCP连接长时间占用。
TCP的Keepalive
- 工作原理:当TCP连接长时间无数据交互时,内核发送探测报文以检测对方是否在线。
- 探测机制:
- 正常响应:重置保活时间。
- 无响应:连续几次后,TCP报告连接死亡。
- 实现条件:应用程序需通过socket接口设置
SO_KEEPALIVE
选项。
总结
- HTTP的Keep-Alive减少了HTTP短连接的开销,由应用程序实现。
- TCP的Keepalive确保长时间无数据交互的连接有效性,由内核实现。