Ai thực sự đã đệ quy hồi giáo trong một tra cứu DNS đệ quy?


16

Tôi đang cố gắng để hiểu sự khác biệt giữa tra cứu DNS lặp và đệ quy. Về cơ bản, tôi nghĩ về việc lặp đi lặp lại giống như gọi một cửa hàng bách hóa đang tìm kiếm một sản phẩm và khi họ không có nó, họ đưa cho bạn số của một chi nhánh khác để gọi và sau đó bạn tự gọi cho chi nhánh khác. Versus đệ quy, giống như gọi cho cửa hàng bách hóa, và khi họ không có những gì bạn theo đuổi, họ gọi cho chi nhánh khác thay mặt bạn tìm kiếm sản phẩm. Điều đáng nói là, tôi đang nhận được những quan điểm trái ngược về vấn đề này khi nói đến DNS. Khi tôi nghĩ về đệ quy, tôi nghĩ về một cái gì đó trông như thế này: văn bản thay thế

Nhưng trong khi đọc các bài viết trên web và thậm chí thực hiện tìm kiếm hình ảnh Google cho đệ quy DNS , tôi thấy nhiều ví dụ khác giống như thế này: văn bản thay thế

Đối với tôi, ví dụ thứ hai này có vẻ lặp đi lặp lại nhiều hơn so với đệ quy, bởi vì mỗi "máy chủ DNS khác" đang báo cho "máy chủ DNS ưa thích" địa chỉ của máy tiếp theo để tìm kiếm, thay vì tìm kiếm thay mặt cho ưu tiên Máy chủ DNS. Yếu tố đệ quy duy nhất tôi thấy là máy chủ DNS ưa thích thực hiện tra cứu thay cho máy khách DNS, nhưng từ đây trở đi, nó chắc chắn trông lặp đi lặp lại.

Vì vậy, tôi đoán câu hỏi của tôi là, việc tra cứu DNS "đệ quy" có thực sự chỉ có nghĩa là đệ quy theo nghĩa là máy chủ DNS ưa thích làm việc gì đó thay mặt khách hàng, nhưng thực sự lặp đi lặp lại từ đây không? Phần lớn các kết quả tôi thấy trong tìm kiếm hình ảnh của Google đang khiến tôi tin vào điều này, điều mà sau đó đặt ra câu hỏi, liệu hình ảnh đầu tiên trong bài đăng này có sai không?


Hãy xem podcast Ask Mr DNS, giải trí, cung cấp thông tin và họ đã quản lý DNS kể từ năm 1989, là tác giả hoặc đồng tác giả của mỗi cuốn sách O'Reily DNS, v.v. Ask-mrdns.com Tìm hiểu nhiều hơn bạn muốn biết.
Ronald Pottol

Câu trả lời:


16

Đoạn cuối của bạn là chính xác.

Cờ "Mong muốn đệ quy" (RD) được gửi bởi máy khách trong tiêu đề yêu cầu DNS (xem RFC 1035) hỏi máy chủ "vui lòng cho tôi câu trả lời đầy đủ cho câu hỏi này".

Máy chủ đó lặp đi lặp lại hỏi chuỗi máy chủ tên cho câu trả lời đúng. Các truy vấn đó không nên tự đặt bit RD.

Cuối cùng, phản hồi của máy chủ đệ quy sẽ có cờ "Recursion Available" (RA), cho biết câu trả lời đã thực sự được trả lời đầy đủ. Ngược lại, một máy chủ có thẩm quyền sẽ không đặt cờ RA.

IMHO, đó là một sự lựa chọn kém về thuật ngữ.

Đối với những gì nó có giá trị, sơ đồ đầu tiên bạn tìm thấy về cơ bản là không chính xác. Các máy chủ gốc không thực hiện truy vấn đến bất kỳ máy chủ nào khác, họ chỉ đưa ra các giới thiệu cho các máy chủ khác.


4

Theo như tôi hiểu, "tra cứu đệ quy" chỉ từ quan điểm của người điều tra ban đầu. Vì vậy, nếu nó hỏi một máy chủ DNS và nhận được câu trả lời được giải quyết hoàn toàn, thì đó là một "truy vấn đệ quy". Nếu máy chủ đó lần lượt thực hiện tra cứu đệ quy hoặc lặp đi lặp lại, thì đó không phải là điều mà người điều tra ban đầu phải quan tâm.


1

Sơ đồ đầu tiên trong hai sơ đồ trong câu hỏi của bạn là không chính xác. Máy chủ gốc không gửi truy vấn đến các máy chủ khác. Nếu các máy chủ gốc thực tế đã chuyển tiếp các truy vấn như được hiển thị trong sơ đồ đó, thì hệ thống DNS sẽ dễ bị tấn công DoS hơn rất nhiều so với thực tế.

Sơ đồ thứ hai hầu hết là chính xác nhưng quá đơn giản để cho bạn thấy bản chất đệ quy của tra cứu. Sơ đồ vẫn đủ chi tiết mặc dù chúng ta có thể chỉ ra nơi đệ quy xảy ra.

Máy chủ DNS bên cạnh số 12mà ký hiệu Preferred DNS serverlà nơi đệ quy xảy ra. Thuật ngữ Máy chủ DNS ưa thích không phải là thuật ngữ chuẩn. Máy chủ đó thường sẽ được gọi là bộ đệm DNS bộ đệm hoặc một số viết tắt của cái đó.

Khi nhìn vào lưu lượng mạng, nó thực sự trông lặp đi lặp lại. Đệ quy hoàn toàn nội bộ đối với người truy cập DNS. Nếu bạn nhìn vào việc triển khai một bộ đệm DNS, bạn sẽ thấy một số cấu trúc đệ quy trong cách xử lý các yêu cầu.

Đệ quy có thể dễ dàng phát hiện nếu việc triển khai sử dụng một luồng cho mỗi yêu cầu và việc tra cứu được thực hiện bằng các lệnh gọi hàm đệ quy. Nhưng các thiết kế hiệu quả hơn không sử dụng một luồng cho mỗi yêu cầu và thay vào đó, đệ quy được tìm thấy bên trong các cấu trúc dữ liệu được sử dụng bởi người gửi DNS.

Lý do đệ quy là cần thiết là do cách các tham chiếu giữa các máy chủ DNS có thẩm quyền được triển khai. Điều này được minh họa tốt nhất với một ví dụ. Trong sơ đồ, bạn thấy máy chủ DNS có thẩm quyền để microsoft.comtrỏ đến máy chủ DNS có thẩm quyền cho example.microsoft.com. Điều này được thực hiện bằng cách sử dụng một NSbản ghi trỏ đến tên máy chủ. Vì vậy, ví dụ máy chủ có thẩm quyền cho microsoft.comcó thể cho người nhận DNS ms.example.netcó thẩm quyền example.microsoft.com.

Tại thời điểm đó, người nhận DNS sẽ phải giải quyết ms.example.nettrước khi có thể tiến hành giải quyết example.microsoft.com.

Để giải quyết một tên máy chủ, trước tiên phải giải quyết một tên máy chủ khác. Đó là đệ quy. Để điều này không dẫn đến đệ quy vô hạn, DNS có các bản ghi keo được gửi cùng với NScác bản ghi trong một số trường hợp nhất định.


Có rất nhiều lỗi trong việc này. Việc sử dụng thuật ngữ "đệ quy" không liên quan gì đến việc "các lệnh gọi hàm đệ quy" có được sử dụng hay không - câu trả lời của Vatine gần hơn - đệ quy chỉ là một tên (được chọn kém) khi khách hàng hỏi máy chủ để có câu trả lời được giải quyết hoàn chỉnh . Cơ chế được sử dụng bởi cái gọi là "máy chủ đệ quy" thực sự được gọi là phép lặp . Ngoài ra, ghi lại hồ sơ và không để ngăn chặn "đệ quy vô hạn" - chúng ở đó để ngăn chặn vấn đề "con gà và quả trứng" về cách bạn tìm địa chỉ của máy chủ tên nếu các máy chủ đó nằm trong không gian của miền được ủy quyền .
Alnitak

@Alnitak Độ phân giải DNS vốn đã được đệ quy. Bất kỳ thuật toán đệ quy nào cũng có thể được biến thành một thứ lặp đi lặp lại bằng cách biến ngăn xếp thực thi thành một cấu trúc dữ liệu khác. Khả năng đó đã được đề cập trong câu trả lời của tôi. Và vấn đề phụ thuộc theo chu kỳ mà bạn đề cập không phải là điều gì đó khác với đệ quy vô hạn. Hai người thực sự giống nhau. Nếu bạn đã áp dụng một thuật toán đệ quy ngây thơ mà không nhận thấy rằng tác vụ cơ bản phải chịu sự phụ thuộc theo chu kỳ, kết quả sẽ là đệ quy vô hạn.
kasperd

@Alnitak Bạn không thể thoát khỏi ngăn xếp đệ quy và thực hiện độ phân giải DNS theo dõi lặp đi lặp lại chỉ theo dõi một số lượng tên DNS không đổi tại một thời điểm. Bạn có thể biểu diễn ngăn xếp đệ quy với cấu trúc dữ liệu trông khác, nhưng nó vẫn được đệ quy. Có thể định cấu hình một tên miền theo cách sẽ giữ độ sâu đệ quy thành chỉ một. Nhưng không phải tất cả các tên miền được cấu hình theo cách đó.
kasperd

Tôi trích dẫn RFC 1034 - "" Hai cách tiếp cận chung để xử lý vấn đề này là "đệ quy", trong đó máy chủ đầu tiên theo đuổi truy vấn của máy khách tại một máy chủ khác và "lặp lại", trong đó máy chủ chuyển máy khách sang máy khách khác máy chủ và cho phép khách hàng theo đuổi truy vấn . "" Nó không liên quan gì đến "ngăn xếp" hoặc "cấu trúc dữ liệu".
Alnitak

@Alnitak Đoạn đó đề cập đến một loại đệ quy khác với câu trả lời của tôi. Đệ quy được đề cập trong câu trả lời của tôi là (như đã nêu rõ trong câu trả lời của tôi) bên trong một máy chủ DNS cụ thể. Nếu bạn thực sự đã cố gắng thực hiện đệ quy DNS theo cách lặp hoàn toàn, nó sẽ không bao giờ hoạt động. Ngay khi bạn nhận được trả lời với bản ghi NS mà không cần keo liên kết, bạn phải tìm địa chỉ IP của tên máy chủ được trỏ bởi bản ghi NS đó trước khi bạn có thể tiếp tục với độ phân giải gốc.
kasperd
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.