浏览器如何处理多个IP


11

当浏览器获得给定主机名的多个A记录(例如ip1和ip2)并且其中之一不可访问时,有人可以引导我了解有关确切浏览器行为的信息。

我对EXACT的详细信息感兴趣,例如(但不限于):

  1. 浏览器将从OS获得2个IP,还是仅获得1个?
  2. 浏览器将首先尝试哪个IP(随机或始终是第一个)?现在,假设浏览器以失败的ip1开始
  3. 浏览器将尝试ip1多长时间?
  4. 如果用户在等待ip1时单击“停止”,然后单击“刷新”
    • 浏览器将尝试使用哪个IP?
  5. 超时时会发生什么-它会开始尝试ip2还是给出错误?(如果出现错误,当用户单击刷新时,浏览器将尝试使用哪个ip)。
  6. 当用户单击刷新时,任何浏览器都会尝试新的DNS查找吗?

现在,假设浏览器首先尝试运行ip2。

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

当然,所有内容都可能取决于浏览器,并且版本和平台之间也可能有所不同,我很乐意拥有最多的细节。

这样做的目的-我试图了解当使用基于循环DNS的主机且其中一台主机发生故障时,用户将确切体验什么。

拜托,我不是在问DNS负载平衡有多糟糕,请不要回答“不要这样做”,“这是个坏主意”,“您需要心跳/代理/ BGP /任何东西”等等。


1
Firefox有一个浏览器扩展,可以显示IP地址以及当前使用的IP地址(addons.mozilla.org/en-US/firefox/addon/showip/?src=search)。您还可以使用Firebug的“网络”标签来显示IP请求是由谁提供的。显然,这仅与Firefox有关,但我相信Chrome开发者控制台会显示IP请求是由其提供的。
涂抹

另请注意,某些ISP的DNS服务器只会返回一个IP地址,为什么他们这样做我也不知道
涂抹

谢谢山姆。是的,chrome控制台显示DNS查找,缓存并显示请求的IP。
Sandman4 2011年

如果您想谈论确切的行为,那么关于Web浏览器如何处理记录的第一件事要注意的是它们没有。名称解析由网络堆栈处理。那么,您是要询问一些您已经注意到的特定浏览器奇怪问题,还是要询问名称解析?
罗伯·摩尔

浏览器确实(从网络堆栈)接收A记录中列出的主机名的多个IP。在Google Chrome浏览器中,尝试chrome:// net-internals /#dns看看自己。
Sandman4

Answers:


5

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

通常它是这样工作的:尝试1st ip,一旦超时(189秒后),尝试2nd ip。在所有ip尝试之前,不会给出错误消息。下次连接将从第一个ip重新开始(即使第二个IP刚刚失败并且第二个ip也起作用-浏览器不在乎)

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

关于原始问题中的项目:

  1. 浏览器从OS获取两个IP,OS不会更改IP的顺序。
  2. 浏览器始终尝试连接到首先出现的ip
  3. 尝试189秒
  4. 第二次尝试时,它将再次尝试第一个IP。
  5. 当第一个IP超时时,浏览器将静默继续到第二个IP。如果有效,则会显示该页面;否则,将继续等待。
  6. 未经测试。该博客指出,当我们查看chrome:// net-internals /#dns时,Chrome最多可以缓存DNS 1分钟:

    容量:100成功输入的生存时间(毫秒):60000故障输入的生存时间(毫秒):0

如果第一个IP有效,则过程将相同,并且在第一次尝试时始终会成功。


4

与其告诉别人您不想要的东西,不解释您要达到的目标?

如果您所需要的只是已知数据,那么请继续调查自己,或者阅读您正在谈论的任何浏览器(有数百种)的文档。

但是,这可能有助于您了解与DNS无关。

如果浏览器收到请求,它将首先在其各种缓存中查找是否存在URL,如果没有,则显示主机名。
如果不是,它将命中系统解析器以解析主机名。

如果返回的IP没有响应,则肯定会在内部将其缓存为否定查询结果,因此直接再次请求相同的URL以希望找到不同的A记录将毫无用处,因为它将已存储主机名结果和IP否定结果。

或者,您可以提供更多信息。

编辑:我看到您确实在所有苛刻的需求和智能资产之间提供了一些信息。

很好:

  1. 如果浏览器要求系统解析器提供主机名,它将获取该主机名的所有信息。如果这意味着2个IP,则它将返回2个IP。
  2. 那取决于浏览器。
  3. 这取决于浏览器,但是我曾经使用过的所有浏览器都执行单个请求,并且会在标准TCP CONNECT()超时后超时;我相当确定某个地方有一个RFC ...
  4. 那取决于浏览器。它与DNS或网络无关。
  5. 没有。
  6. 没有。

您似乎还不知道DNS记录到处都是缓存,尤其是在客户端上。这些记录将到期,具体取决于域所有者的意图或您与他之间配置的缓存。一小时到一天是很常见的情况,因此,如果您像疯子一样刷新一下,请不要指望解析器会执行另一个DNS查询。


2
添加了对我要达到的目标的解释。我希望了解已知数据,因为有人可能需要几天的时间才能找到相关信息。苛刻?我要的是我需要的信息,我不能要求-每个人都可以自由回答。智能资产?我因您的帖子而受到伤害,我认为我不值得。
Sandman4 2011年

1
我只是不想让讨论变成反对DNS负载平衡的话题。无论如何,感谢您将我指向TCP CONNECT()。
Sandman4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.