浏览器如何处理多个IP

当浏览器获得给定主机名称(例如ip1和ip2)的多个Alogging时,有人能够指导我获取有关确切浏览器行为的信息,并且其中一个不可访问。

我对EXACT的细节感兴趣,比如(但不限于):

  1. 浏览器会从操作系统获得2个IP,还是只有一个?
  2. 浏览器会先尝试哪个ip(随机或总是第一个)? 现在,让我们说浏览器开始与失败的ip1
  3. 浏览器要多久才会尝试ip1?
  4. 如果用户在等待ip1时点击“停止”,然后点击刷新
    • 哪个IP会浏览器试试?
  5. 当它超时会发生什么 – 它会开始尝试ip2或给出错误? (如果错误,当用户点击刷新时,浏览器将使用哪个ip)。
  6. 当用户点击刷新,任何浏览器将尝试新的DNS查找?

现在让我们假设浏览器首先尝试使用ip2。

  1. 对于下一个页面的请求,浏览器还会使用ip2,还是可能随机切换ips?
  2. 浏览器将IP保存在caching中多长时间?
  3. 当浏览器发送一个新的DNS请求,并获得SAME ips,它会继续使用相同的已知的工作IP,或该过程从头开始,它可能会尝试任何两个?

当然,这一切都可能依赖于浏览器,也可能在版本和平台之间有所不同,我很乐意拥有最多的细节。

这样做的目的 – 我试图了解什么时候用户将遇到什么时使用循环DNS基于使用和主机之一失败。

请不要问DNS负载平衡有多糟糕,请不要回答“不要这样做”,“这是一个坏主意”,“你需要心跳/代理/ BGP /不pipe”等等。

毕竟,我必须自己做“研究”。 这里是Chromium(版本12.0.742.112)行为(在Ubuntu 11.04上运行):

一般来说,它的工作原理是这样的:尝试1-st ip,一旦超时(189秒后),尝试2-ip ip。 没有错误信息,直到所有ips试图。 下一个连接将从第一个ip再次开始(即使它刚刚失败了,第二个ip工作 – 浏览器不关心)

一个有趣的事情 – 当用户点击取消时不会丢弃TCP连接尝试 – 即当我点击取消时,并在60秒后单击重试,页面将显示130秒(从第一次尝试189)。但是,如果我点击取消,然后单击190秒刷新,过程将从头开始。

关于原始问题中的项目:

  1. 浏览器从操作系统获取两个IP,操作系统不会更改IP的顺序。
  2. 浏览器总是尝试连接到首先出现的IP
  3. 它尝试189秒
  4. 在第二次尝试时,它将再次尝试第一个IP。
  5. 当第一次IP超时,浏览器默默继续第二个IP。 如果有效 – 页面显示,如果没有 – 等待继续。
  6. 没有testing。 当我们看chrome:// net-internals /#dns时, 这个博客指出Chrome浏览器的DNScaching长达1分钟。

    容量:100成功条目的生存时间(毫秒):60000失败条目的生存时间(毫秒):0

如果第一个IP工作,过程将是相同的,它将始终成功的第一次尝试。

不要告诉人们你不想要什么,为什么不解释你想要达到的目标呢?

如果你所追求的只是已知的数据,那么就去调查自己,或者阅读你正在谈论的任何浏览器(有数百个)的文档。

不过,这可能会帮助你知道这与DNS无关。

如果一个浏览器得到一个请求,它会首先在它的各种caching中查看URL是否已经存在,或者URL是否已经存在。
如果没有,它将命中系统parsing器来parsing主机名。

如果它返回的IP没有响应,它肯定会在内部caching这个负面的查找结果 ,所以直接再次请求相同的URL,希望为它创build一个不同的Alogging可能没有任何用处,因为它会已经存储了主机名结果以及负面的IP结果。

或者,你知道,你可以提供更多的信息。

编辑:我看你提供了所有的要求和smartassery之间的一些信息。

很好:

  1. 如果浏览器向系统parsing器请求一个主机名,它将返回该主机名的任何信息。 如果这意味着2个IP,那么它将返回2个IP。
  2. 这取决于浏览器。
  3. 这取决于浏览器,但是我曾经使用过的所有浏览器都会执行一个请求,并且会在标准的TCP CONNECT()超时之后超时。 我相当肯定有一个关于那个地方的RFC
  4. 这取决于浏览器。 它与DNS或networking无关。
  5. 没有。
  6. 没有。

您似乎也不知道DNSlogging在任何地方都被caching,特别是在客户端。 这些logging会过期,具体取决于域名所有者的意图或者您和他之间configuration的caching。 一小时到一天是常见的,所以不要指望parsing器做另一个DNS查询,如果你像疯子一样刷新。