Ja, die meisten Browser der letzten 5 bis 10 Jahre versuchen es mit den anderen A-Datensätzen, wenn einer nicht antwortet. Dies wird anscheinend manchmal als "Browser-Neuversuch" oder "Client-Neuversuch" bezeichnet. Informationen dazu finden Sie so ziemlich nur im Kontext der verschiedenen Browser-Exploits, die diese Funktion für Websites ermöglicht, die sie nicht verwenden (siehe DNS-Rebinding und DNS-Pinning , DNS-Pinning , DNS-Pinning , Anti-Anti-Anti-Pinning, Anti-Anti -anti-dns pinning und so weiter). Irgendwie ein schlechter Ruf, aber er beweist, dass er existiert.
So ziemlich jeder Browser erhält tatsächlich die vollständige Liste der A-Datensätze und prüft tatsächlich andere, wenn derjenige, den er verwendet, ausfällt. Sie können davon ausgehen, dass jeder Client 30 Sekunden warten muss, wenn er zum ersten Mal versucht, auf eine Site zuzugreifen, wenn ein Server ausfällt, bis eine Verbindung zu einer Arbeitsadresse hergestellt wird. Der Browser speichert dann zwischen, welche Adresse funktioniert, und verwendet diese Adresse für zukünftige Anforderungen, sofern dies nicht ebenfalls fehlschlägt. Anschließend muss er die Liste erneut durchsuchen. Also 30 Sekunden auf erste Anfrage warten, danach schön.
Aber es ist nicht etwas, das Sie unbedingt verwenden möchten, es wird viele Einschränkungen in Bezug auf Browserkompatibilität, Betriebssystemkompatibilität, Proxy-Kompatibilität und Cachesteuerungs-Header geben, die seltsame Auswirkungen darauf haben, ob sie sich daran erinnern, welche IPs ausgefallen sind oder anfangen zu haben Während dieser 30 Sekunden auf jede Anfrage warten, verwenden Benutzer, die benutzerdefinierte Clients für Ihre Site schreiben, GethostByname anstelle von Getaddrinfo und sind nicht in der Lage, das Failover, alle möglichen Probleme, zu bewältigen.
Sie können sich auch nicht auf mehrere A-Datensätze verlassen, um "Master" - und "Slave" -Server zuzulassen, da Sie nie wissen, welche Adresse ein Browser aus der Liste auswählen wird. Sie müssen alle in der Lage sein, Besucher beim Laufen zu behandeln, da jeder Verkehr bekommen kann, wenn er aktiv ist. Ein Browser könnte denken, dass Ihr dritter Server aus der Liste am attraktivsten ist, vielleicht sieht er am ähnlichsten aus und wählt ihn aus, obwohl alle drei noch aktiv sind.
Aber wenn Sie mit den Einschränkungen leben und ein einigermaßen einfaches HTTP-System haben, mit dem Sie die Interaktion mit dem Browser vorhersagen können, wird es funktionieren.
Oh, du wirst auch mit vielen Leuten zu tun haben, die dir sagen, dass es das nicht gibt (da dies vor 15 Jahren der Fall war). Sie können jedoch versuchen, einen Domain-Namen mit mehreren A-Einträgen zu telneten, einige mit toten und einige mit guten IP-Adressen, wenn Sie dies nachweisen müssen (ja, selbst ein gutes altes Telnet verwendet jetzt getaddrinfo und verarbeitet heutzutage mehrere A-Einträge ordnungsgemäß). - Es wird eine schöne Liste der IPs ausgedruckt, die es versucht, bis es schließlich erfolgreich ist.
Seien Sie gewarnt, dass Windows Vista die dummen Teile von RFC3484 implementiert (dh das Backportieren von IPV6 nach IPV4) und die IP-Adresse bevorzugt, die die meisten Präfixbits mit der IP-Adresse des Benutzers teilt, anstatt zufällig eine auszuwählen. Da die meisten Benutzer IP-Adressen haben, die mit 192.168 beginnen, bedeutet dies, dass die meisten Vista-Daten von jeder Ihrer IP-Adressen mit den meisten Präfix-Bits geteilt werden. Microsoft hat dieses Problem in Windows 7 und höher behoben, sodass es nicht mehr so problematisch ist wie früher.
quelle
Dies ist die grundlegende Methode zur Verteilung des DNS-Lastenausgleichs: DNS Round Robin. Dies hat nichts mit dem Browser zu tun, es hängt von der Implementierung des Resolvers und dem lokalen / Remote-Cache der DNS-Adresse ab. Änderungen sind, dass wenn ein Server ausfällt, Ihre Website aufgrund von Caching in der DNS-Schicht möglicherweise nicht erreichbar ist.
Hier finden Sie eine grundlegende Erklärung zu Round Robin DNS in WikiPedia.
quelle
nslookup cnn.com
unter Windows als auchhost cnn.com
unter Linux wird jedoch eine Liste von IP-Adressen zurückgegeben, sodass dies definitiv von der Implementierung des Browsers abhängt .Das Betriebssystem bestimmt, welche IP-Adresse verwendet werden soll, nicht der Browser. Windows führt ein Round-Robin-Verfahren für die zurückgegebene Liste durch (in der von DNS zurückgegebenen Liste), verwendet jedoch weiterhin dieselbe Adresse, bis DNS gelöscht wird oder das Zeitlimit überschritten wird. * ix-Implementierungen hängen teilweise von der Implementierung des gebündelten TCP-Stacks ab, folgen jedoch in der Regel auch einer Round-Robin-Methode.
quelle
InetAddress.getAllByName("example.com")
auflöse, erhalte ich eine Liste mit allen IP-Adressen, damit ich eine TCP-Verbindung zu allen herstellen kann, wenn ich möchte. Und es ist dasselbe, wenn Siegetaddrinfo()
in C verwenden. Es ist also definitiv eine Entscheidung, die die Entwickler treffen und nicht das Betriebssystem. Der DNS-Server entscheidet nur, in welcher Reihenfolge die Liste der IP-Adressen zurückgegeben wird.