打開網站加載半天?消息收不到,可能你需要了解一下DNS
域名系統DNS
域名系統(Domain Name System,DNS)是一個互聯網服務,其功能是用于將域名解析成IP地址
為什么需要DNS
以前我們說過,互聯網中的設備都有屬于自己的IP地址,要訪問這個設備就需要通過這個IP地址,比如現在你需要訪問一個網站www.fake.com,在沒有域名之前你可能需要直接在瀏覽器輸入IP地址如:138.128.11.3,這樣每次都要記憶這個IP地址太麻煩了,這個時候域名就出現了,域名www.fake.com指向138.128.11.3,這個時候你訪問www.fake.com就可以直接訪問138.12.11.3了,就跟我們將一個人的手機號碼備注上對方的名字一樣,這樣便于我們記憶與使用。
而DNS的作用就在于,將www.fake.com這個域名解析成IP地址的形式,否則瀏覽器是不知道www.fake.com究竟代表什么,這就是DNS的作用,也是為什么需要DNS的原因
技術細節
DNS查詢有兩種方式:遞歸和迭代
DNS客戶端一般是遞歸服務器,它全權負責處理客戶端的DNS查詢請求,直到返回結果。而DNS服務器之間一般采用迭代查詢方式。
查詢過程:
1. 客戶端發送查詢報文(query www.zaxuelab.com)到DNS服務器,DNS服務器首先檢查自身緩存,如果存在記錄就直接返回結果
2. 如果記錄老化或不存在,就會開始新的查詢操作:
- DNS服務器向根域名服務器發送查詢報文(query www.zaxuelab.com),跟域名服務器返回頂級域.com的權威域名服務器地址
- DNS服務器向.com域的權威域名服務器發送查詢報文(query www.zaxuelab.com)得到二級域.zaxuelab.com的權威域名服務器地址
- DNS服務器向.zaxuelab.com域的權威域名服務器發送查詢報文(query www.zaxuelab.com)得到主機www的A記錄,存入自身緩存并返回給客戶端
記錄類型
常用的幾種記錄類型:
- A記錄(主機記錄),用于名稱解析的重要記錄,域名-IP
- CNAME記錄(別名記錄),將某個別名指向A記錄,就不需要再創建A記錄了
- AAAA記錄(IPv6主機記錄),與A記錄對應,域名-IPv6地址
一般目前有網站或者一些服務都是做A記錄或CNAME,也有一些已經開始玩IPv6的會做AAAA記錄
網速慢
有時候會發現打開一個網站加載半天,其實這就是DNS的問題,很多時候有一些人會教你配置DNS之類的操作,你可能不知道原因,其實就是一個相同的DNS,在不同地區或不同運營商都會有不同的體驗,選擇適合自己的DNS或者選擇合適的公共DNS能大大改善所謂的“網速”(實際網速有專門的測速方法,如果感興趣可以關注我發的相關文章)
有時候用了國外的DNS后,發現訪問國內的一些網站奇慢無比,其實不是國外的DNS慢,而是要訪問的網站的`CDN分配錯誤`導致很慢的。因為在國內各大運營商之間的主干線路帶寬太窄,導致了最遠的距離不是國內和國外,而是從電信到聯通..其實在國內的一些大網站基本都是做雙線或者多線CDN的(在三大運營商機房里放點服務器),因為客戶可能用電信、聯通、移動其中的一種。當你訪問網站時,智能DNS會根據你的來源IP判斷你是哪個運營商的用戶,再決定返回什么IP給你,我們來看一個例子:
? dig jd.com @202.101.103.55 +short
120.52.148.118 # 聯通
111.13.149.108 # 移動
118.193.98.63 # 電信
? dig jd.com @114.114.114 +short
118.193.98.63
111.13.149.108
120.52.148.118
? dig jd.com @8.8.8.8 +short
120.52.148.118
118.193.98.63
111.13.149.108
? dig jd.com @223.5.5.5 +short
118.193.98.63
111.13.149.108
120.52.148.118
可以看到都是返回三個IP,但是順序不同,我是電信寬帶,這個時候只有獲取到電信才是最快的..這就是一個很簡單的例子
實際上我們也可以借助一些軟件來看看DNS解析的情況,這邊我用DNS Benchmark測試了一下,可以看到一些主流的DNS(因為軟件是國外的,DNS和一些測試站點都是國際的,所以僅供參考,并不絕對),可以看到目前我使用的223.5.5.5和8.8.8.8的速度都是在前面的
常用的公共DNS
一般選擇正確的公共DNS即可解決大部分問題,這里推薦幾個公共DNS
[AliDNS]
223.5.5.5
223.6.6.6
[騰訊DNSPod]
119.29.29.29
119.28.28.28
[googleDNS]
8.8.8.8
8.8.4.4