【问题标题】:Http header - Keep Alive misunderstanding?Http 标头 - Keep Alive 误解?
【发布时间】:2012-09-15 01:59:30
【问题描述】:

http 标头:Connection: Keep-Alive

在reading 说了这么多之后,我仍然无法理解它是如何工作的。

wiki:

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

我不明白:

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

John 向服务器发送请求。

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

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

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

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

【问题讨论】:

    标签: http httpwebrequest


    【解决方案1】:

    首先,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:32123 的请求。然后使用公共1.2.3.4:4322 转发此请求(注意不同的端口)。当响应到达时,NAT 检查端口是否为4322,它会路由到192.168.0.101:32123 (John)。否则(在端口4321)Paul 会得到他的回复。

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

    【讨论】:

    • 嗨。谢谢。但你实际上告诉我只有 65K 用户可以使用持久连接,因为1.2.3.4:[0..65k]..so ?
    • @RoyiNamir:查看Wikipedia:“理论上,每个 IP 地址可转换为一个外部地址的内部地址总数可高达 65,536 个” . BTW 投票迁移,与编程无关。
    • Tomas ,这里的人们在询问数据结构和内存分配 - (顺序或非顺序以及更多内部主题) - 这也与 编程 没有太大关系......所以我不同意你的观点:-),当我写一个请求时——我确实想知道我应该何时以及如何使用标头并提出合法性问题。
    • 当保罗提出 second 请求时,它仍然会像 prev 请求一样吗?
    • @RoyiNamir:当 Paul 发出两个并发请求时,他使用两个不同的临时端口,而 NAT 也使用不同的端口。当他发出两个后续请求时,操作系统很可能会为第二个请求分配不同的端口。
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2013-07-10
    • 2016-04-03
    • 2017-11-22
    • 2011-09-14
    相关资源
    最近更新 更多