0

http标头:Connection: Keep-Alive

阅读了很多关于这个之后,我仍然无法理解它是如何工作的。

维基

保活信号也可用于向 Internet 基础设施指示应保留连接。如果没有 keepalive 信号,启用 NAT 的中间路由器可以在超时后断开连接。

我不明白:

一个服务器可以有 1,000,000 个当前连接。

John 向服务器发送请求。

Paul 的计算机在 Paul 附近的同一个局域网上。paul 还向同一服务器发送请求。

约翰和保罗的组织在路由器后面。

在此处输入图像描述

服务器怎么知道如何为 paul和john保持连接?

另外,当约翰第二次发送请求时,它“没有打开新的连接”,那么这里如何应用keep-alive?

4

1 回答 1

3

首先,TCP/IP 连接不是临时连接两台计算机的细线。归根结底,TCP/IP 和 UDP 都只是一系列数据包。操作系统通过将 IP 数据包按正确顺序重新组合在一起来假装您已建立连接。

现在回到你的问题。请注意,问题并不是真正的 HTTP 特定的,所有这些都适用于 TCP/IP 层。假设 Paul 有192.168.0.100,John 有192.168.0.101内部 IP 地址,而 NAT 有公共1.2.3.4地址。当 Paul 连接到某个服务器时,他的操作系统使用192.168.0.100:54321地址(端口由操作系统随机选择)。此请求命中 NAT,后者会记住该地址并将请求转发到外部服务器。外部服务器看到 1.2.3.4:4321(注意不同的端口)因为用户位于 NAT 后面,因此内部 IP 不可见。

当外部服务器(让它成为 Web 服务器)发送回复时,它会将其发送到1.2.3.4:4321. 另一方面,NAT 记得4321端口应该被转发到 192.168.0.100:54321` - 就是这样。

现在想象 John 向同一台服务器发送请求。此 TCP/IP 连接通过 NAT 路由,该 NAT 记住该请求来自192.168.0.101:321231.2.3.4:4322然后使用公共(注意不同的端口)转发此请求。当响应到达时,NAT 会检查端口,如果是4322,它会路由到192.168.0.101:32123(John)。否则(在港口4321)保罗会得到他的答复。

注意:不要混淆客户端临时端口和服务器端口(HTTP 默认为 80)。

于 2012-09-23T09:09:09.397 回答