---
tags: Other
---
# Domain Name System, DNS
出了社會之後被同事推坑用 Richart,現在~~轉帳都超方便~~,試想一下轉帳如果每次都要打帳號是不是非常不友善,~~到底誰會記得~~。此時我們就會把常用的帳號記在通訊錄裡,下次我只要知道我要轉給誰,Richart 就會很聰明地幫我直接轉帳到對的人。
同理,我們去連其他網站也是相同的。
> 好友名稱透過通訊錄轉成帳號 == Domain Name 透過 DNS 轉成 IP
以 Google 大大為例,我們在網址列打上 https://www.google.com/ 時,其實就是送一個 request 給 Google,https://www.google.com/ 其實是為了大家能夠比較好記憶,就像是通訊錄上的名字,而他會經過 Domain Name System 轉換成一個 IP,就像是轉帳的帳號本身,本身非常之難記。
```shell
$ host www.google.com
www.google.com has address 216.58.200.228
```
當然你也可以直接透過 IP 來連線,就不用透過 DNS,就像是你轉帳時也能夠直接輸入帳號一樣。
- 利用類似**樹狀目錄**的架構,將主機名稱的管理分配在不同層級的 DNS 伺服器,做階層式管理


DNS 沒這麼笨每次都要重查,他會做 cache。
- 需要 Domain 時,除非主機量龐大、Domain 常變動,才需要自架 DNS,否則交給 ISP 託管就好。
## `/etc/hosts`
常用的 [localhost](https://zh.wikipedia.org/wiki/Localhost) 其實是對應到 `127.0.0.1`,這個其實是透過 `/etc/hosts` 來做設定的,電腦上用這個檔案來去 mapping 一些 IP。
最好將所有的私有 IP 與主機名稱對應都寫入這個檔案中。
```shell
$ cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
# End of section
```
這個方法只適合用在自己的私網,試想若全世界的 Domain 都要記在這個檔案,要瘋狂的 sync 才能確保連到正確的 IP,~~絕對不可能這樣搞,但遠古時代的確是這樣~~。

## 名詞解釋
- **BIND**, Berkeley Internet Name Domain:提供 DNS 服務的軟體
- **FQDN**, Fully Qualified Domain Name:如有一部伺服器的本地主機名為`myhost`,而其母域名為 `example.com`,那指向該伺服器的完整網域名稱就是 `myhost.example.com`
- **ISP**, Internet Service Provider
## 參考資料
- [主機名稱控制者:DNS 伺服器 / 鳥哥的 Linux 私房菜](http://linux.vbird.org/linux_server/0350dns.php)