主要观点总结
本文介绍了TCP的Keepalive和HTTP的Keep-Alive的区别和原理。两者实现层面不同,HTTP的Keep-Alive是应用层实现的长连接功能,可以减少TCP连接建立和释放的开销;而TCP的Keepalive是内核实现的保活机制,用于检测连接的存活状态。
关键观点总结
关键观点1: HTTP的Keep-Alive(长连接)
HTTP协议采用请求-应答模式,为了多次使用同一个TCP连接发送和接收多个HTTP请求/应答,减少了连接建立和释放的开销。在HTTP 1.1默认开启Keep-Alive,可通过请求包头中的Connection字段控制其开启和关闭。
关键观点2: TCP的Keepalive(保活机制)
TCP的Keepalive是内核实现的保活机制,用于在双方没有数据交互的情况下,通过发送探测报文来确定对方TCP连接的存活状态。应用程序需要通过设置SO_KEEPALIVE选项来使用此功能。
关键观点3: HTTP流水线技术
基于HTTP长连接实现的流水线技术允许客户端在同一TCP连接中一次性发送多个请求,而无需等待服务器的响应,减少了整体响应时间。但也存在队头阻塞问题。
文章预览
来自公众号: 小林coding 之前有读者问了我这么个问题: 大致问题是, TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗? 这是个好问题,应该有不少人都会搞混,因为这两个东西看上去太像了,很容易误以为是同一个东西。 事实上, 这两个完全是两样不同东西 ,实现的层面也不同: HTTP 的 Keep-Alive,是由 应用层(用户态) 实现的,称为 HTTP 长连接; TCP 的 Keepalive,是由 TCP 层(内核态) 实现的,称为 TCP 保活机制; 接下来,分别说说它们。 HTTP 的 Keep-Alive HTTP 协议采用的是「请求-应答」的模式,也就是客户端发起了请求,服务端才会返回响应,一来一回这样子。 请求-应答 由于 HTTP 是基于 TCP 传输协议实现的,客户端与服务端要进行 HTTP 通信前,需要先建立 TCP 连接,然后客户端发送 HTTP 请求,服务端收到后就返回响应,至此「请求-应答」
………………………………