Etki alanım için birden fazla A kaydı kullanma - web tarayıcıları hiç birden fazla denedi mi?


94

Etki alanım için birden fazla A kaydı eklersem, bunlar DNS sunucuları tarafından bir tur sırasına göre döndürülür.

Örnek:

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

Ancak, ilk ana bilgisayar ( 192.0.2.1) kapalıysa (erişilemiyorsa) web tarayıcıları nasıl tepki verir ? İkinci ana bilgisayarı ( 192.0.2.2) mı deniyorlar veya kullanıcıya bir hata mesajı mı veriyorlar? En popüler tarayıcılar arasında herhangi bir fark var mı?

Kendi uygulamamı uygularsam, ikincisinin kapalı olması durumunda ikincinin kullanılmasını sağlayacak şekilde uygulayabilirim. Ve bu bir hataya dayanıklı web sitesi oluşturmak için çok yararlı olacaktır.

Yanıtlar:


87

Evet, son 5-10 yıl içindeki çoğu tarayıcı, biri yanıt vermezse diğer A kayıtlarını deneyecek. Bu bazen görünüşte "tarayıcı yeniden deneme" veya "istemci yeniden deneme" olarak adlandırılır. Bu özelliği yalnızca bu özelliği kullanmayan sitelere karşı sağlayan çeşitli tarayıcı kullanımları bağlamında bulabilirsiniz (bkz. DNS yeniden bağlama ve DNS pinleme , anti-dns pinleme, anti-anti-dns pinleme, anti-anti -anti-dns pinching ve benzeri). Kötü bir üne sahip olmakla birlikte, var olduğunu kanıtlıyor.

Hemen hemen her tarayıcı gerçekten A kayıtlarının tam listesini alır ve kullandığı kayıt başarısız olursa başkalarını da kontrol eder. Her müşteriden bir sunucu kapalıyken bir siteye erişmeye çalıştığında, çalışan bir adrese bağlanıncaya kadar 30 saniye beklemesini bekleyebilirsiniz. Tarayıcı daha sonra hangi adresin çalıştığını önbelleğe alır ve aynı zamanda başarısız olmadıkça gelecekteki isteklerde bu adresi kullanmaya devam eder, ardından listede tekrar arama yapması gerekir. 30 saniye sonra ilk istek bekleyin, sonra para cezası.

Ancak, kullanmak istediğiniz bir şey değildir, tarayıcı uyumluluğu, işletim sistemi uyumluluğu, proxy uyumluluğu, önbellek kontrolü başlıklarının, hangi IP'lerin düştüğünü ya da başlamaya başladığını hatırlaması üzerinde garip etkileri olacaktır. Her istek üzerine 30 saniye beklediğimizde, sitenize özel müşteriler yazan insanlar getaddrinfo yerine gethostbyname kullanarak sona erecek ve yük devretme, her türlü olası sorunla başa çıkamayacaklar.

Ayrıca "ana" ve "bağımlı" sunuculara izin vermek için birden fazla A kaydına da güvenemezsiniz, çünkü hangi tarayıcının listeden seçileceğini asla bilemezsiniz. Hepsi koşuyorsa ziyaretçilerle ilgilenebilecek kadar yetenekli olmalı, çünkü herhangi biri çalışıyorsa trafik çekebilir. Bir tarayıcı, üçüncü sunucunuzun listeden en çekici olduğunu düşünebilir, belki de en yakını görünüyor ve üçü de hala devam etse de bunu seçecek.

Ancak, kısıtlamalarla yaşayabilir ve tarayıcı etkileşimini tahmin edebileceğiniz oldukça basit bir HTTP sistemine sahipseniz, çalışacaktır.

Ayrıca, bunun varolduğunu söyleyen birçok insanla da uğraşmak zorunda kalacaksınız (bu 15 yıl önce doğruydu). Ancak, ispatlamanız gerekiyorsa, bazı A kayıtları, bazıları ölü IP'ler ve bazıları iyi olanlar içeren bir etki alanı adına telnetlemeyi deneyebilirsiniz (evet, eski güzel telnet artık getaddrinfo kullanıyor ve bugünlerde birden fazla A kaydını zarifçe kullanıyor) - Sonunda başarılı olana kadar çalıştığı IP'lerin güzel bir listesini yazdıracak.


12
İşte Joff'un cevabını destekleyen Ulusal Ekonomik Araştırma Bürosu'ndan bir rapor.
Marco,

3
Şaşırtıcı bir şekilde, stackexchange.com bir IP'ye işaret ederken, Google birkaç döndürür: $ dig google.com @ ns1.google.com ;; CEVAP BÖLÜMÜ: google.com. 74.125.226.6'da 300 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. 74.125.226.2’de 300 google.com. 300 IN A 74.125.226.1 google.com. 300 IN A 74.125.226.3 google.com. 74.125.226.5'te 300 google.com. 74.125.226.14'te 300 google.com. 74.125.226.9’da 300
Louis St-Amour,

1
Üzgünüm, ama böyle çalıştığını sanmıyorum. Tarayıcıların IP adreslerini çözme ile ilgisi yoktur - bu sistem yazılımında olur. Birden fazla A kaydı verirseniz, herhangi bir müşterinin listeden rastgele bir kayıt alacağını varsaymalısınız.
Jan Steinman,

19
Bu ise çağdaş tarayıcılarda nasıl çalıştığını. Hepsi birden çok IP adresi almak ve sistemden tek bir IP adresi almak yerine dahili yük devretme işlemini yürütmek için getaddrinfo () gibi sistem çağrılarını kullanmayı seçiyor. Buradaki diğer yorumcular ve cevaplayıcılar, Joff'un son paragrafından "size bunun olmadığını söyleyen birçok insanın" bir parçası.
Robert Tupelo-Schneck 17:13

1
Joff'un "5-10 yıl önceki tarayıcılar" ifadesini desteklemek için , Ulusal Ekonomik Araştırma Bürosu tarafından yapılan ve IE 8'e kadar çalışan bu tür bir sisteme sahip olduğunuzu gösteren bir test . :)
Jomar Sevillejo 21:16

5

Windows Vista'nın RFC3484'ün aptal kısımlarını (örn . IPV6'dan IPV4'e destek) uyguladığı ve rastgele birini seçmek yerine önek bitlerinin çoğunu paylaşan IP adresini tercih edeceği konusunda uyarılmalıdır . Çoğu kullanıcı 192.168 ile başlayan IP adreslerine sahip olduğundan, bu IP adreslerinden hangisinin önek bitlerinin çoğunu paylaşacağı anlamına gelir; bu, Vista trafiğinin çoğunu alır. Microsoft, Windows 7 ve sonraki sürümlerinde bu özel aptallığın birazını düzeltti, bu yüzden eskisi kadar sorun değil.


Vista, bu iyi bir tane!
the0ther

3

Bu, temel DNS yük dengeleme dağıtım tekniğidir: DNS Round Robin. Bunun tarayıcı ile ilgisi yok, çözücünün uygulanmasına ve DNS adresinin yerel / uzak önbelleğine bağlı. Bir sunucu başarısız olursa, DNS katmanında önbellekleme nedeniyle web sitenize erişilemeyebilir.

WikiPedia'daki Round Robin DNS hakkında temel açıklama için buraya bakın .


1
Tarayıcı çözümleyici olduğu için, bildiğim gibi tarayıcının uygulanmasına bağlı.
Jonas

2
Hayır, elbette sistemde kurduğunuz DNS Ad sunucusunu kullanarak elbette dns'yi çözen sistem kütüphanesi var. İşlev, standart işletim sistemi kitaplığının bir parçasıdır.
saat

Ancak hem nslookup cnn.comWindows hem de host cnn.comLinux'ta bir IP adresi listesi döndürür , bu yüzden kesinlikle tarayıcının uygulanmasına bağlıdır .
Jonas

5
@iivel: Hayır, bu doğru değil. Eğer bir Java programı yazıp InetAddress.getAllByName ("example.com") ile bir isim çözersem , tüm IP adreslerini içeren bir liste alıyorum, bu yüzden istediğimde hepsine bir TCP bağlantısı başlatmayı seçebilirim. Ve eğer C'de getaddrinfo () kullanıyorsanız , bu yüzden kesinlikle geliştiricilerin İşletim Sistemini yapıp kullanamadıkları bir seçimdir .
Jonas

1
@ J.Money Bu soru, uygulama hakkında pek de soruyor değil biz nasıl olabilir bunu.
Franklin Yu,

0

İşletim sistemi tarayıcıda değil kullanılacak IP'yi belirler. Windows, döndürülen listeyi yuvarlar (DNS'den geri gönderilen listede), ancak DNS temizleninceye veya zaman aşımına uğrayana kadar aynı adresi kullanmaya devam eder. * ix uygulamaları kısmen paketlenmiş tcp yığını uygulamasına bağlıdır, ancak genellikle yuvarlak bir robin yöntemini de takip eder.


2
Hayır, bu yanlış. Eğer bir Java programı yazıp ismiyle isimlendirirsem InetAddress.getAllByName("example.com")tüm IP adreslerini içeren bir liste alıyorum, böylece istersem hepsine TCP bağlantısı kurmayı seçebilirim. Ve eğer getaddrinfo()C kullanıyorsanız , bu nedenle, geliştiricilerin İşletim Sistemini değil kesinlikle yaptıkları bir seçimdir. DNS sunucusu yalnızca IP adresleri listesinin hangi sırayla döndürüleceğine karar verir.
Jonas

Tamam, yığınla ne istersen el ile yapabilirsin - kendi silahını bile alabilir ve hep birlikte winsock'u unutabilirsin. Bununla birlikte, bir uygulama yazarsanız ve işletim sisteminin işini yapmasına izin verirseniz (soyut olarak) - o zaman davranış belirtildiği gibidir. Sorunuz özellikle geleneksel uygulama davranışlarıyla ilgiliydi - mümkün olanı değil. Çoğu geliştirici, çözümlenmemiş adı kullanarak işlem yapar ve birlikte davranışı sıkı bir şekilde birleştirmek yerine işletim sisteminin yaptığı şeyi yapmasına izin verir.
saat

1
Yanıtın neden beğenilmediğinden emin değilim, ancak soru tarayıcıların ne yaptığıyla ilgili. Şu anda tüm tarayıcılar işletim sisteminin çözünürlüğünü yapmasına izin veriyor (Firefox ve Chrome için bazı eklentiler eksik). Bir tedarikçinin aşağı inmesi durumunda uygunluğun nasıl sağlanacağına ilişkin detaylar istiyorsanız, yük dengeleyicisine veya kümelemeye bakın.
saat

Tarayıcılar muhtemelen dediğiniz gibi yapar - işletim sisteminin DNS aramasını yapmasına izin verin, ancak IP adreslerini içeren bir liste Tarayıcıya geri döner . Ve soru şudur: İlk adrese ulaşılamıyorsa en popüler tarayıcılar ne yapar? ikinciyi deniyorlar mı?
Jonas

2
Pete Tenereillo tarafından alıntı yaptığınız makalenin eski olduğu biliniyor (günümüzde çoğunlukla yanlış). Chrome ile, chrome: // net-internals / # dns geçerli DNS önbelleğini gösterir. İşletim sisteminin her zaman hangi IP kullanacağını belirlediğine inanmıyorum. En azından Chrome ile, varsa AAAA'yı veya yalnızca A'yı kullanmayı seçebilirsiniz. OP, tarayıcıların
DNS'den
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.