【问题标题】:HTTP KeepAlive can be as a substitute for TCP KeepAlive?HTTP KeepAlive 可以作为 TCP KeepAlive 的替代品吗?
【发布时间】:2019-11-28 13:36:23
【问题描述】:

TCP KeepAlive 通过定期发送 ACK 来建立持久连接。 HTTP KeepAlive 可以将连接用于多个请求。

对于持久连接,如果使用 HTTP KeepAlive,则连接会在 HTTP KeepAlive 超时之间保持连接。因此,如标题所述,HTTP KeepAlive 成为 TCP KeepAlive 的替代品。

对吗?

【问题讨论】:

    标签: http tcp keep-alive


    【解决方案1】:

    HTTP KeepAlive 成为 TCP KeepAlive 的替代品。

    对吗?

    没有。两者完全不同。

    在 HTTP 中,如果没有设置 keep-alive,每个请求都将涉及自己的连接。请求完成后,连接将关闭。如果已设置,连接将被重复使用,但有一定限制。

    这完全是关于服务器和客户端如何交互的,与底层网络层无关。

    TCP 保持活动功能可确保连接上存在周期性流量。理论上,TCP 连接可以无限期地保持打开状态。但在实践中,这样的连接可能必须遍历一些维护连接状态的网络组件(例如 NAT 路由器),并且在一段时间没有活动后会丢弃该状态。

    所以 TCP 的 keep-alive 的一种用途是保持连接处于活动状态,以便此类组件保持连接所需的状态。

    另一方面,TCP 的一个特点是连接的物理链路可以暂时中断而不会出现问题,只要在瞬间中断期间两个端点都不需要连接。通常这是可取的,因为它允许对中断进行透明的恢复。但在某些情况下,服务器或客户端需要及时指示中断。在这种情况下,使用 keep-alive 功能可能会在连接上产生原本不会发生的错误,从而使端点能够识别中断。

    (顺便说一句,正是这种“在不会发生连接错误的情况下产生连接错误”的效果让我个人觉得应该避免使用 TCP 的保持活动功能。但是,它确实有其合法用途,而其他人可能会以不同的方式评估利弊。)

    TCP keep-alive 功能的这些效果都不是通过使用 HTTP keep-alive 功能来实现的。因此,后者绝对不能替代前者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2011-03-16
      • 2011-07-12
      • 2011-09-25
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多