Vì sao chỉ tồn tại 13 cụm máy chủ DNS Root ?
Vào thời kỳ đầu thiết kế DNS (những năm 1980), một giới hạn quan trọng là các phản hồi DNS sử dụng UDP chỉ được phép phản hồi gói tin có kích thước tối đa 512 byte dữ liệu (Quy định này được đề cập trong RFC 1035 – phiên bản phát hành năm 1987). Mục tiêu là để phản hồi DNS có thể truyền đi mà không bị phân mảnh bởi tầng IP.
Theo RFC 791 (giao thức IP), mọi thiết bị sử dụng IPv4 phải có khả năng tái lắp ghép gói tin IP (sau khi bị phân mảnh) lên đến 576 byte, bao gồm cả tiêu đề IP (IP header) và tiêu đề UDP. Khi trừ đi khoảng 60-64 byte tiêu đề, phần dữ liệu DNS thực tế chỉ còn ~512 byte.
Vào thời đó, nhiều thiết bị định tuyển (router) và tường lửa (firewall) không hỗ trợ tốt các gói UDP bị phân mảnh hay nói cách khác, các thiết bị này không thể tái lắp ghép các gói tin một cách hoàn chỉnh sau khi bị phân mảnh. Một gói DNS vượt quá 512 byte có thể bị chia thành nhiều mảnh IP, và nếu một mảnh bị mất, toàn bộ gói tin phản hồi truy vấn sẽ thất bại. Ngoài ra, nhiều thiết bị mạng hoặc các mạng của các tổ chức có thể chặn hoàn toàn các gói DNS bị phân mảnh. Vì vậy, các nhà thiết kế giao thức ưu tiên giữ phản hồi DNS trong giới hạn 512 byte.
Theo nguyên tắc hoạt động của DNS được thiết kế từ những ngày đầu tiên. Khi người dùng thực hiện một truy cập vào tên miền lần đầu tiên, trình phân giải DNS (resolver) sẽ khởi tạo một truy vấn và thực hiện truy vấn danh sách các máy chủ DNS Root nhằm xác thực (và cập nhật) với danh sách địa chỉ các máy chủ DNS Root mà trình phân giải có. Phản hồi từ truy vấn này – gọi là priming response, có dạng như sau (ban đầu, danh sách máy chủ DNS Root chỉ có địa chỉ IPv4):
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 518400 IN NS a.root-servers.net.
. 518400 IN NS b.root-servers.net.
. 518400 IN NS c.root-servers.net.
. 518400 IN NS d.root-servers.net.
. 518400 IN NS e.root-servers.net.
. 518400 IN NS f.root-servers.net.
. 518400 IN NS g.root-servers.net.
. 518400 IN NS h.root-servers.net.
. 518400 IN NS i.root-servers.net.
. 518400 IN NS j.root-servers.net.
. 518400 IN NS k.root-servers.net.
. 518400 IN NS l.root-servers.net.
. 518400 IN NS m.root-servers.net.
;; ADDITIONAL SECTION:
a.root-servers.net. 3600000 IN A 198.41.0.4
b.root-servers.net. 3600000 IN A 170.247.170.2
c.root-servers.net. 3600000 IN A 192.33.4.12
d.root-servers.net. 3600000 IN A 199.7.91.13
e.root-servers.net. 3600000 IN A 192.203.230.10
f.root-servers.net. 3600000 IN A 192.5.5.241
g.root-servers.net. 3600000 IN A 192.112.36.4
h.root-servers.net. 3600000 IN A 198.97.190.53
i.root-servers.net. 3600000 IN A 192.36.148.17
j.root-servers.net. 3600000 IN A 192.58.128.30
k.root-servers.net. 3600000 IN A 193.0.14.129
l.root-servers.net. 3600000 IN A 199.7.83.42
m.root-servers.net. 3600000 IN A 202.12.27.33Trong đó, kích thước của từng phần trong gói tin phản hồi DNS chi tiết như sau:
- Danh sách bản ghi NS của các máy chủ DNS Root (A đến M)
- Địa chỉ IP (A record) tương ứng cho từng máy chủ
- Một phần tiêu đề DNS – DNS header: 12 byte
- Phần câu hỏi truy vấn - QUESTION SECTION: 5 byte
root-label: 00, 1 byte;
class, 2 bytes;
qtype: 2 bytes.Khi tính toán kích thước của từng bản ghi:
Bản ghi NS đầu tiên thường chiếm khoảng 31 byte:
root-label: 1 byte;
ttl: 4 bytes;
class: 2 bytes;
type: 2 bytes;
rdlength: 2 bytes
nameserver name: <1>a<12>root-servers<3>net<0>: 20 bytes.- Các bản ghi NS tiếp theo, nhờ kỹ thuật nén tên miền (DNS compression), chỉ chiếm khoảng 15 byte:
root-label: 1 byte;
ttl: 4 bytes;
class: 2 bytes;
type: 2 bytes;
rdlength: 2 bytes
nameserver name: <1><letter><compression pointer>: 4 bytes.Mỗi bản ghi A (địa chỉ IP) đi kèm chiếm khoảng 16 byte:
nameserver name: <1><letter><compression pointer>: 2 bytes;
ttl: 4 bytes;
class: 2 bytes;
type: 2 bytes;
rdlength: 2 bytes;
address: 4 bytes.Từ các thông số chi tiết trên, chúng ta có thể có cái nhìn tổng quát như sau:
12 ;; ->>HEADER<<-
5 ;; QUESTION SECTION:
31 + 15n ;; ANSWER SECTION:
16m ;; ADDITIONAL SECTION:Trong đó, n và m là số lượng máy chủ DNS Root (thông thường n = m), từ đó ta có thể tính giới hạn số máy chủ DNS Root cho phép là:
48 + 31n = 512
n =14.96Từ phép tính trên có thể thấy rằng, số lượng máy chủ DNS Root có thể có tối đa 14 máy chủ, tuy nhiên nhằm đảm bảo an toàn và các rủi ro chưa lường trước trong vấn đề truyền các gói tin DNS trên Internet, lựa chọn 13 máy chủ DNS Root là một lựa chọn đảm bảo an toàn.
Do đó, con số 13 được chọn không phải ngẫu nhiên, mà là kết quả của một quá trình tối ưu kỹ lưỡng nhằm đảm bảo cho các hoạt động truy vấn, phản hồi truy vấn DNS một cách nhanh chóng, tin cậy và không bị gián đoạn. Trong thực tế, 13 máy chủ này được triển khai sử dụng công nghệ Anycast, cho phép tạo ra nhiều bản sao của các máy chủ DNS Root nhưng chỉ với 13 địa chỉ IP khác nhau và đặt khắp nơi trên thế giới. Do đó, thuật ngữ “13 cụm máy chủ DNS Root” thay cho “13 máy chủ DNS Root” sẽ phản ánh chính xác về hệ thống máy chủ DNS Root.
Ngày nay, với sự phát triển của các công nghệ mới như IPv6, DNSSEC, … các phản hồi DNS có kích thước lớn hơn nhiều (phản hồi DNS liệt kê tất cả các máy chủ DNS Root – priming response gồm địa chỉ IPv4 và IPv6 có kích thước 811 byte, phản hồi DNSSEC có thể lên đến 1.097 byte, …). Điều này có thể thực hiện được mà không bị giới hạn kích thước phản hồi DNS bằng cách áp dụng tiêu chuẩn mở rộng EDNS(0) , cho phép mở rộng kích thước gói DNS lên tới 4096 byte (hoặc thậm chí lớn hơn trong một số trường hợp), giúp truyền tải các phản hồi DNS lớn, đặc biệt là khi sử dụng DNSSEC, IPv6 hoặc khi có các bản ghi DNS dài.
Mặc dù các tiêu chuẩn công nghệ hiện nay cho phép và hỗ trợ các phản hồi DNS với kích thước lớn hơn 512 byte, điều này đồng nghĩa với việc chúng ta có thể thêm số lượng “cụm” máy chủ DNS Root (không chỉ giới hạn ở con số 13), tuy nhiên điều này là không thực sự cần thiết, vì với sự hỗ trợ của công nghệ Anycast, có thể đặt hàng ngàn máy chủ DNS Root (instance) ở khắp nơi trên thế giới mà không ảnh hưởng đến giới hạn 13 máy chủ DNS Root. Đồng thời, nếu thay đổi số lượng cụm máy chủ DNS Root, có thể ảnh hưởng đến mô hình, kiến trúc hoạt động và các thiết lập của các hệ thống khác trên Internet mà không mang lại hiệu quả vượt trội. Do đó hiện nay vẫn duy trì 13 cụm máy chủ DNS Root (13 tên máy chủ DNS Root).
