HTTP KeepAlive 可以作为TCP KeepAlive 的替代品吗?
HTTP KeepAlive can be as a substitute for TCP KeepAlive?
TCP KeepAlive通过定时发送ACK建立持久连接。
HTTP KeepAlive 可以使用多个请求的连接。
对于持久连接,如果使用了HTTP KeepAlive,则在HTTP KeepAlive超时期间保持连接。因此,如标题所述,HTTP KeepAlive 成为 TCP KeepAlive 的替代品。
对吗?
HTTP KeepAlive become as a substitute for TCP KeepAlive.
Is that correct?
没有。两者完全不同。
在 HTTP 中,如果没有设置 keep-alive,每个请求都会涉及到它自己的连接。请求完成后,连接将关闭。如果已设置,连接将在一定限度内重复使用。
这完全是关于服务端和客户端如何交互的,与底层网络层无关。
TCP 保持活动功能可确保连接上有周期性流量。理论上,TCP 连接可以无限期地保持打开状态。但在实践中,这样的连接可能必须遍历一些维护连接状态的网络组件(例如 NAT 路由器),并且在没有 activity.
的情况下经过一段时间后将丢弃该状态。
所以 TCP 的 keep-alive 的一个用途是保持连接活跃,这样这些组件就保持连接所需的状态。
另一方面,TCP 的一个特性是连接的物理 link 可以暂时中断而不会出现问题,只要在那个瞬间中断期间没有端点需要连接。通常这是可取的,因为它允许透明地恢复中断。但在某些情况下,服务器或客户端需要及时指示中断。在这种情况下,使用保持活动功能可能会在连接上产生错误,否则不会发生这种情况,从而使端点能够识别中断。
(顺便说一句,正是这种“在 none 否则会发生时产生连接错误”的影响让我个人觉得应该避免使用 TCP 的保持连接功能。但是,它确实有其合法用途,其他人可能会以不同的方式评估其优缺点。)
None TCP 保活功能的这些效果是通过使用 HTTP 保活功能实现的。因此,后者绝对不能替代前者。
TCP KeepAlive通过定时发送ACK建立持久连接。 HTTP KeepAlive 可以使用多个请求的连接。
对于持久连接,如果使用了HTTP KeepAlive,则在HTTP KeepAlive超时期间保持连接。因此,如标题所述,HTTP KeepAlive 成为 TCP KeepAlive 的替代品。
对吗?
HTTP KeepAlive become as a substitute for TCP KeepAlive.
Is that correct?
没有。两者完全不同。
在 HTTP 中,如果没有设置 keep-alive,每个请求都会涉及到它自己的连接。请求完成后,连接将关闭。如果已设置,连接将在一定限度内重复使用。
这完全是关于服务端和客户端如何交互的,与底层网络层无关。
TCP 保持活动功能可确保连接上有周期性流量。理论上,TCP 连接可以无限期地保持打开状态。但在实践中,这样的连接可能必须遍历一些维护连接状态的网络组件(例如 NAT 路由器),并且在没有 activity.
的情况下经过一段时间后将丢弃该状态。所以 TCP 的 keep-alive 的一个用途是保持连接活跃,这样这些组件就保持连接所需的状态。
另一方面,TCP 的一个特性是连接的物理 link 可以暂时中断而不会出现问题,只要在那个瞬间中断期间没有端点需要连接。通常这是可取的,因为它允许透明地恢复中断。但在某些情况下,服务器或客户端需要及时指示中断。在这种情况下,使用保持活动功能可能会在连接上产生错误,否则不会发生这种情况,从而使端点能够识别中断。
(顺便说一句,正是这种“在 none 否则会发生时产生连接错误”的影响让我个人觉得应该避免使用 TCP 的保持连接功能。但是,它确实有其合法用途,其他人可能会以不同的方式评估其优缺点。)
None TCP 保活功能的这些效果是通过使用 HTTP 保活功能实现的。因此,后者绝对不能替代前者。