DNS簡介
DNS全稱Domain Name System,即域名解析系統(tǒng)。
域名(domain name)是IP地址的代號,域名解析系統(tǒng)(DNS, domain name system)就負(fù)責(zé)將域名翻譯為對應(yīng)的IP地址。DNS協(xié)議主要基于UDP,是應(yīng)用層協(xié)議。
1、在瀏覽器的地址欄輸入域名,而不是IP地址。減輕了互聯(lián)網(wǎng)用戶的記憶負(fù)擔(dān)。
2、網(wǎng)站可能會變更IP地址。可以更改DNS中的對應(yīng)關(guān)系,從而保持域名不變,而IP地址更新。
域名和IP地址的對應(yīng)關(guān)系存儲在DNS服務(wù)器(DNS server)中
域名的層級結(jié)構(gòu)
主機(jī)名.次級域名.頂級域名.根域名
host.sld.tld.root
DNS解析過程
以下步驟中,DNS緩存中存在域名對應(yīng)IP則DNS解析成功,若DNS服務(wù)器緩存中不存在域名對應(yīng)IP,則自動進(jìn)入下一步
瀏覽器緩存,當(dāng)用戶通過瀏覽器訪問某域名時,瀏覽器首先會在自己的緩存中查找是否有該域名對應(yīng)的IP地址
系統(tǒng)緩存,檢查用戶計算機(jī)系統(tǒng)Hosts文件是否有該域名對應(yīng)IP;
路由器緩存,當(dāng)瀏覽器及系統(tǒng)緩存中均無域名對應(yīng)IP則進(jìn)入路由器緩存中檢查,以上三步均為客服端的DNS緩存;
ISP(互聯(lián)網(wǎng)服務(wù)提供商)DNS緩存,當(dāng)在用戶客服端查找不到域名對應(yīng)IP地址,則將進(jìn)入ISP DNS緩存中進(jìn)行查詢。比如你用的是電信的網(wǎng)絡(luò),則會進(jìn)入電信的DNS緩存服務(wù)器中進(jìn)行查找;
根域名服務(wù)器,全球僅有13臺根域名服務(wù)器,1個主根域名服務(wù)器,其余12為輔根域名服務(wù)器。根域名收到請求后會查看區(qū)域文件記錄,若無則將其管轄范圍內(nèi)頂級域名(如.com)服務(wù)器IP告訴本地DNS服務(wù)器;
頂級域名服務(wù)器,頂級域名服務(wù)器收到請求后查看區(qū)域文件記錄,若無則將其管轄范圍內(nèi)主域名(如ecdoer.com)服務(wù)器的IP地址告訴本地DNS服務(wù)器;
主域名服務(wù)器,主域名服務(wù)器接受到請求后查詢自己的緩存,如果沒有則進(jìn)入下一級域名服務(wù)器(www.ecdoer.com)進(jìn)行查找,并重復(fù)該步驟直至找到正確紀(jì)錄;
保存結(jié)果至緩存,本地域名服務(wù)器把返回的結(jié)果保存到緩存,以備下一次使用,同時將該結(jié)果反饋給客戶端,客戶端通過這個IP地址與web服務(wù)器建立鏈接
hosts 映射
可以配置本地的域名解析
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
::1 localhost
DNS查詢
查詢是否正常解析
nslookup kailian.github.io
Server: 202.96.134.33
Address: 202.96.134.33#53
Non-authoritative answer:
kailian.github.io canonical name = github.map.fastly.net.
github.map.fastly.net canonical name = prod.github.map.fastlylb.net.
Name: prod.github.map.fastlylb.net
Address: 151.101.36.133
查詢注冊情況
whois github.com
Whois Server Version 2.0
Domain names in the .com and .net domains can now be registered
with many different competing registrars. Go to http://www.internic.net
for detailed information.
GITHUB.COM.KHALEDELANSARI.COM
GITHUB.COM
...
dig顯示整個查詢過程
dig kailian.github.io
# 查詢參數(shù)和統(tǒng)計
<<>> DiG 9.8.3-P1 <<>> kailian.github.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60058
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
# 查詢內(nèi)容
;; QUESTION SECTION:
;kailian.github.io. IN A
# DNS答復(fù)
;; ANSWER SECTION:
kailian.github.io. 2566 IN CNAME github.map.fastly.net.
github.map.fastly.net. 600 IN CNAME prod.github.map.fastlylb.net.
prod.github.map.fastlylb.net. 600 IN A 151.101.16.133
#DNS傳輸信息
;; Query time: 39 msec
;; SERVER: 202.96.134.33#53(202.96.134.33)
;; WHEN: Sat Jul 16 21:46:39 2016
;; MSG SIZE rcvd: 125
分級查詢
從"根域名服務(wù)器"查到"頂級域名服務(wù)器"的NS記錄和A記錄(IP地址)
從"頂級域名服務(wù)器"查到"次級域名服務(wù)器"的NS記錄和A記錄(IP地址)
從"次級域名服務(wù)器"查出"主機(jī)名"的IP地址
dig +trace kailian.github.io
; <<>> DiG 9.8.3-P1 <<>> +trace kailian.github.io
;; global options: +cmd
. 326984 IN NS m.root-servers.net.
. 326984 IN NS a.root-servers.net.
. 326984 IN NS b.root-servers.net.
. 326984 IN NS c.root-servers.net.
. 326984 IN NS d.root-servers.net.
. 326984 IN NS e.root-servers.net.
. 326984 IN NS f.root-servers.net.
. 326984 IN NS g.root-servers.net.
. 326984 IN NS h.root-servers.net.
. 326984 IN NS i.root-servers.net.
. 326984 IN NS j.root-servers.net.
. 326984 IN NS k.root-servers.net.
. 326984 IN NS l.root-servers.net.
;; Received 432 bytes from 202.96.134.33#53(202.96.134.33) in 201 ms
io. 172800 IN NS ns-a1.io.
io. 172800 IN NS ns-a2.io.
io. 172800 IN NS ns-a3.io.
io. 172800 IN NS ns-a4.io.
io. 172800 IN NS ns-d1.io.
io. 172800 IN NS ns-l1.io.
io. 172800 IN NS ns-y1.io.
;; Received 427 bytes from 193.0.14.129#53(193.0.14.129) in 9275 ms
github.io. 86400 IN NS ns2.p16.dynect.net.
github.io. 86400 IN NS ns3.p16.dynect.net.
github.io. 86400 IN NS ns4.p16.dynect.net.
github.io. 86400 IN NS ns1.p16.dynect.net.
;; Received 121 bytes from 64.251.31.179#53(64.251.31.179) in 512 ms
kailian.github.io. 3600 IN CNAME github.map.fastly.net.
;; Received 70 bytes from 204.13.251.16#53(204.13.251.16) in 384 ms
列出根域名.
的所有NS記錄,即所有根域名服務(wù)器
根據(jù)內(nèi)置的根域名服務(wù)器IP地址,DNS服務(wù)器向所有這些IP地址發(fā)出查詢請求,詢問域名的頂級域名服務(wù)器io.的NS記錄。
DNS的記錄
記錄格式
Domain_name Time_to_live Class Type Value
Time_to_live 生存時間,記錄最多可以緩存多久
value 如果是A記錄,則value是一個IPv4地址;CNAME記錄,則是別名
常見的記錄類型type如下:
記錄類型 | 含義 |
---|---|
A | 主機(jī)的IPv4地址 |
AAAA | 主機(jī)的IPv6地址 |
NS | 該域名所在域的權(quán)威域名服務(wù)器 |
MX | 接受特定域名電子郵件的服務(wù)器域名 |
CNAME | 當(dāng)前域名的一個別名 |
DNS相關(guān)優(yōu)化
1) 增加DNS服務(wù)器數(shù)量
減小服務(wù)器壓力,當(dāng)單位服務(wù)器需要處理的DNS請求數(shù)量較少時速度會更快;
2) 全國多地分布DNS服務(wù)器
用戶網(wǎng)絡(luò)訪問速度跟用戶計算機(jī)到服務(wù)器的距離有關(guān),若可以讓用戶就近訪問所在省份的服務(wù)器便可以加速DNS解析速度;
3) 雙線線路域名解析
當(dāng)用戶網(wǎng)絡(luò)線路跟服務(wù)器網(wǎng)絡(luò)線路一致時速度較快,而不一致時則較慢,如:用戶使用電信的線路但服務(wù)器是聯(lián)通的線路,訪問速度下降
同時解析聯(lián)通和電信,默認(rèn)的或者通用的走電信線路,聯(lián)通的就走聯(lián)通線路
4) 配置比較快的公共DNS,優(yōu)先配置國內(nèi)的
5) DNS預(yù)解析
DNS預(yù)解析,對頁面出現(xiàn)的的域名提前解析
<link rel="dns-prefetch" >
6)減少域名數(shù)量
減少不同域名的數(shù)量減少DNS的查詢,包括頁面中的鏈接,圖片,腳本文件,樣式表,F(xiàn)lash對象等,將組件分布在兩到四個域名之間
公共DNS
公共DNS服務(wù)器,即系統(tǒng)默認(rèn)的DNS解析服務(wù)器。配置國外的DNS,可能導(dǎo)致域名有時候解析失敗。
查看配置
cat /etc/resolv.conf
search DHCP HOST
nameserver 202.96.134.33
nameserver 202.96.128.86
常用的公共DNS
114.114.114.114
114.114.115.115
223.5.5.5
223.6.6.6
180.76.76.76
8.8.8.8
8.8.4.4
廣東電信 DNS
202.96.128.86
202.96.128.166
202.96.134.33
202.96.128.68