DNS là gì?

DNS (Domain Name System), hệ thống phân giải tên miền là một hệ thống cho phép thiết lập tương ứng giữa địa chỉ IP và tên miền trên Internet. Hệ chuyển đổi này được ứng dụng vào Internet từ năm 1984.

Về căn bản, như một “cuốn danh bạ điện thoại” (lưu địa chỉ với số điện thoại tương ứng), DNS giúp cho việc chuyển đổi các tên miền mà con người dễ ghi nhớ (dạng ký tự, ví dụ www.example.com) sang địa chỉ IP vật lý (dạng số, ví dụ 123.11.5.19) tương ứng của tên miền đó.

Nguyên tắc:

Mỗi nhà cung cấp dịch vụ vận hành và duy trì DNS server riêng của mình, gồm các máy bên trong phần riêng của mỗi nhà cung cấp dịch vụ đó trong Internet. Tức là, nếu một trình duyệt tìm kiếm địa chỉ của một website thì DNS server phân giải tên website này phải là DNS server của chính tổ chức quản lý website đó chứ không phải là của một tổ chức (nhà cung cấp dịch vụ) nào khác.

INTERNIC (Internet Network Information Center) chịu trách nhiệm theo dõi các tên miền và các DNS server tương ứng. INTERNIC là một tổ chức được thành lập bởi NSF (National Science Foundation), AT&T và Network Solution, chịu trách nhiệm đăng ký các tên miền của Internet. INTERNIC chỉ có nhiệm vụ quản lý tất cả các DNS server trên Internet chứ không có nhiệm vụ phân giải tên cho từng địa chỉ.

DNS có khả năng truy vấn các DNS server khác để có được một cái tên đã được phân giải. DNS server của mỗi tên miền thường có hai việc khác biệt. Thứ nhất, chịu trách nhiệm phân giải tên từ các máy bên trong miền về các địa chỉ Internet, cả bên trong lẫn bên ngoài miền nó quản lý. Thứ hai, chúng trả lời các DNS server bên ngoài đang cố gắng phân giải những cái tên bên trong miền nó quản lý.

DNS server có khả năng ghi nhớ lại những tên vừa phân giải. Để dùng cho những yêu cầu phân giải lần sau. Số lượng những tên phân giải được lưu lại tùy thuộc vào quy mô của từng DNS.

Vận hành:

  1. Người dùng nhập “google.com” vào browser. Truy vấn sẽ được truyền vào Internet và được nhận bởi DNS Recursor
  2. DNS Recursor sẽ gửi truy vấn tới Root Name Server (.)
  3. Root Name Server sẽ trả về địa chỉ IP của TLD Name Server ( ở đây sẽ là .com TLD)
  4. DNS Recursor tiếp tục gửi truy vấn tới .com TLD
  5. .com TLD sẽ phản hồi bằng địa chỉ IP của google.com Authoritative Name Server
  6. DNS Recursor lại gửi truy vấn tới google.com Authoritative Name Server
  7. google.com Authoritative Name Server sẽ trả về địa chỉ IP của google.com cho DNS Recursor
  8. DNS Recursor phản hồi lại browser địa chỉ IP của tên miền được yêu cầu Sau khi thực hiện các bước trên thì browser đã có thể thực hiện request rồi.
  9. Browser thực hiện HTTP Request đến địa chỉ IP vừa truy vấn xong.
  10. Server response dữ liệu về cho browser.

Các khái niệm liên quan:

Local DNS

Việc truy vấn IP của 1 tên miền khá là dài dòng cho nên hầu hết các DNS Server đều thực hiện việc cache để giảm thiểu việc đi hết tất cả các step ở trên. Không ngoại lệ, ngay chính HĐH của chúng ta cũng cache lại các địa chỉ vừa được request để tăng tốc độ phản hồi thay vì đi nhờ DNS Recursor. Bên cạnh đó HĐH còn cung cấp 1 thứ đó là file hosts (trên linux nó nằm trong thư mục /etc/hosts còn với window là “C:\Windows\System32\drivers\etc\hosts), với file này ta có thể can thiệp vào việc truy vấn DNS. Giả sử ta biết địa chỉ IP của 1 trang web và nó không có tên miền, việc ghi nhớ địa chỉ IP này khá mệt mỏi thì ta có thể thêm địa chỉ IP cùng tên miền mong muốn vào file hosts. Ví dụ: 192.168.1.10 example.com Sau đó, nếu mở trình duyệt và nhập http://example.com, nó sẽ tự động chuyển hướng đến 192.168.1.10. Dễ dàng hơn nhiều so với việc gõ địa chỉ IP mỗi lần. Ngoài ra bạn có thể dùng nó để block các trang web, chẳng hạn bạn muốn con bạn không thể truy cập vào một trang web nào đó thì bạn có thể chèn tên miền cùng địa chỉ IP loopback vào file hosts. Ví dụ: 127.0.0.1 example.com

Lưu ý: Chrome đôi khi sẽ không quan tâm file config trong file hosts nên nó sẽ vẫn thực hiện DNS query

Public DNS

Nếu không config gì cả thì mặc định DNS Recursor của bạn sẽ là của nhà mạng. Do đó trong một vài trường hợp nhà mạng block một trang web nào đó, ta hoàn toàn có thể qua mặt bằng cách đổi DNS Recursor. 

Giao thức vận chuyển

DNS chủ yếu hoạt động trên giao thức UDP và cổng 53. Một số hoạt động khác có sử dụng giao thức TCP.

Cấu trúc gói tin DNS

  • ID: Là một trường 16 bits, chứa mã nhận dạng, nó được tạo ra bởi một chương trình để thay cho truy vấn. Gói tin hồi đáp sẽ dựa vào mã nhận dạng này để hồi đáp lại. Chính vì vậy mà truy vấn và hồi đáp có thể phù hợp với nhau.
  • QR: Là một trường 1 bit. Bít này sẽ được thiết lập là 0 nếu là gói tin truy vấn, được thiết lập là một nếu là gói tin hồi đáp.
  • Opcode: Là một trường 4 bits, được thiết lập là 0 cho cờ hiệu truy vấn, được thiết lập là 1 cho truy vấn ngược, và được thiết lập là 2 cho tình trạng truy vấn.
  • AA: Là trường 1 bit, nếu gói tin hồi đáp được thiết lập là 1, sau đó nó sẽ đi đến một server có thẩm quyền giải quyết truy vấn.
  • TC: Là trường 1 bit, trường này sẽ cho biết là gói tin có bị cắt khúc ra do kích thước gói tin vượt quá băng thông cho phép hay không.
  • RD: Là trường 1 bit, trường này sẽ cho biết là truy vấn muốn server tiếp tục truy vấn một cách đệ quy.
  • RA: Trường 1 bit này sẽ cho biết truy vấn đệ quy có được thực thi trên server không.
  • Z: Là trường 1 bit. Đây là một trường dự trữ, và được thiết lập là 0.
  • Rcode: Là trường 4 bits, gói tin hồi đáp sẽ có thể nhận các giá trị sau:
    •     0: Cho biết là không có lỗi trong quá trình truy vấn.
    •     1: Cho biết định dạng gói tin bị lỗi, server không hiểu được truy vấn.
    •     2: Server bị trục trặc, không thực hiện hồi đáp được.
    •     3: Tên bị lỗi. Chỉ có server có đủ thẩm quyền mới có thể thiết lập giá trị náy.
    •     4: Không thi hành. Server không thể thực hiện chức năng này.
    •     5: Server từ chối thực thi truy vấn.
  • QDcount: Số lần truy vấn của gói tin trong một vấn đề.
  • ANcount: Số lượng tài nguyên tham gia trong phần trả lời.
  • NScount: Chỉ ra số lượng tài nguyên được ghi lại trong các phần có thẩm quyền của gói tin.
  • ARcount: Chỉ ra số lượng tài nguyên ghi lại trong phần thêm vào của gói tin.

Các loại bản ghi DNS được dùng nhiều nhất

  • A Record: Là bản ghi được sử dụng trỏ tên website tới một địa chỉ IP cụ thể. Bạn có thể thêm tên mới, TTL (Time to Live, thời gian tự động tải lại bản ghi), Points to (trỏ tới IP nào).
  • CNAME record: Đóng vai trò như đặt một hoặc nhiều tên khác cho tên miền chính. Bạn có thể tạo một tên mới, trỏ tới tên gốc là gì, đặt TTL với bản ghi này.
  • MX record: Là một bản ghi chỉ định server nào quản lý các dịch vụ email của tên miền đó. Bạn có thể trỏ tên miền tới mail server, đặt mức độ ưu tiên (priority), đặt TTL.
  • TXT record: Dùng để chứa các thông tin dạng text (văn bản) của tên miền. Bạn có thể thêm Host mới, Giá trị TXT, TTL (Time to Live), Points to.
  • AAAA record: Dùng để trỏ domain tới một địa chỉ IPV6 address. Bạn có thể thêm host mới, IPv6, TTL.
  • NS record: Dùng để chỉ định nameserver cho từng tên miền phụ. Bạn có thể tạo host mới, tên name server (NS), TTL (Time to Live).
  • SRV record: Dùng để xác định chính xác dịch vụ nào chạy port nào, tại đây bạn có thể thêm Priority, Name, Weight, Port, Points to, TTL.

(tổng hợp)

About the Author

Ha Trung Vi

View all author's posts

Bài viết khác

Golang

Golang là gì? Go hay còn gọi là Golang là ngôn ngữ lập trình mã nguồn mở, được thiết kế tại Google bởi Robert Griesemer, Rob Pike, and Ken Thompson. Go có cú pháp giống với C và tất nhiên nó là ngôn ngữ lập trình biên dịch (compiled programming language) Cú pháp của ngôn […]

Elasticsearch

Elasticsearch là gì? Elasticsearch là một search engine (công cụ tìm kiếm) rất mạnh mẽ. Elasticsearch cũng có thể coi là một document oriented database, nó chứa dữ liệu giống như một database và thực hiện tìm kiếm trên những dữ liệu đó. Đại khái là thay vì bạn tìm kiếm trên file, trên các […]

Testing

Testing là gì? Thường thì mọi người hiểu khái niệm test chỉ là chạy test, chạy phần mềm nhưng đó chỉ là một phần không phải tất cả các hoạt động test. Các hoạt động test tồn tại trước và sau khi chạy PM bao gồm: lên kế hoạch và kiểm soát, chọn điều kiện […]

Web Security

Có rất nhiều lý do để học về web security như: Bạn là một người dùng lo lắng về việc thông tin cá nhân bị rò rỉ. Bạn là một web developer muốn làm cho trang web của bạn bảo mật hơn. Bạn là một web developer đang tìm việc, và bạn muốn sẵn sàng […]

Cache

Trong vài năm trở lại đây, công nghệ thông tin đã trở thành bàn đạp cho sự cải thiện mạnh mẽ cho vô số các loại hình kinh doanh. Song song, kiến trúc của các phần mềm cũng ngày càng trở nên phức tạp và số lượng người dùng của chúng đã và đang tăng […]

Docker

Docker là gì? Docker là một nền tảng phần mềm giúp bạn building, deploying và running ứng dụng dễ dàng hơn bằng cách sử dụng các containers (trên nền tảng ảo hóa). Docker ban đầu Docker  được viết bằng PyDockerthon, hiện tại đã chuyển sang Golang. Docker đóng gói phần mềm thành các container tiêu […]