Http header - Keep Alive误解?

时间:2012-09-23 08:56:48

标签: http httpwebrequest

http标头:Connection: Keep-Alive

reading之后,我仍然无法理解它是如何工作的。

wiki

  

保持活动信号可以   也可以用来向互联网基础设施表明   连接应该保留。没有保持活动信号   启用NAT的中间路由器可以在之后断开连接   超时。

我不赞成:

服务器可以拥有1,000,000个cuncorrent连接。

John向服务器发送请求。

保罗的计算器位于保罗附近的同一个地方。 paul还向同一台服务器发送请求。

John和保罗组织在路由器后面。

enter image description here

服务器如何知道如何为paul john保持连接活动?

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

1 个答案:

答案 0 :(得分: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地址(端口由OS随机选择)。此请求命中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路由,记住来自192.168.0.101:32123的请求。然后使用公共1.2.3.4:4322转发此请求(注意不同的端口)。当响应到达时,NAT会检查端口是否为4322,它会路由到192.168.0.101:32123(John)。否则(在4321端口)保罗会得到他的答复。

注意:不要将client ephemeral port与服务器端口混淆(默认情况下为HTTP中的80)。