การใช้ระเบียน A หลายรายการสำหรับโดเมนของฉัน - เว็บเบราว์เซอร์เคยลองมากกว่าหนึ่งรายการหรือไม่


94

หากฉันเพิ่มระเบียน A หลายรายการสำหรับโดเมนของฉันระเบียนเหล่านั้นจะถูกส่งกลับในลำดับการวนรอบโดยเซิร์ฟเวอร์ DNS

ตัวอย่าง:

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

แต่เว็บเบราว์เซอร์จะตอบสนองอย่างไรถ้าโฮสต์แรก ( 192.0.2.1) ไม่ทำงาน (ไม่สามารถเข้าถึงได้) พวกเขาลองโฮสต์ที่สอง ( 192.0.2.2) หรือพวกเขากลับข้อความข้อผิดพลาดให้กับผู้ใช้หรือไม่ เบราว์เซอร์ยอดนิยมมีความแตกต่างหรือไม่?

หากฉันใช้แอปพลิเคชันของฉันเองฉันสามารถใช้เพื่อให้แอปพลิเคชันที่สองถูกใช้ในกรณีที่แอปพลิเคชันหยุดทำงานดังนั้นจึงเป็นไปได้ และนี่จะเป็นประโยชน์อย่างมากในการสร้างเว็บไซต์ที่ยอมรับข้อบกพร่อง

คำตอบ:


87

ใช่เบราว์เซอร์ส่วนใหญ่ในช่วง 5-10 ปีที่ผ่านมาจะลองบันทึก A อื่นหากไม่สามารถตอบกลับได้ บางครั้งเรียกว่า "ลองใหม่ในเบราว์เซอร์" หรือ "ลองส่งใหม่" คุณจะหาข้อมูลเกี่ยวกับมันได้ในบริบทของเบราว์เซอร์ที่หลากหลายซึ่งฟีเจอร์นี้ใช้กับเว็บไซต์ที่ไม่ได้ใช้งานได้ (ดูDNS rebindingและDNS pinning , anti-dns pinning, anti-anti-dns pinning, anti-anti -anti-dns การปักหมุดและอื่น ๆ ) ประเภทของชื่อเสียงที่ไม่ดี แต่มันพิสูจน์แล้วว่ามีอยู่จริง

เบราว์เซอร์แทบทุกตัวจะได้รับรายการระเบียน A ทั้งหมดและจะตรวจสอบผู้อื่นว่ารายการที่ใช้นั้นล้มเหลวหรือไม่ คุณสามารถคาดหวังว่าลูกค้าแต่ละรายจะต้องรอ 30 วินาทีเมื่อพวกเขาพยายามเข้าถึงเว็บไซต์เมื่อเซิร์ฟเวอร์ล่มจนกว่าจะเชื่อมต่อกับที่อยู่ที่ใช้งานได้ เบราว์เซอร์จะทำการแคชที่อยู่ใดที่ทำงานได้และใช้ที่อยู่นั้นต่อไปสำหรับคำขอในอนาคตเว้นแต่ว่ามันจะล้มเหลวแล้วมันจะต้องค้นหาผ่านรายการอีกครั้ง ดังนั้นรอ 30 วินาทีตามคำร้องขอครั้งแรก

แต่มันไม่ใช่สิ่งที่คุณต้องการใช้มันจะมีข้อ จำกัด มากมายเกี่ยวกับความเข้ากันได้ของเบราว์เซอร์ความเข้ากันได้ของระบบปฏิบัติการความเข้ากันได้ของพร็อกซีส่วนหัวควบคุมแคชจะมีผลแปลก ๆ ว่าจำได้หรือไม่ว่า ที่รอ 30 วินาทีทุกคำขอผู้ที่เขียนไคลเอนต์แบบกำหนดเองสำหรับไซต์ของคุณจะจบลงด้วยการใช้gethostbynameแทนgetaddrinfoและไม่สามารถจัดการกับความล้มเหลวได้ทุกปัญหาที่อาจเกิดขึ้น

คุณไม่สามารถพึ่งพาระเบียน A หลายรายการเพื่ออนุญาตให้ใช้เซิร์ฟเวอร์ "มาสเตอร์" และ "ทาส" เนื่องจากคุณจะไม่มีทางรู้ว่าที่อยู่ใดที่เบราว์เซอร์กำลังเลือกจากรายการ พวกเขาทุกคนต้องมีความสามารถในการจัดการผู้เข้าชมหากทำงานเพราะคนใดคนหนึ่งอาจได้รับปริมาณการใช้งานถ้าเป็นไปได้ เบราว์เซอร์อาจคิดว่าเซิร์ฟเวอร์ตัวที่สามของคุณอยู่ในรายชื่อที่น่าดึงดูดที่สุดบางทีมันอาจจะดูใกล้เคียงที่สุดและจะเลือกเซิร์ฟเวอร์นั้นแม้ว่ามันทั้งสามจะยังอยู่ก็ตาม

แต่ถ้าคุณสามารถอยู่กับข้อ จำกัด และมีระบบ HTTP ที่เรียบง่ายพอสมควรซึ่งคุณสามารถทำนายการโต้ตอบของเบราว์เซอร์ด้วยมันจะทำงานได้

โอ้คุณจะต้องจัดการกับคนจำนวนมากที่บอกคุณว่าสิ่งนี้ไม่มีอยู่ (เนื่องจากเป็นจริงเมื่อ 15 ปีก่อน) แต่คุณสามารถลอง telnet-ing ไปยังชื่อโดเมนที่มีหลายเรคคอร์ด A, บางอันที่มี IP ที่ตายแล้วและอันที่ดีถ้าคุณจำเป็นต้องพิสูจน์มัน (ใช่, แม้แต่เทลเน็ตเก่าที่ดีก็ใช้ getaddrinfo และจัดการเร็กคอร์ด A หลายรายการ - มันจะพิมพ์รายการ IP ที่ดีที่มันพยายามจนกว่าจะประสบความสำเร็จในที่สุด


12
นี่คือรายงานจากสำนักวิจัยเศรษฐกิจแห่งชาติที่สนับสนุนคำตอบของ Joff
Marco

3
อย่างน่าทึ่งในขณะที่ stackexchange.com ชี้ไปที่หนึ่ง IP Google จะส่งคืนหลายรายการ: $ dig google.com @ ns1.google.com ;; ส่วนคำตอบ: 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
ขออภัยฉันไม่คิดว่ามันจะทำงานได้อย่างไร เบราว์เซอร์ไม่มีส่วนเกี่ยวข้องกับการแก้ไขที่อยู่ IP ซึ่งเกิดขึ้นในซอฟต์แวร์ระบบ หากคุณมีหลายระเบียน A คุณควรสมมติว่าลูกค้าที่ได้รับจะได้รับการสุ่มจากรายการ
Jan Steinman

19
นี่คือวิธีการทำงานในเบราว์เซอร์ร่วมสมัย พวกเขาเลือกที่จะใช้การเรียกของระบบเช่น getaddrinfo () เพื่อรับที่อยู่ IP หลายแห่งและจัดการกับความล้มเหลวภายในแทนที่จะได้รับที่อยู่ IP เดียวจากระบบ ผู้แสดงความคิดเห็นและผู้ตอบคำถามอื่น ๆ ที่นี่เป็นส่วนหนึ่งของ "ผู้คนจำนวนมากที่บอกคุณว่าไม่มีตัวตนนี้" จากย่อหน้าสุดท้ายของ Joff --- ฉันถือว่าพวกเขามีความหมายดี แต่พวกเขากระจายข้อมูลที่ผิดไป
Robert Tupelo-Schneck

1
เพื่อสนับสนุนคำแถลงของ Joff เกี่ยวกับ "เบราว์เซอร์ 5-10 ปีที่ผ่านมา" นี่คือการทดสอบที่ทำโดยสำนักวิจัยเศรษฐกิจแห่งชาติซึ่งระบุว่าคุณได้รับระบบประเภทนี้ที่ทำงานได้ถึง IE 8 เสียงดีสำหรับฉัน :)
Jomar Sevillejo

5

ได้รับการเตือนว่า Windows Vista ใช้ส่วนที่โง่ของRFC3484 (เช่น backporting จาก IPV6 ถึง IPV4) และจะชอบที่อยู่ IP ที่แบ่งปันบิตคำนำหน้าส่วนใหญ่กับที่อยู่ IP ของผู้ใช้แทนที่จะเลือกอย่างสุ่ม เนื่องจากผู้ใช้ส่วนใหญ่มีที่อยู่ IP ที่เริ่มต้นด้วย 192.168 นั่นหมายความว่าที่อยู่ IP ใดของคุณจะเกิดขึ้นเพื่อแบ่งปันบิตส่วนนำหน้าด้วยซึ่งจะได้รับการรับส่งข้อมูล Vista ส่วนใหญ่ Microsoft แก้ไขความโง่เง่าของบิตนี้โดยเฉพาะใน Windows 7 และใหม่กว่าดังนั้นจึงไม่เป็นปัญหาเท่าที่เคยเป็นมา


Vista นั่นเป็นสิ่งที่ดี!
the0ther

3

นี่เป็นเทคนิคการกระจายการโหลดบาลานซ์ DNS พื้นฐาน: DNS Round Robin สิ่งนี้ไม่เกี่ยวกับเบราว์เซอร์ขึ้นอยู่กับการใช้งานของตัวแก้ไขและแคชภายใน / ระยะไกลของที่อยู่ DNS การเปลี่ยนแปลงคือถ้าเซิร์ฟเวอร์ล้มเหลวเนื่องจากการแคชในชั้น DNS เว็บไซต์ของคุณอาจไม่สามารถเข้าถึงได้

ดูที่นี่สำหรับคำอธิบายพื้นฐานเกี่ยวกับRound Robin DNSบน WikiPedia


1
ก็เพราะเบราว์เซอร์เป็นเครื่องมือแก้ไข - มันขึ้นอยู่กับการใช้งานเบราว์เซอร์อย่างที่ฉันรู้
Jonas

2
ไม่มีไลบรารีระบบที่แก้ไข DNS โดยใช้ DNS Nameserver ที่คุณติดตั้งในระบบ ฟังก์ชั่นเป็นส่วนหนึ่งของไลบรารีระบบปฏิบัติการมาตรฐาน
keatch

แต่ทั้งสองnslookup cnn.comบน Windows และhost cnn.comบน Linux ส่งกลับรายการของที่อยู่ IP ดังนั้นแล้วแน่นอนมันขึ้นอยู่กับการดำเนินงานของเบราว์เซอร์
Jonas

5
@iivel: ไม่นั่นไม่ใช่ความจริง ถ้าฉันเขียนโปรแกรม Java และแก้ไขชื่อด้วยInetAddress.getAllByName ("example.com")ฉันได้รับรายการที่มีที่อยู่ IP ทั้งหมดดังนั้นฉันสามารถเลือกที่จะเริ่มการเชื่อมต่อ TCP กับพวกเขาทั้งหมดหากฉันต้องการ และมันก็เหมือนกันถ้าคุณใช้getaddrinfo ()ใน C ดังนั้นมันจึงเป็นตัวเลือกที่ผู้พัฒนาทำและไม่ใช่ระบบปฏิบัติการ
Jonas

1
@ J.Money คำถามนี้ถามเกี่ยวกับการดำเนินการอย่างแน่นอนไม่ใช่วิธีที่เราสามารถทำได้
แฟรงคลินหยู

0

ระบบปฏิบัติการจะกำหนดว่าจะใช้ IP ใดไม่ใช่เบราว์เซอร์ Windows จะปัดเศษรายการที่ส่งคืน (ในรายการที่ส่งคืนจาก DNS) แต่จะใช้ที่อยู่เดิมต่อไปจนกว่า DNS จะล้างออกหรือหมดเวลา * การปรับใช้ ix ขึ้นอยู่กับการใช้ tcp stack ที่ให้มาบางส่วน แต่โดยทั่วไปแล้วจะเป็นไปตามวิธีการของ robin


2
ไม่ผิด ถ้าฉันเขียนโปรแกรม Java และแก้ไขชื่อด้วยInetAddress.getAllByName("example.com")ฉันจะได้รับรายการที่มีที่อยู่ IP ทั้งหมดดังนั้นฉันสามารถเลือกที่จะเริ่มการเชื่อมต่อ TCP กับพวกเขาทั้งหมดหากฉันต้องการ และมันก็เหมือนกันถ้าคุณใช้getaddrinfo()ใน C ดังนั้นมันจึงเป็นตัวเลือกที่นักพัฒนาทำและไม่ใช่ระบบปฏิบัติการ DNS-server ตัดสินใจเฉพาะในลำดับที่ส่งคืนรายการที่อยู่ IP
Jonas

ตกลงดังนั้นคุณสามารถทำสิ่งที่คุณต้องการด้วยสแต็คด้วยตนเอง - คุณสามารถม้วนของคุณเองและลืมเกี่ยวกับ winsock ทั้งหมดเข้าด้วยกัน อย่างไรก็ตามถ้าคุณเขียนแอพและปล่อยให้ระบบปฏิบัติการทำสิ่งนั้น (เป็นนามธรรม) - พฤติกรรมนั้นจะถูกบันทึกไว้ คำถามของคุณเกี่ยวกับพฤติกรรมการใช้งานแอปพลิเคชันแบบดั้งเดิมโดยเฉพาะ นักพัฒนาส่วนใหญ่จัดการโดยใช้ชื่อที่ไม่ได้รับการแก้ไขและปล่อยให้ระบบปฏิบัติการทำในสิ่งที่มันทำแทนที่จะทำหน้าที่เชื่อมต่ออย่างรัดกุม
iivel

1
ไม่แน่ใจว่าทำไมคำตอบถูกลดลง แต่คำถามเกี่ยวกับสิ่งที่เบราว์เซอร์ทำ ปัจจุบันเบราว์เซอร์ทั้งหมดให้ระบบปฏิบัติการแก้ปัญหาได้ (ขาดปลั๊กอินสำหรับ Firefox และ Chrome) หากคุณต้องการรายละเอียดเกี่ยวกับวิธีการตรวจสอบความพร้อมใช้งานของผู้ให้บริการควรลงไปดูที่ load balancer หรือการทำคลัสเตอร์
iivel

เบราว์เซอร์อาจทำตามที่คุณพูด - ให้ระบบปฏิบัติการค้นหา DNS แต่จะส่งคืนรายการที่มีที่อยู่ IP ไปยังเบราว์เซอร์ และคำถามคือ: เบราว์เซอร์ยอดนิยมทำอะไรได้บ้างหากที่อยู่แรกไม่สามารถเข้าถึงได้ พวกเขาลองครั้งที่สองหรือไม่
Jonas

2
บทความที่คุณยกมาโดย Pete Tenereillo เป็นที่ทราบกันว่าล้าสมัย (ส่วนใหญ่ไม่ถูกต้องในปัจจุบัน) ด้วย Chrome, chrome: // net-internals / # dns แสดงแคช DNS ปัจจุบัน ฉันไม่เชื่อว่าระบบปฏิบัติการจะพิจารณาว่าจะใช้ IP ใด อย่างน้อยด้วย Chrome คุณสามารถเลือกใช้ AAAA หากมีหรือ A เท่านั้น OP กำลังพูดถึงว่าเบราว์เซอร์เลือกจาก DNS ได้อย่างไรไม่ใช่วิธีที่คอมพิวเตอร์ค้นหาเซิร์ฟเวอร์ DNS ....
sdaffa23fdsf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.