12/34 DNS đổi tên thành số Các chương

DNS là gì, và vì sao gõ tên lại tới đúng máy?

Làm sao một cái tên biến thành địa chỉ IP?

Router cần địa chỉ IP để chuyển gói tin.

Nhưng khi mở một website, bạn thường gõ:

example.com

chứ không phải một dãy số.

Làm sao cái tên đó biến thành địa chỉ IP?

Ban đầu, mọi tên máy nằm trong một file

Trên ARPANET, tên máy và địa chỉ của chúng từng được lưu trong một file chung gọi là HOSTS.TXT.

Nó trông gần giống thế này:

10.0.0.1    alpha
10.0.0.2    beta
10.0.0.3    gamma

Một nơi giữ bản chính. Các máy khác định kỳ tải file về.

Khi mạng còn nhỏ, cách này đủ dùng.

Nhưng càng nhiều máy, file càng lớn, thay đổi càng thường xuyên và càng nhiều máy phải tải lại nó.

Quan trọng hơn, mọi thay đổi đều phải đi qua một nơi.

Internet cần một cách để chia việc quản lý ra.

DNS chia tên thành nhiều tầng

Năm 1983, Paul Mockapetris đề xuất hệ thống tên miền (Domain Name System, DNS).

Thay vì giữ tất cả tên trong một danh sách, DNS tổ chức chúng thành một cây:

www.example.com.
            │
            └── com
                 │
                 └── example
                        │
                        └── www

Mỗi phần của cây có thể do một bên khác quản lý.

Máy chủ ở tầng trên không cần biết địa chỉ cuối cùng. Nó chỉ cần biết phải hỏi ai tiếp theo.

Ví dụ khi tìm www.example.com:

  1. Máy chủ gốc (root server) chỉ tới nơi quản lý .com.
  2. Máy chủ .com chỉ tới nơi quản lý example.com.
  3. Máy chủ của example.com mới trả lời địa chỉ của www.example.com.

Không nơi nào phải giữ toàn bộ danh sách tên trên Internet.

Ai đi hỏi từng tầng?

Trình duyệt không tự hỏi từng máy chủ DNS.

Máy tính của bạn thường gửi câu hỏi cho một resolver, tức máy chủ DNS làm việc tra cứu thay bạn.

Resolver có thể do nhà mạng cung cấp, hoặc là một dịch vụ DNS công cộng.

Resolver lần lượt hỏi từng tầng cho tới khi tìm được nơi giữ câu trả lời. Thử tra www.example.com hai lần:

Một lần tra DNS

Máy bạn cần địa chỉ IP của www.example.com

Máy bạn

www.example.com203.0.113.9

Resolver

Bộ nhớ đệm

www.example.com → 203.0.113.9

còn 60 giây

Resolver đã nhớ câu trả lời.

Resolver đi tìm câu trả lời

Máy chủ gốc

.com → hỏi bên này

Máy chủ .com

example.com → hỏi bên này

Máy chủ example.com

203.0.113.9

Lần tra đầu: 4 lượt hỏi · ≈ 130 ms Tra lại: 1 lượt hỏi · ≈ 3 ms

Resolver không hỏi lại từ đầu mỗi lần

Câu trả lời vừa tìm được nằm lại trong bộ nhớ đệm (cache) của resolver. Mỗi bản ghi DNS có một thời gian được phép lưu, gọi là TTL. Khi TTL hết hạn, resolver mới phải lấy thông tin mới.

Đó cũng là lý do khi đổi địa chỉ của một tên miền, thay đổi có thể chưa xuất hiện ngay ở mọi nơi: một số resolver vẫn còn giữ câu trả lời cũ.

TTL này là thời gian cache của DNS, không phải TTL trong gói IP.

DNS không phải một cuốn danh bạ khổng lồ

Điểm quan trọng của DNS không chỉ là đổi tên thành số.

Nó giải quyết vấn đề lớn hơn:

không bắt một nơi phải biết tất cả tên trên Internet.

Mỗi tổ chức tự quản phần tên miền của mình. Các tầng phía trên chỉ cần biết phải chỉ câu hỏi xuống đâu.

Cuối cùng, máy tính nhận được thứ router cần:

www.example.com
      ↓
203.0.113.9

Từ đây, router có thể dùng địa chỉ IP để đưa gói tin tới server.

Nhưng IP chỉ xác định máy. Trên máy đó có thể có nhiều dịch vụ cùng sử dụng mạng.

Gói tin tới đúng máy rồi, làm sao nó vào đúng dịch vụ?

Nguồn bài viết (6)

  1. RFC 608 — Host Names On-Line · IETF
  2. RFC 882 — Domain Names: Concepts and Facilities · IETF
  3. RFC 1034 — Domain Names: Concepts and Facilities · IETF
  4. Root Server Technical Operations Association · Root Server System
  5. Revisiting Comparative Performance of DNS Resolvers in the IPv6 and ECS Era · Case Western Reserve University (arXiv)
  6. Performance Benefits · Google Public DNS