Menggunakan beberapa A-record untuk domain saya - apakah browser web pernah mencoba lebih dari satu?

94

Jika saya menambahkan beberapa A-record untuk domain saya, mereka dikembalikan dalam urutan round robin oleh server DNS.

Contoh:

192.0.2.1 A example.com
192.0.2.2 A example.com
192.0.2.3 A example.com

Tetapi bagaimana reaksi web browser jika host pertama ( 192.0.2.1) tidak aktif (tidak dapat dijangkau)? Apakah mereka mencoba host kedua ( 192.0.2.2) atau apakah mereka mengembalikan pesan kesalahan kepada pengguna? Apakah ada perbedaan antara browser yang paling populer?

Jika saya menerapkan aplikasi saya sendiri, saya bisa menerapkan sehingga yang kedua digunakan jika yang pertama turun, jadi itu mungkin. Dan ini akan sangat membantu untuk membuat situs web yang toleran terhadap kesalahan.

Jonas
sumber

Jawaban:

87

Ya, sebagian besar peramban dari 5-10 tahun terakhir akan mencoba catatan A lainnya jika salah satu gagal merespons. Ini kadang-kadang disebut "coba lagi browser" atau "coba lagi klien" rupanya. Anda hanya akan menemukan banyak hal tentang hal itu dalam konteks berbagai eksploit browser yang memungkinkan fitur ini terhadap situs yang tidak menggunakannya (lihat rebinding DNS dan pinning DNS , pinning anti-dns, pinning anti-dns, pinning anti-anti-dns, anti-anti -anti-dns menyematkan , dan sebagainya). Agak reputasi buruk, tetapi itu membuktikan itu ada.

Cukup banyak setiap browser memang menerima daftar lengkap catatan A, dan memang memeriksa orang lain jika yang digunakan gagal. Anda dapat mengharapkan setiap klien menunggu selama 30 detik ketika mereka pertama kali mencoba mengakses situs ketika server sedang down, hingga terhubung ke alamat yang berfungsi. Browser kemudian akan men-cache alamat yang berfungsi dan terus menggunakan yang itu untuk permintaan di masa depan kecuali jika itu juga gagal, maka itu harus mencari melalui daftar lagi. Jadi 30 detik menunggu permintaan pertama, setelah itu baik-baik saja.

Tapi itu bukan sesuatu yang Anda ingin gunakan, itu akan memiliki banyak peringatan tentang kompatibilitas browser, kompatibilitas os, kompatibilitas proxy, header kontrol-cache akan memiliki efek aneh pada apakah ia mengingat IP yang turun atau mulai memiliki bahwa 30 detik menunggu pada setiap permintaan, orang yang menulis klien khusus untuk situs Anda akan berakhir menggunakan gethostbyname alih-alih getaddrinfo dan tidak dapat menangani failover, semua jenis masalah potensial.

Anda juga tidak dapat mengandalkan beberapa catatan A untuk memungkinkan server "master" dan "slave", karena Anda tidak akan pernah tahu alamat browser mana yang akan dipilih. Mereka semua harus mampu menangani pengunjung jika berjalan, karena siapa pun mungkin mendapatkan lalu lintas jika sudah habis. Peramban mungkin berpikir server ketiga Anda keluar dari daftar adalah yang paling menarik, mungkin terlihat paling dekat, dan ia akan memilih yang satu meskipun ketiganya masih ada.

Tetapi jika Anda dapat hidup dengan keterbatasan dan memiliki sistem HTTP yang cukup sederhana yang dapat digunakan untuk memprediksi interaksi browser, itu akan berfungsi.

Oh, Anda juga harus berurusan dengan banyak orang yang mengatakan ini tidak ada (karena itu benar 15 tahun yang lalu). Tetapi Anda dapat mencoba telnet-ing ke nama domain dengan beberapa catatan A, beberapa dengan IP mati dan beberapa yang bagus, jika Anda perlu membuktikannya (ya, bahkan telnet tua yang baik sekarang menggunakan getaddrinfo dan menangani banyak catatan A dengan anggun hari ini) - itu akan mencetak daftar IP yang bagus yang dicoba sampai akhirnya berhasil.

Joff
sumber
12
Ini laporan dari Biro Riset Ekonomi Nasional yang mendukung jawaban Joff.
Marco
3
Menariknya, sementara stackexchange.com menunjuk ke satu IP, Google mengembalikan beberapa: $ dig google.com @ ns1.google.com ;; BAGIAN JAWABAN: google.com. 300 IN A 74.125.226.6 google.com. 300 IN A 74.125.226.7 google.com. 300 IN A 74.125.226.0 google.com. 300 IN A 74.125.226.4 google.com. 300 IN A 74.125.226.8 google.com. 300 IN A 74.125.226.2 google.com. 300 IN A 74.125.226.1 google.com. 300 IN A 74.125.226.3 google.com. 300 IN A 74.125.226.5 google.com. 300 IN A 74.125.226.14 google.com. 300 IN A 74.125.226.9
Louis St-Amour
1
Maaf, tapi saya rasa itu bukan cara kerjanya. Browser tidak ada hubungannya dengan menyelesaikan alamat IP - yang terjadi pada perangkat lunak sistem. Jika Anda memberikan beberapa catatan A, Anda harus mengasumsikan bahwa setiap klien yang diberikan akan menerima yang acak dari daftar.
Jan Steinman
19
Ini adalah cara kerjanya di browser kontemporer. Mereka semua memilih untuk menggunakan panggilan sistem seperti getaddrinfo () untuk mendapatkan beberapa alamat IP dan menangani failover secara internal, daripada mendapatkan satu alamat IP dari sistem. Komentator dan penjawab lain di sini adalah bagian dari "banyak orang mengatakan kepada Anda ini tidak ada" dari paragraf terakhir Joff --- Saya berasumsi mereka bermaksud baik tetapi mereka menyebarkan informasi yang salah.
Robert Tupelo-Schneck
1
Untuk mendukung pernyataan Joff tentang "browser 5-10 tahun yang lalu", inilah tes yang dilakukan oleh National Bureau of Economic Research yang menyatakan Anda mendapatkan sistem semacam ini bekerja hingga IE 8. Kedengarannya adil bagi saya. :)
Jomar Sevillejo
5

Berhati-hatilah bahwa Windows Vista mengimplementasikan bagian bodoh RFC3484 (yaitu, backporting dari IPV6 ke IPV4) dan akan lebih suka alamat IP yang berbagi bit awalan paling banyak dengan alamat IP pengguna daripada memilih satu secara acak. Karena sebagian besar pengguna memiliki alamat IP yang dimulai dengan 192.168, itu berarti mana dari alamat IP Anda yang membagikan sebagian bit awalan dengan yang akan mendapatkan sebagian besar lalu lintas Vista. Microsoft memperbaiki sedikit kebodohan ini di Windows 7 dan yang lebih baru, jadi ini bukan masalah seperti dulu.

Mike Scott
sumber
Vista, itu bagus!
the0ther
3

Ini adalah teknik distribusi penyeimbangan beban DNS dasar: DNS Round Robin. Ini tidak ada hubungannya dengan browser, itu tergantung pada implementasi resolver, dan cache lokal / jarak jauh dari alamat DNS. Perubahannya adalah jika server gagal, karena caching di lapisan DNS situs web Anda mungkin tidak dapat diakses.

Lihat di sini untuk penjelasan dasar tentang Round Robin DNS di WikiPedia.

keatch
sumber
1
Yah, karena browser adalah resolver - itu tergantung pada implementasi browser, seperti yang saya tahu.
Jonas
2
Tidak, ada pustaka sistem yang menyelesaikan dns menggunakan tentu saja Nameserver DNS yang Anda setup di sistem. Fungsi ini adalah bagian dari pustaka sistem operasi standar.
keatch
Tetapi baik nslookup cnn.compada Windows dan host cnn.comLinux mengembalikan daftar alamat IP, jadi itu pasti tergantung pada implementasi browser .
Jonas
5
@iivel: Tidak, itu tidak benar. Jika saya menulis program Java dan menyelesaikan nama dengan InetAddress.getAllByName ("example.com"), saya mendapatkan daftar dengan semua alamat IP, jadi saya dapat memilih untuk memulai koneksi TCP ke semua itu jika saya mau. Dan itu sama jika Anda menggunakan getaddrinfo () dalam C. Jadi itu jelas merupakan pilihan yang dilakukan pengembang dan bukan Sistem Operasi.
Jonas
1
@ J.Money Pertanyaan ini menanyakan persis tentang implementasi, bukan bagaimana kita bisa melakukannya.
Franklin Yu
0

OS menentukan IP apa yang digunakan, bukan browser. Windows akan memutari daftar yang dikembalikan (dalam daftar yang dikembalikan dari DNS), meskipun akan terus menggunakan alamat yang sama sampai DNS memerah atau habis waktu. * Implementasi ix sebagian bergantung pada implementasi stack tcp yang dibundel tetapi biasanya mengikuti metode round robin juga.

Ivel
sumber
2
Tidak, ini salah. Jika saya menulis program Java dan menyelesaikan nama dengan InetAddress.getAllByName("example.com")saya mendapatkan daftar dengan semua alamat IP, jadi saya dapat memilih untuk memulai koneksi TCP ke semua itu jika saya mau. Dan itu sama jika Anda menggunakan getaddrinfo()dalam C. Jadi itu pasti pilihan yang dilakukan pengembang dan bukan Sistem Operasi. Server DNS hanya memutuskan dalam urutan apa daftar alamat IP dikembalikan.
Jonas
Ok, jadi Anda bisa secara manual melakukan apa pun yang Anda inginkan dengan tumpukan - Anda bahkan bisa menggulirkan sendiri dan melupakan winock bersama-sama. Namun, jika Anda menulis aplikasi dan membiarkan OS melakukan hal itu (abstrak) - maka perilaku seperti dicatat. Pertanyaan Anda secara khusus tentang perilaku aplikasi tradisional - bukan apa yang mungkin. Sebagian besar pengembang menangani menggunakan nama yang tidak terselesaikan dan membiarkan OS melakukan apa yang dilakukannya, alih-alih menyatukan perilaku dengan erat.
Ivel
1
Tidak yakin mengapa jawabannya dibatalkan, tetapi pertanyaannya adalah tentang apa yang dilakukan browser. Saat ini semua browser membiarkan OS melakukan resolusi (beberapa plugin untuk Firefox dan Chrome). Jika Anda ingin detail tentang cara memastikan ketersediaan jika penyedia turun - lihat penyeimbang beban atau pengelompokan.
Ivel
Browser mungkin melakukan apa yang Anda katakan - biarkan OS melakukan pencarian DNS, tetapi mengembalikan daftar dengan alamat IP ke Browser. Dan pertanyaannya adalah: Apa yang dilakukan browser paling populer jika alamat pertama tidak terjangkau? apakah mereka mencoba yang kedua?
Jonas
2
Artikel yang Anda kutip oleh Pete Tenereillo diketahui sudah usang (sebagian besar tidak benar saat ini). Dengan Chrome, chrome: // net-internal / # dns menunjukkan cache DNS saat ini. Saya tidak percaya OS selalu menentukan IP mana yang akan digunakan. Setidaknya dengan Chrome Anda dapat memilih untuk menggunakan AAAA jika tersedia atau hanya A. OP berbicara tentang bagaimana browser memilih dari DNS bergantung, bukan bagaimana komputer menemukan server DNS-nya ....
sdaffa23fdsf