Sử dụng nhiều bản ghi A cho tên miền của tôi - các trình duyệt web có bao giờ thử nhiều hơn một không?


94

Nếu tôi thêm nhiều bản ghi A cho tên miền của mình, chúng sẽ được các máy chủ DNS trả về theo thứ tự vòng tròn.

Thí dụ:

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

Nhưng trình duyệt web phản ứng thế nào nếu máy chủ đầu tiên ( 192.0.2.1) không hoạt động (không truy cập được)? Họ có thử máy chủ thứ hai ( 192.0.2.2) hoặc họ trả lại thông báo lỗi cho người dùng? Có sự khác biệt nào giữa các trình duyệt phổ biến nhất không?

Nếu tôi triển khai ứng dụng của riêng mình, tôi có thể triển khai để cái thứ hai được sử dụng trong trường hợp cái thứ nhất bị hỏng, vì vậy nó có thể. Và điều này sẽ rất hữu ích để tạo ra một trang web chịu lỗi.

Câu trả lời:


87

Có, hầu hết các trình duyệt từ 5-10 năm trước sẽ thử các bản ghi A khác nếu không phản hồi. Điều này đôi khi được gọi là "thử lại trình duyệt" hoặc "thử lại máy khách" rõ ràng. Bạn sẽ chỉ tìm thấy nhiều thứ về nó trong bối cảnh các trình duyệt khai thác khác nhau mà tính năng này cho phép đối với các trang web không sử dụng nó (xem phản hồi DNSghim DNS , ghim chống dns, ghim chống dns, chống ghim -anti-dns ghim , và như vậy). Một loại tiếng xấu, nhưng nó chứng minh rằng nó tồn tại.

Khá nhiều trình duyệt thực sự nhận được danh sách đầy đủ các bản ghi A và thực sự kiểm tra các bản ghi khác nếu nó đang sử dụng không thành công. Bạn có thể mong đợi mỗi khách hàng có 30 giây chờ đợi khi họ lần đầu tiên truy cập vào một trang web khi máy chủ ngừng hoạt động, cho đến khi nó kết nối với một địa chỉ làm việc. Trình duyệt sau đó sẽ lưu trữ địa chỉ nào đang hoạt động và tiếp tục sử dụng địa chỉ đó cho các yêu cầu trong tương lai trừ khi nó cũng bị lỗi, sau đó nó sẽ phải tìm kiếm lại danh sách. Vì vậy, 30 giây chờ đợi theo yêu cầu đầu tiên, tốt sau đó.

Nhưng đó không phải là thứ bạn nhất thiết muốn sử dụng, nó sẽ có nhiều cảnh báo về khả năng tương thích trình duyệt, khả năng tương thích os, khả năng tương thích proxy, tiêu đề kiểm soát bộ đệm sẽ có những ảnh hưởng kỳ lạ đến việc nó nhớ IP nào bị hỏng hoặc bắt đầu có 30 giây chờ đợi cho mỗi yêu cầu, mọi người viết ứng dụng khách tùy chỉnh cho trang web của bạn sẽ kết thúc bằng cách sử dụng gethostbyname thay vì getaddrinfo và không thể xử lý chuyển đổi dự phòng, tất cả các vấn đề tiềm ẩn.

Bạn cũng không thể dựa vào nhiều bản ghi A để cho phép các máy chủ "chính" và "nô lệ", bởi vì bạn sẽ không bao giờ biết địa chỉ nào trình duyệt sẽ chọn ra khỏi danh sách. Tất cả họ cần phải có khả năng xử lý khách truy cập nếu đang chạy, bởi vì bất kỳ ai cũng có thể có lưu lượng truy cập nếu nó lên. Một trình duyệt có thể nghĩ rằng máy chủ thứ ba của bạn trong danh sách là hấp dẫn nhất, có thể nó trông gần nhất và nó sẽ chọn máy chủ đó mặc dù cả ba vẫn còn hoạt động.

Nhưng nếu bạn có thể sống với những hạn chế và có một hệ thống HTTP khá đơn giản mà bạn có thể dự đoán được sự tương tác của trình duyệt, nó sẽ hoạt động.

Ồ, bạn cũng sẽ phải đối phó với rất nhiều người nói với bạn rằng điều này không tồn tại (vì đó là sự thật 15 năm trước). Nhưng bạn có thể thử telnet vào một tên miền có nhiều bản ghi A, một số có IP chết và một số tốt, nếu bạn cần chứng minh điều đó (vâng, ngay cả telnet cũ tốt hiện cũng sử dụng getaddrinfo và xử lý nhiều bản ghi A một cách duyên dáng trong những ngày này) - nó sẽ in ra một danh sách đẹp các IP mà nó đang thử cho đến khi cuối cùng nó thành công.


12
Đây là một báo cáo từ Cục nghiên cứu kinh tế quốc gia hỗ trợ câu trả lời của Joff.
Marco

3
Thật thú vị, trong khi stackexchange.com chỉ đến một IP, Google trả về một số: $ dig google.com @ ns1.google.com ;; TRẢ LỜI PHẦN: 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
Xin lỗi, nhưng tôi không nghĩ đó là cách nó hoạt động. Các trình duyệt không liên quan gì đến việc giải quyết các địa chỉ IP - điều đó xảy ra trong phần mềm hệ thống. Nếu bạn cung cấp nhiều bản ghi A, bạn nên cho rằng bất kỳ khách hàng cụ thể nào cũng sẽ nhận được một bản ghi ngẫu nhiên từ danh sách.
Jan Steinman

19
Đây cách nó hoạt động trong các trình duyệt hiện đại. Tất cả đều chọn sử dụng các cuộc gọi hệ thống như getaddrinfo () để nhận nhiều địa chỉ IP và xử lý chuyển đổi dự phòng trong nội bộ, thay vì nhận một địa chỉ IP duy nhất từ ​​hệ thống. Những người bình luận và trả lời khác ở đây là một phần của "rất nhiều người nói với bạn điều này không tồn tại" từ đoạn cuối của Joff --- Tôi cho rằng họ có ý tốt nhưng họ đang lan truyền thông tin sai lệch.
Robert Tupelo-Schneck

1
Để hỗ trợ tuyên bố "trình duyệt 5-10 năm trước" của Joff, đây là một thử nghiệm được thực hiện bởi Cục nghiên cứu kinh tế quốc gia, trong đó tuyên bố bạn có loại hệ thống này hoạt động với IE 8. Âm thanh công bằng với tôi. :)
Jomar Sevillejo

5

Được cảnh báo rằng Windows Vista thực hiện các phần ngu ngốc của RFC3484 (tức là việc nhập từ IPV6 sang IPV4) và sẽ thích địa chỉ IP chia sẻ hầu hết các bit tiền tố với địa chỉ IP của người dùng thay vì chọn ngẫu nhiên. Vì hầu hết người dùng có địa chỉ IP bắt đầu bằng 192.168, điều đó có nghĩa là bất kỳ địa chỉ IP nào của bạn xảy ra để chia sẻ hầu hết các bit tiền tố với điều đó sẽ nhận được phần lớn lưu lượng truy cập Vista. Microsoft đã sửa lỗi ngu ngốc đặc biệt này trong Windows 7 trở lên, do đó, đây không phải là vấn đề như trước đây.


Vista, đó là một trong những tốt!
the0ther

3

Đây là kỹ thuật phân phối cân bằng tải DNS cơ bản: DNS Round Robin. Điều này không liên quan gì đến trình duyệt, nó phụ thuộc vào việc triển khai trình phân giải và bộ đệm cục bộ / từ xa của địa chỉ DNS. Thay đổi là nếu máy chủ bị lỗi, do bộ đệm trong lớp DNS, trang web của bạn có thể không truy cập được.

Xem ở đây để được giải thích cơ bản về Round Robin DNS trên WikiPedia.


1
Chà, vì trình duyệt là trình phân giải - nó phụ thuộc vào việc triển khai trình duyệt, như những gì tôi biết.
Jonas

2
Không, có thư viện hệ thống giải quyết các dns bằng cách sử dụng Máy chủ tên DNS mà bạn thiết lập trong hệ thống. Các chức năng là một phần của thư viện hệ điều hành tiêu chuẩn.
keatch

Nhưng cả nslookup cnn.comtrên Windows và host cnn.comLinux đều trả về một danh sách các địa chỉ IP, do đó, nó chắc chắn phụ thuộc vào việc triển khai trình duyệt .
Jonas

5
@i Xoay: Không, điều đó không đúng. Nếu tôi viết chương trình Java và giải quyết tên bằng InetAddress.get ALLByName ("example.com"), tôi nhận được một danh sách với tất cả các địa chỉ IP, vì vậy tôi có thể chọn bắt đầu kết nối TCP với tất cả chúng nếu tôi muốn. Và nó cũng tương tự nếu bạn sử dụng getaddrinfo () trong C. Vì vậy, đây chắc chắn là một lựa chọn mà các nhà phát triển thực hiện chứ không phải Hệ điều hành.
Jonas

1
@ J.Money Câu hỏi này là hỏi chính xác về việc thực hiện, không phải làm thế nào chúng ta có thể làm điều đó.
Franklin Yu

0

HĐH xác định IP nào sẽ sử dụng, không phải trình duyệt. Windows sẽ làm tròn danh sách được trả về (trong danh sách được truyền lại từ DNS), mặc dù vậy sẽ tiếp tục sử dụng cùng một địa chỉ cho đến khi DNS bị xóa hoặc hết thời gian. * Việc triển khai ix phụ thuộc một phần vào việc triển khai ngăn xếp tcp được đóng gói nhưng thường cũng tuân theo phương pháp luân chuyển vòng.


2
Không, điều này là sai. Nếu tôi viết chương trình Java và giải quyết một tên với InetAddress.getAllByName("example.com")tôi sẽ nhận được một danh sách có tất cả các địa chỉ IP, vì vậy tôi có thể chọn bắt đầu kết nối TCP với tất cả chúng nếu tôi muốn. Và nó cũng tương tự nếu bạn sử dụng getaddrinfo()trong C. Vì vậy, đây chắc chắn là một lựa chọn mà các nhà phát triển thực hiện chứ không phải Hệ điều hành. Máy chủ DNS chỉ quyết định thứ tự danh sách địa chỉ IP được trả về theo thứ tự nào.
Jonas

Ok, vì vậy bạn có thể tự làm bất cứ điều gì bạn muốn với ngăn xếp - thậm chí bạn có thể tự cuộn và quên đi winock cùng nhau. Tuy nhiên, nếu bạn viết một ứng dụng và để HĐH thực hiện công việc của nó (trừu tượng hóa) - thì hành vi đó như đã lưu ý. Bạn đặt câu hỏi cụ thể về hành vi ứng dụng truyền thống - không phải là những gì có thể. Hầu hết các nhà phát triển xử lý bằng cách sử dụng tên chưa được giải quyết và để HĐH thực hiện những gì nó làm, thay vì kết hợp chặt chẽ các hành vi với nhau.
xoay

1
Không chắc chắn tại sao câu trả lời bị từ chối, nhưng câu hỏi là về những gì trình duyệt làm. Hiện tại tất cả các trình duyệt cho phép HĐH thực hiện độ phân giải (thiếu một số plugin cho Firefox và Chrome). Nếu bạn muốn biết chi tiết về cách đảm bảo tính khả dụng của nhà cung cấp, hãy xem xét - xem xét các bộ cân bằng tải hoặc phân cụm.
i xoay

Các trình duyệt có thể làm như bạn nói - hãy để HĐH thực hiện tra cứu DNS, nhưng nó sẽ trả về một danh sách có địa chỉ IP cho Trình duyệt. Và câu hỏi là: Các trình duyệt phổ biến nhất sẽ làm gì nếu địa chỉ đầu tiên không thể truy cập được? họ có thử lần thứ hai không?
Jonas

2
Bài báo mà bạn trích dẫn bởi Pete Tenereillo được biết là đã lỗi thời (ngày nay hầu như không chính xác). Với Chrome, chrome: // net-internals / # dns hiển thị bộ đệm DNS hiện tại. Tôi không tin HĐH luôn xác định IP nào sẽ sử dụng. Ít nhất với Chrome, bạn có thể chọn sử dụng AAAA nếu có sẵn hoặc chỉ A. OP đang nói về cách các trình duyệt chọn từ DNS, chứ không phải cách máy tính tìm máy chủ DNS của nó ....
sdaffa23fdsf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.