DNS là gì?
DNS (Domain Name System) là một dịch vụ phân giải tên miền, giúp chuyển đổi các tên miền (ví dụ: www.ducphat.com
) thành địa chỉ IP (ví dụ: 93.184.216.34
) và ngược lại. Thay vì phải nhớ dãy số IP, chúng ta chỉ cần nhập tên miền, DNS sẽ tìm kiếm địa chỉ IP tương ứng để thiết bị có thể kết nối đến máy chủ.
Cấu trúc phân cấp của DNS
DNS hoạt động theo mô hình phân cấp dạng cây, bao gồm các cấp chính:
Root (gốc)
Được ký hiệu bằng dấu chấm (.
) ở cuối tên miền (thực tế khi gõ trình duyệt, dấu chấm này có thể bỏ).
Top-Level Domains (TLDs)
Chia thành hai nhóm chính:
- gTLDs (Generic TLDs): .com, .net, .org, .info, .edu, .gov…
- ccTLDs (Country-code TLDs): .vn, .jp, .us, .de, .fr…
Các TLD server lưu trữ thông tin về máy chủ quản lý SLD (ví dụ, máy chủ TLD .vn
biết máy chủ Authoritative cho example.vn
).
Second-Level Domains (SLDs)
- Là tên miền đăng ký (ví dụ:
example.com
,google.vn
). Được tổ chức quản lý bởi các registry (như VNNIC với .vn). - Dưới SLD có thể có nhiều subdomain (ví dụ:
www.example.com
,mail.example.com
,dev.blog.example.com
).
Authoritative Name Servers
Mỗi tên miền thuê (SLD hoặc subdomain) đều có một hoặc nhiều máy chủ DNS chính thức (Authoritative DNS Servers) chứa các bản ghi (A, MX, CNAME, TXT, NS, SOA, v.v.) xác định cách chuyển đổi tên thành IP hoặc cung cấp thông tin khác.
Caching Name Servers (Resolver)
Thường triển khai ở ISP (nhà cung cấp Internet) hoặc cấu hình ở máy cá nhân (ví dụ: 8.8.8.8 của Google, 1.1.1.1 của Cloudflare).
Khi client (máy tính, điện thoại) thực hiện truy vấn DNS, resolver sẽ tìm trong cache trước, nếu không có mới gửi truy vấn lên các máy chủ cấp cao (root → TLD → Authoritative) rồi lưu kết quả vào cache để tăng tốc cho các lần sau.
Phân giải DNS (DNS Resolution)
Giả sử máy client cần biết IP của www.example.com
, quá trình diễn ra như sau:
Bước 1 (Kiểm tra cache local): Client (hoặc hệ điều hành) kiểm tra xem DNS cache trong máy đã có sẵn bản ghi IP cho www.example.com
chưa (chẳng hạn vừa resolve xong cách đây vài phút). Nếu có, trả thẳng về client mà không cần gọi tiếp.
Bước 2 (Gửi truy vấn tới Resolver):
- Nếu cache local trống, client gửi truy vấn đến Recursive Resolver ( thường là DNS server của ISP hoặc DNS công cộng).
- Truy vấn được gửi dưới dạng UDP (port 53) hoặc TCP (nếu kích thước quá lớn hoặc cần chính xác).
Bước 3 (Nếu Resolver có trong cache): Nếu Resolver đã lưu bản ghi (vẫn trong TTL hợp lệ), thì trả ngay về client mà không cần đi tiếp.
Bước 4 (Query tới Root Server):
- Resolver không có cache sẽ gửi request “recursive” lên một trong các máy chủ Root.
- Root server không trả IP trực tiếp, mà trả về Referral (địa chỉ của các máy chủ TLD phù hợp, ví dụ server quản lý
.com
).
Bước 5 (Query tới TLD Server):
- Resolver gửi truy vấn tiếp đến một trong các TLD servers (ví dụ: server của
.com
). - TLD server trả về Referral chứa địa chỉ Authoritative Name Server cho
example.com
, ví dụ ns1.example.com, ns2.example.com.
Bước 6 (Query tới Authoritative Server):
- Resolver kết nối tới Authoritative Name Server cho
example.com
và yêu cầu bản ghi A củawww.example.com
. - Authoritative server trả về response chứa địa chỉ IP (ví dụ: 93.184.216.34) cùng TTL (Time To Live) — giá trị xác định thời gian cache.
Bước 7 (Kết quả về client):
- Resolver trả IP cho client; client thiết lập kết nối TCP (hoặc UDP) với IP này để gửi HTTP request, v.v.
- Thông tin cũng được lưu cache ở Resolver (và client) dựa trên TTL để lần sau không phải lặp lại toàn bộ chuỗi truy vấn.