【发布时间】:2019-11-28 13:36:23
【问题描述】:
TCP KeepAlive 通过定期发送 ACK 来建立持久连接。 HTTP KeepAlive 可以将连接用于多个请求。
对于持久连接,如果使用 HTTP KeepAlive,则连接会在 HTTP KeepAlive 超时之间保持连接。因此,如标题所述,HTTP KeepAlive 成为 TCP KeepAlive 的替代品。
对吗?
【问题讨论】:
标签: http tcp keep-alive
TCP KeepAlive 通过定期发送 ACK 来建立持久连接。 HTTP KeepAlive 可以将连接用于多个请求。
对于持久连接,如果使用 HTTP KeepAlive,则连接会在 HTTP KeepAlive 超时之间保持连接。因此,如标题所述,HTTP KeepAlive 成为 TCP KeepAlive 的替代品。
对吗?
【问题讨论】:
标签: http tcp keep-alive
HTTP KeepAlive 成为 TCP KeepAlive 的替代品。
对吗?
没有。两者完全不同。
在 HTTP 中,如果没有设置 keep-alive,每个请求都将涉及自己的连接。请求完成后,连接将关闭。如果已设置,连接将被重复使用,但有一定限制。
这完全是关于服务器和客户端如何交互的,与底层网络层无关。
TCP 保持活动功能可确保连接上存在周期性流量。理论上,TCP 连接可以无限期地保持打开状态。但在实践中,这样的连接可能必须遍历一些维护连接状态的网络组件(例如 NAT 路由器),并且在一段时间没有活动后会丢弃该状态。
所以 TCP 的 keep-alive 的一种用途是保持连接处于活动状态,以便此类组件保持连接所需的状态。
另一方面,TCP 的一个特点是连接的物理链路可以暂时中断而不会出现问题,只要在瞬间中断期间两个端点都不需要连接。通常这是可取的,因为它允许对中断进行透明的恢复。但在某些情况下,服务器或客户端需要及时指示中断。在这种情况下,使用 keep-alive 功能可能会在连接上产生原本不会发生的错误,从而使端点能够识别中断。
(顺便说一句,正是这种“在不会发生连接错误的情况下产生连接错误”的效果让我个人觉得应该避免使用 TCP 的保持活动功能。但是,它确实有其合法用途,而其他人可能会以不同的方式评估利弊。)
TCP keep-alive 功能的这些效果都不是通过使用 HTTP keep-alive 功能来实现的。因此,后者绝对不能替代前者。
【讨论】: