http标头:Connection: Keep-Alive
在reading之后,我仍然无法理解它是如何工作的。
wiki:
保持活动信号可以 也可以用来向互联网基础设施表明 连接应该保留。没有保持活动信号 启用NAT的中间路由器可以在之后断开连接 超时。
我不赞成:
服务器可以拥有1,000,000个cuncorrent连接。
John向服务器发送请求。
保罗的计算器位于保罗附近的同一个地方。 paul还向同一台服务器发送请求。
John和保罗组织在路由器后面。
服务器如何知道如何为paul 和 john保持连接活动?
此外,当john第二次发送请求时,它“没有打开新的连接”,那么如何在这里应用keep-alive?
答案 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)。