KNOWLEDGE

Vì sao toàn thế giới chỉ có 13 nhóm root nameserver?

Ràng buộc cứng 512 byte của UDP trong DNS đặt ra giới hạn toán học là 13 nhóm — cố định từ năm 1997, nay được phục vụ bởi hơn một nghìn bản sao anycast trên toàn cầu.

Tóm tắt

Giao thức DNS ban đầu được thiết kế để chạy trên IPv4 + UDP, nơi tải trọng UDP tối đa không bị phân mảnh là 512 byte. Danh sách root nameserver phải vừa trong một gói phản hồi UDP duy nhất (để tránh chuyển sang TCP, vốn làm tăng độ trễ và độ phức tạp). Tính ngược từ cấu trúc byte của gói tin DNS, số máy chủ gốc tối đa có thể chứa là 13. Đây không phải con số được chọn vì "vừa đủ dùng" — mà là giới hạn cứng của giao thức từ năm 1995, được giữ nguyên đến nay để tương thích với hàng tỷ thiết bị đầu cuối.

1. Ràng buộc cứng của giao thức: 512 byte

1.1 MTU của IPv4 và UDP không phân mảnh

Các mạng ARPANET / IPv4 thời kỳ đầu quy định MTU tối thiểu là 576 byte. Mọi máy chủ đều phải nhận được gói tin cỡ này, nếu không thì ngay cả khả năng kết nối cơ bản nhất cũng không được đảm bảo (RFC 791).

RFC 791 — Internet Protocol, 1981, § 3.1 Total Length
Total Length is the length of the datagram, measured in octets,
including internet header and data.  This field allows the length of
a datagram to be up to 65,535 octets.  Such long datagrams are
impractical for most hosts and networks.  All hosts must be prepared
to accept datagrams of up to 576 octets (whether they arrive whole
or in fragments).  It is recommended that hosts only send datagrams
larger than 576 octets if they have assurance that the destination
is prepared to accept the larger datagrams.
  • Tổng độ dài 576 byte − header IP điển hình 20 byte − header UDP 8 byte ≈ 548 byte khả dụng (khi có tùy chọn IP, header có thể lên tới 60 byte, còn lại ít hơn)
  • RFC 1035 § 4.2.1 chọn lũy thừa của 2 thận trọng hơn là 512 byte làm giới hạn cứng cho DNS qua UDP — vẫn an toàn kể cả khi header IP mang đầy đủ tùy chọn
  • Nếu phản hồi UDP vượt quá 512 byte, nó phải bị cắt bớt và bật cờ TC, buộc máy khách chuyển sang TCP — và bắt tay ba bước của TCP làm độ trễ của lần phân giải đầu tiên tăng lên gấp nhiều lần

Nói cách khác, "toàn bộ danh sách máy chủ gốc phải vừa trong một gói UDP 512 byte" — nếu không, mọi truy vấn root trên toàn cầu đều phải đi qua TCP, điều gần như là thảm họa với phần cứng thập niên 1980.

1.2 Cấu trúc byte của gói tin DNS

Cấu trúc đầy đủ của phản hồi cho truy vấn bản ghi NS của . (máy chủ trả về tất cả bản ghi NS gốc cùng các bản ghi glue A):

Header   (12 byte)

Công thức tổng độ dài:

L(N) = 12 + 5 + 31 + 15(N-1) + 16N = 31N + 33

Thay giới hạn 512 byte vào:

31N + 33 ≤ 512 ⇒ N ≤ 15.45

Về lý thuyết cho phép tối đa 15 nhóm, nhưng cần chừa khoảng trống cho chữ ký DNSSEC, bản ghi giả EDNS0 OPT và phần đệm trường dữ liệu, nên cuối cùng cố định ở 13 nhóm — RFC 2010 (1996) đưa ra tiêu chuẩn vận hành cho máy chủ gốc, và con số này không thay đổi kể từ khi M-root đi vào hoạt động năm sau đó.

1.3 Tự kiểm chứng — <code>dig +noedns -t ns .</code> trả về khoảng 490–510 byte

Đó là lý thuyết. Giờ hãy thực sự hỏi một máy chủ gốc bằng dig và xem phản hồi thật lớn bao nhiêu:

terminal — dig +noedns -t ns .
$ dig +noedns -t ns .

; <<>> DiG 9.10.6 <<>> +noedns -t ns .
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35973
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 15

;; QUESTION SECTION:
;.                                IN      NS

;; ANSWER SECTION:
.                       430502  IN      NS      a.root-servers.net.
.                       430502  IN      NS      b.root-servers.net.
…  (tổng cộng 13 bản ghi NS, bỏ qua c–l)
.                       430502  IN      NS      m.root-servers.net.

;; ADDITIONAL SECTION:
a.root-servers.net.     516909  IN      A       198.41.0.4
b.root-servers.net.     562547  IN      A       170.247.170.2
…  (đủ chỗ cho cả 13 bản ghi glue A)
m.root-servers.net.     516941  IN      A       202.12.27.33
a.root-servers.net.     516930  IN      AAAA    2001:503:ba3e::2:30
b.root-servers.net.     562547  IN      AAAA    2801:1b8:10::b
↑ chỉ vừa 2 bản ghi AAAA — gói tin đã đầy

;; Query time: 8 msec
;; SERVER: 192.168.1.1#53
;; MSG SIZE  rcvd: 492

Dòng quan trọng ở cuối — tổng phản hồi khoảng 490–510 byte, thấp hơn hẳn 512 (con số chính xác phụ thuộc vào máy chủ gốc bạn hỏi và số bản ghi glue IPv6 được trả về) — khớp với ngân sách byte ở trên. Lưu ý cờ +noedns: dig mặc định gửi kèm EDNS0, khi đó phản hồi lên tới hơn 800 byte. Chính vì thế 512 byte không còn là giới hạn cứng khi EDNS0 trở nên phổ biến — nhưng con số 13 thì đã được chốt từ trước đó.

2. Con số 13 từ đâu mà có? Sơ lược lịch sử

Con số này không được ấn định ngay từ đầu. Số lượng máy chủ gốc đã trải qua nhiều lần mở rộng; sau khi M-root (WIDE, Nhật Bản) đi vào hoạt động năm 1997 thì không thay đổi nữa:

NămSố lượngSự kiện chính
19844Thiết kế ban đầu của giao thức DNS, toàn bộ máy chủ đặt tại Mỹ
19917Bổ sung các nút của giới học thuật / Bộ Quốc phòng Mỹ
19959RIPE NCC tham gia (K-root) — máy đầu tiên ở châu Âu
199713WIDE Project tham gia (M-root) — máy đầu tiên ở châu Á, số lượng được chốt
200713Bổ sung hỗ trợ dual-stack IPv6, nhưng "số nhóm" IP vẫn giữ nguyên
202313USC-ISI chuyển IP của B-root sang 170.247.170.2 (IP cũ 199.9.14.201 ngừng hoạt động)

Khi đã chốt ở 13, tên các chữ cái từ A đến M không bao giờ thay đổi — chỉ nâng cấp phần cứng và bổ sung bản sao anycast. Tệp root hint của Internet (named.root) từ lâu đã được ghi cứng vào mã của hàng tỷ recursive resolver và stub client; thay đổi một con số đồng nghĩa với nâng cấp toàn bộ Internet.

3. Nhưng thật sự cả thế giới chỉ có 13 máy?

Không. Đây là hiểu lầm phổ biến nhất. "13 nhóm máy chủ gốc" là 13 tên NS (a–m.root-servers.net), mỗi tên ứng với một địa chỉ IPv4 và một địa chỉ IPv6 — không phải 13 máy chủ vật lý.

Đằng sau mỗi IP là một cụm anycast — cùng một địa chỉ IP được hàng trăm datacenter trên thế giới đồng thời quảng bá qua BGP, và truy vấn DNS của người dùng được định tuyến tới bản sao gần nhất theo RTT. Khi một máy chủ gốc "sập", thường chỉ có nghĩa là bản sao ở một thành phố đang bảo trì — việc phân giải toàn cầu không bị ảnh hưởng.

Hiện trạng 13 nhóm máy chủ gốc năm 2024

Chữ cáiĐơn vị vận hànhIPv4IPv6Số bản sao Anycast
AVerisign, Inc.198.41.0.42001:503:ba3e::2:3053
BInformation Sciences Institute (USC)170.247.170.22801:1b8:10::b6
CCogent Communications192.33.4.122001:500:2::c12
DUniversity of Maryland199.7.91.132001:500:2d::d187
ENASA Ames Research Center192.203.230.102001:500:a8::e254
FInternet Systems Consortium192.5.5.2412001:500:2f::f274
GUS DOD Network Information Center192.112.36.42001:500:12::d0d6
HUS Army Research Laboratory198.97.190.532001:500:1::5317
INetnod192.36.148.172001:7fe::5375
JVerisign, Inc.192.58.128.302001:503:c27::2:30168
KRIPE NCC193.0.14.1292001:7fd::1113
LICANN199.7.83.422001:500:9f::42218
MWIDE Project202.12.27.332001:dc3::3512
Tổng số bản sao anycast (2024)1395

Trung Quốc đại lục (Bắc Kinh, Thượng Hải, Thâm Quyến, Quảng Châu, Hợp Phì và nhiều nơi khác) có các nút bản sao anycast của nhiều máy chủ gốc như F / I / J / K / L; RTT đo thực tế tới máy chủ gốc từ trong Trung Quốc thường dưới 20ms.

4. Sau EDNS0, 512 byte không còn là giới hạn thật

Bạn có thể hỏi: ngày nay gói DNS từ 4KB trở lên là chuyện thường, vậy sao không "vượt qua con số 13"?

  • EDNS0 (RFC 2671 năm 1999, hiện là RFC 6891) — thương lượng tải trọng UDP lớn hơn (thường là 4096 byte), mọi resolver hiện đại đều hỗ trợ
  • DNSSEC bắt buộc dùng EDNS0, vì riêng dữ liệu chữ ký đã vượt xa 512 byte
  • TCP fallback — bắt tay ba bước TCP cùng TLS / cookie ngày nay đã rất rẻ

Nhưng danh sách máy chủ gốc giờ là đồng thuận của toàn mạng: mọi recursive resolver trên thế giới đều ghi cứng 13 nhóm này trong tệp hint (named.root), và phía sau các resolver đó là hàng tỷ thiết bị đầu cuối. Động lực thay đổi bằng không, còn rủi ro là Internet toàn cầu bị chia cắt, nên con số này gần như chắc chắn sẽ mãi là 13.

Tóm lại: "13 nhóm" về mặt vật lý đã lỗi thời từ lâu, nhưng về mặt kỹ thuật thì không thể đảo ngược.

5. Điểm chính

  1. Lý do lịch sử: giới hạn 512 byte của DNS qua UDP → giới hạn toán học 15 nhóm → chọn 13 để chừa khoảng trống, cố định khi M-root đi vào hoạt động năm 1997
  2. Quán tính giao thức: nâng cấp tệp hint trên hàng tỷ thiết bị đầu cuối là không khả thi, nên không bao giờ thay đổi
  3. Năng lực thực tế: hơn 1395 nút bản sao anycast, rủi ro sự cố đơn điểm gần như bằng không
  4. Truy cập được từ Trung Quốc: nhiều máy chủ gốc như F / I / J / K / L có bản sao tại Trung Quốc đại lục, RTT đo thực tế < 20ms

Đọc thêm

mimetic
mimetic
mimetic