Tại sao DNS thông qua UDP có giới hạn 512 byte?


14

Tôi đã tìm kiếm một câu trả lời cho câu hỏi đó (câu hỏi trong tiêu đề) và điều tốt nhất tôi tìm thấy là:

Trong thiết kế Giao thức DNS, kích thước Khối vận chuyển UDP (kích thước tải trọng) đã được giới hạn ở 512 Byte để tối ưu hóa hiệu suất trong khi tạo lưu lượng mạng tối thiểu.

Câu hỏi của tôi là: làm thế nào chính xác điều này nâng cao hiệu suất và có bất kỳ lý do nào khác cho giới hạn này khi sử dụng UDP không?


5
Câu hỏi thực sự dựa trên một tiền đề sai (ít nhất là một lỗi thời). Giới hạn tải trọng 512 byte không còn nữa, xem câu trả lời của tôi dưới đây.
Håkan Lindqvist

Câu trả lời:


18

Tải trọng 512 byte đảm bảo rằng các gói DNS có thể được lắp lại nếu bị phân mảnh trong quá trình vận chuyển. Ngoài ra, nói chung, có ít khả năng các gói nhỏ hơn bị loại bỏ ngẫu nhiên.

Các tiêu chuẩn IPv4 quy định cụ thể rằng mỗi máy chủ phải có khả năng tập hợp lại các gói dữ liệu của 576 byte hoặc ít hơn. Với tiêu đề IPv4 (20 byte, mặc dù có thể cao tới 60 byte w / tùy chọn) và tiêu đề UDP 8 byte, gói DNS có tải trọng 512 byte sẽ nhỏ hơn 576 byte.

Như @RyanRies nói: DNS có thể sử dụng TCP cho tải trọng lớn hơn và cho chuyển vùng và DNSSEC. Có nhiều độ trễ hơn khi TCP xuất hiện bởi vì, không giống như UDP, có một cái bắt tay giữa máy khách và máy chủ trước khi bất kỳ dữ liệu nào bắt đầu chảy.


7
Một lưu ý liên quan: lý do sẽ luôn có 13 tên trình phân giải DNS gốc (a.root-servers.net thông qua m.root-servers.net) là vì đó là số lượng tối đa có thể phù hợp với phản hồi DNS cho truy vấn cho gốc mà không vượt quá giới hạn 512 byte. Do đó, ngay cả khi chúng tôi thêm nhiều máy chủ vật lý vào cơ sở hạ tầng DNS gốc, về mặt logic, sẽ luôn luôn có mười ba máy chủ gốc.
phoebus

2
@RyanRies Đối với DNSSEC EDNS0 với tải trọng được phép lớn hơn thực tế là chế độ hoạt động bình thường, không phải TCP.
Håkan Lindqvist

1
MTU được phép nhỏ nhất không phải là 576 byte, nó là 68 byte trong IPv4 và 1280 byte trong IPv6.
kasperd

1
@phoebus bạn có thể chỉ cho tôi cách 13 máy chủ không vượt quá 512 byte trong khi 14 máy chủ không? tính toán đằng sau nó là gì?
Titi Wangsa bin Damhore

1
512 + 60 + 8 = 580 byte, không phải 576, không?
Carlo Wood

12

DNS hiện đại thực sự không bị giới hạn ở tải trọng 512 byte cho UDP nữa.

Với EDNS0 được sử dụng, kích thước tải trọng lớn hơn có thể được chỉ định, đây cũng là trường hợp thường gặp đối với các khách hàng nhận biết DNSSEC.

Sự hỗ trợ cho tải trọng lớn hơn UDP là con dao hai lưỡi, tuy nhiên, đó là một phần lý do tại sao sử dụng máy chủ tên cho các cuộc tấn công khuếch đại trở nên phổ biến hơn khi bạn có thể đạt được khuếch đại tốt hơn nếu kẻ tấn công sử dụng truy vấn nhận được phản hồi lớn .

Xem rfc2671 để biết chi tiết về nitty-gritty của EDNS0


2
Điều này là đúng, nhưng vẫn còn các bộ định tuyến và tường lửa ngoài đó thả các gói DNS UDP trên 512 byte.
Ryan Ries

2
@RyanRies Vâng, trong khi đó tất nhiên đó là hành vi được coi là không chính xác theo tiêu chuẩn ngày nay, đó là điều đôi khi vẫn gây ra vấn đề. (Về lý thuyết nếu một người có giới hạn như vậy, người ta sẽ biết cách định cấu hình phần mềm có liên quan để không quảng cáo khả năng xử lý / không gửi phản hồi lớn hơn.)
Håkan Lindqvist

1

Ví dụ, các hoạt động DNS, truy vấn và hoạt động bảo trì vùng theo mặc định sử dụng cổng 53. Vì lý do hiệu suất, các truy vấn sử dụng giao thức UDP với giới hạn kích thước khối là 512 byte. TCP có thể được đàm phán tùy ý trên cơ sở giao dịch theo giao dịch cho các hoạt động truy vấn, nhưng do chi phí hoạt động phát sinh với TCP, đây thực chất là một khả năng lý thuyết. Về mặt lịch sử, vượt quá giới hạn kích thước phản hồi 512 byte thường được tránh bằng mọi giá và thực tế giới hạn của 13 máy chủ gốc IPv4 là mức tối đa có thể được trả về trong một giao dịch UDP 512 byte duy nhất.

Ron Aitchison - DNS chuyên nghiệp và BIND 10 - 2011


Cảm ơn. Chúng tôi có thể biết nguồn gốc của trích dẫn (để quy kết cho nó)?
Pothi Kalimuthu

-2

Đó là một điều QOS.

Vì UDP không trạng thái, việc xử lý lỗi các gói là không thể.

Do đó, bằng cách giữ các gói ở kích thước tối đa, sẽ có một sự thay đổi lớn hơn mà chúng sẽ đến đích, làm giảm tác động của việc không xử lý lỗi.


Các gói lớn hơn không có nghĩa là UDP không chuyển sang TCP. Tôi có hiểu nhầm những gì bạn đang nói không?
mfinni

Bạn có thể đúng. Tôi nghĩ rằng tôi đã đọc nó trong một RFC đề xuất ở đâu đó.
Garreth McDaid

UDP không thất bại nhưng đối với DNS cụ thể nếu phản hồi quá lớn không phù hợp khi sử dụng UDP, điều này sẽ dẫn đến phản hồi bị cắt ngắn (phản hồi thực tế không chứa tất cả dữ liệu và cờ 'bị cắt cụt' được đặt để biểu thị điều này), khách hàng sau đó có thể thử lại bằng TCP.
Håkan Lindqvist
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.