我对EXACT细节很感兴趣,比如(但不限于):
>浏览器会从操作系统获得2个IP,还是只能获得一个?
>哪个ip将首先尝试浏览器(随机或始终是第一个)?
现在,让我们说浏览器以失败的ip1开始
>浏览器尝试ip1多长时间?
>如果用户在等待ip1时点击“停止”,然后单击刷新
>哪个IP将浏览器尝试?
>超时时会发生什么 – 它会开始尝试ip2还是
给错误? (如果错误,用户将在浏览器中尝试ip
点击刷新).
>当用户点击刷新时,任何浏览器都会尝试新的DNS查找吗?
现在让我们假设浏览器首先尝试使用ip2.
>对于下一页请求,浏览器仍然会使用ip2,或者它可能是随机的
切换ips?
>浏览器将IP保留在缓存中多长时间?
>当浏览器发送新的DNS请求并获得SAME ips时,是否会
继续使用相同的已知工作IP,或者流程从中开始
划伤,它可能尝试两个中的任何一个?
当然这一切都可能取决于浏览器,也可能因版本和平台而异,我很乐意拥有最多的细节.
这样做的目的 – 我试图了解当使用基于循环的DNS并且其中一个主机发生故障时用户将会遇到什么.
请问,我不是在问DNS负载均衡有多糟糕,请不要回答“不要做”,“这是一个坏主意”,“你需要心跳/代理/ BGP /无论如何”等等.
解决方法
通常它的工作原理是:尝试1-ip ip,一旦超时(189秒后)尝试2-nd ip.在所有ips尝试之前没有给出错误消息.下一个连接将从第一个ip再次开始(即使它在一秒钟之前失败,第二个ip工作 – 浏览器不关心)
一个有趣的事情 – 当用户点击取消时不会丢弃TCP连接尝试 – 即当我点击取消时,60秒后点击重试,页面将在130秒内显示(第一次尝试时为189).但是如果我点击取消并点击190秒后刷新,该过程将从头开始.
关于原始课题中的项目:
>浏览器从操作系统获取两个IP,操作系统不会更改IP的顺序.
>浏览器总是尝试连接到首先出现的ip
>它尝试189秒
>在第二次尝试时,它将再次尝试IP.
>当第一次IP超时时,浏览器会静默继续第二次IP.如果它工作 – 页面显示,如果没有 – 等待继续.
>未经测试. This blog声明当我们查看chrome:// net-internals / #dns时,Chrome会将DNS缓存最多1分钟:
容量:100
成功条目的生存时间(ms):60000
失败条目的生存时间(ms):0
如果第一个IP工作,进程将是相同的,并且它将始终在第一次尝试时成功.