# [Basic knowledge][Internet] DNS là gì?

# What is DNS

Trong phần này, chúng mình sẽ điểm qua, và nhắc lại nhanh một vài khái niệm cơ bản trong internet

- Network: Một nhóm các máy tính và các thiết bị kết nối với nhau
- Internet
    - Global
    - Networks của networks
- IP: Mỗi thiết bị trong internet sẽ có 1 địa chỉ IP khác nhau, và đây cũng chính là cách mà một máy tính (thiết bị) có thể **nói chuyện** với một máy tính (thiết bị) khác
    
  ![dns-and-how-it-works-1.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1665052388445/8uBvRMpWN.png align="left")
    
- DNS: Domain Name System: là một hệ thống giúp phân giải từ domain name (tên miền), sang địa chỉ IP
     
  ![dns-and-how-it-works-2.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1665052405896/42bdFCkXV.png align="left")
    

# How DNS works

![dns-and-how-it-works-3.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1665052471685/C0_E0xaGZ.png align="left")

Trên đây là tổng quan về việc tìm kiếm IP từ domain.

### Tìm kiếm ở máy client

Khi truy cập vào một domain bất kì (mở trình duyệt và nhập đường dẫn). 

1. Việc tìm kiếm sẽ được bắt đầu từ **Browser Cache** - nếu trước đó trình duyệt đã truy cập domain đó, thì địa chỉ IP sẽ được trả về ngay. và thực hiện thao tác request tới server tương ứng.
2. Nếu **Browser Cache** không có dữ liệu tương ứng. Việc tìm kiếm sẽ được đi tiếp sang tầng DNS Cache (lưu ở máy client), và Hosts File (được định nghĩa trong file hosts ở máy client)
3. Nếu Toàn bộ các phần trên không có. Chúng sẽ bắt đầu tìm kiếm ra ngoài máy client.

### Tìm kiếm ở ngoài máy client

1. Nơi đầu tiên được tìm đến là **Recursive DNS Servers** (thường là các ISP - Internet Service Provider, ví dụ như Viettel, FPT, …). Các ISP này **không lưu trữ IP của các domain**, mà nó sẽ có cache - ví dụ một user khác truy cập vào trang web tương tự, thì địa chỉ IP và domain tương ứng sẽ được cache lại.
2. Và nếu không tìm thấy, từ **Recursive DNS Servers** sẽ gọi đến **Root DNS Servers,** ở đây sẽ lưu trữ Top Level Domains (**TLDs**), ví dụ như **.com, .vn, .net.** Từ đây sẽ trả về địa chỉ IP của **TLD** server tương ứng với domain mà user đang truy cập (ở ví dụ đang là **.com**)
3. **Recursive DNS Servers** sau khi có được địa chỉ IP của **TLD server,** chúng sẽ gọi vào đây để lấy thông tin của authoritative name server (**NS**) -  là nơi lưu trữ lại thông tin chính xác của server chứa thông tin domain.
4. Sau khi có được địa chỉ IP của Authoritative Name Server, Recursive DNS Servers sẽ gọi vào đây để lấy thông tin của địa chỉ IP tương ứng với domain (ở ví dụ là google). Và thông tin này có thể được cache lại tại Recursive DNS Servers. Sau đó sẽ trả về cho browsers của người dùng (đương nhiên, cũng có thể được browsers cache lại)

# Domain Info

![dns-and-how-it-works-4.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1665052509006/LplIIMvLA.png align="left")

Ở phần này, chúng ta cùng tìm hiểu sâu hơn về Domain Info, nơi chứa các DNS records, hoặc Zone files.

DNS records, hoặc Zone files được phân thành các loại như sau

1. A record - Address record: là record dùng để trỏ tên miền sang địa chỉ IP tương ứng
    
    Như ở ví dụ bên dưới, giả sử website là [https://hoangpn.com](https://hoangpn.com)
    
    Chúng ta thấy
    
    - `@` naked domain, tượng trưng cho `hoangpn.com` sẽ được trỏ đến IP là `76.76.21.21`
    - `app` hoặc bất kì tên miền nào khác - sẽ là **sub domain**: `app.hoangpn.com` được trỏ đến địa chỉ IP là `76.76.21.21`
    - Note: TTL = Time To Live: đây là khoảng thời gian mà DNS cache lưu trữ tương ứng name tương ứng với địa chỉ IP
    ![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1665052561089/Mw78L9HlR.png align="left")

2. CNAME record - Canonical Name record là bản ghi quy định alias cho một domain nào đó, được chỉ đến domain, hoặc sub domain nào đó
    
    Như ví dụ bên dưới, chúng ta alias việc truy cập `www.hoangpn.com` sẽ trỏ sang domain `hoangpn.com`. Hoặc có thể truy cập `fb.hoangpn.com` sẽ được trỏ sang `fb.com/hoangpn`

    ![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1665052625798/VVMdr734g.png align="left")

3. MX record - Mail Exchange record: là record xác định mail server mà email sẽ được gửi tới
    
  Như ví dụ bên dưới, chúng ta có thể thấy được những mail đuôi  `@hoangpn.com`, ví dụ như `admin@hoangpn.com, user_a@hoangpn.com` sẽ được gửi về mail server là `mail.example.com`  `mail-2.example.com` , với trọng số là 10, và 20 - đây chính là độ ưu tiên xem sẽ ưu tiên gửi vào mail server nào trước.

  ![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1665052691106/XxLMPeB-R.png align="left")

4. TXT record - Text record: giúp chứa các thông tin dưới dạng text của 1 tên miền. Chủ yếu dùng cho server bên thứ 3 xác định xem domain có đáng tin cậy hay không.
  ![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1665052717868/9N0q8n9zK.png align="left")

5. NS record - Name Server record: giúp xác định thông tin của một tên miền cụ thể được khai báo và quản lý trên máy chủ nào.

  ![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1665052749771/G4Q9bapQI.png align="left")

# Tổng kết
Qua các phần trình bày bên trên, chúng ta đã nắm được cơ bản về domain name services là gì và cách nó hoạt động ra sao.
Hy vọng các kiến thức trên sẽ giúp ích cho các bạn ít nhiều.

Nhưng mọi khi, tuy đã rà soát lại, nhưng cũng sẽ không tránh khỏi việc có sai sót. Mong các bạn để lại góp ý, và cùng giúp nhau tiến bộ nhé.
