DNS的英文名稱是Domain Name System,就是域名系統,應用使用UDP和TCP協議,用樹狀遞歸結構管理,到目前為止,還保持著全球13個根域名(不能說臺,因為本身就不是13臺服務器,代號從字母A到M),搜索采取從上到下原則,比如我們要搜索某個域名,那么搜索順序是從域名根服務器開始,下面這個圖(網絡上獲取,有侵權立馬刪除)比較好的解釋了域名解析的原理
dns遞歸查詢路徑
首選DNS服務器就是我們本地配置的或者運營商自動分配給你的,比較常見的如阿里智能DNS——223.5.5.5和223.6.6.6 ,電信的114.114.114.114,被劫持的谷歌的8.8.8.8等。比如我們按圖例找example.microsoft.com這個域名的地址,那么我的DNS服務器會首先找尋自己的緩存,沒有的話,向根服務器發出申請,然后一層一層向下依次遞歸查找,最后匹配到相對應的IP地址,返回給我們發出請求的那臺DNS服務器,DNS服務器把這個IP和域名對應后存儲在緩存中,并把結果返回給查詢人,存儲在緩存中的意義是為了后續如果有其他人訪問這個域名,首選的DNS服務器就不用再去查找一遍了。
以上這些是原理,大家大概了解一下就可以了。下面我說說日常維護和排除問題的時候大概的操作方法
(1)PING命令
對,就是PING命令,這個可以號稱最簡單的DNS查詢維護命令,在windows搜索框里打cmd命令就可以進入的那個黑框框
CMD命令進入DOS窗口
進入后我們PING一個域名
PING一個域名
現在我們知道如下信息了
域名:www.baidu.com
CNAME地址:www.a.shifen.com
IP:61.135.169.225 ,而且可以PING通
綜上,我們可以判斷,我的首選DNS反饋回www.baidu.com的域名對應信息,所以我的首選DNS無論是誰,目前是沒有問題的;其次域名www.baidu.com是做了CNAME的(因為反饋給我www.a.shifen.com這個地址),一般來說,如果一個域名上CDN,就一定要做CNAME解析操作,這除了可以分擔流量外,還能隱藏應用的實際IP,是業內一種比較安全的做法;最后,返回的IP地址有利于我們在本地進行測試,比如修改HOSTS文件等。
(2)NSLOOKUP命令
這是基本所有系統都自帶的簡單的DNS測試命令,以Windows系統為例,其它系統基本一致
NSLOOKUP命令
在DOS窗口下,直接打nslookup回車,即可進入命令界面,Address后面的是當前你的主DNS服務器IP,下面舉幾個簡單例子說明
切換測試時主DNS地址為8.8.8.8 (僅在命令時生效,Win系統里的還是原來的主DNS)
>server 8.8.8.8
查詢A記錄,CNAME記錄等
切換測試DNS
>set q=a 查詢域名A記錄,不展開了,如果查不到別忘了查CNAME記錄
>set q=cname 查詢域名CNAME記錄
查詢百度域名CNAME記錄
還有MX記錄,NS記錄,反向解析PTR,但都不是很常用,如果有想深入研究的同學自行BAIDU
有時候我們會碰到超時的情況,一般來說,一種情況是因為安全原因,本地網絡不允許訪問外面的DNS;另一種情況就是你想切換的DNS是不接受你的IP來查詢的
我們本地網路不允許使用公網DNS
(3) DIG 命令
這個命令是關于DNS里最有名的命令了,卻不是系統自帶,需要自己下載,這個命令顯示的信息比nslookup命令全,還是以百度為例
DIG命令常用方式
dig www.baidu.com @DNS_IP
基本信息就都顯示出來了,可以稱之為nslookup的專家模式,我們除了可以看到之前nslookup命令顯示的信息,還能知道如下信息
www.a.shifen.com 域名目前給分配給我的A記錄是61.135的兩個IP,以及主管www.a.shifen.com域名的DNS有五臺,分別是ns1-5.a.shifen.com,以及五臺DNS的IP地址
如果我們想知道解析過程的詳細信息也很簡單,只要在后面加個+trace
dig www.baidu.com @DNS_IP +trace
百度域名解析查詢過程
如果要獲得精簡的結果可以使用 +short
dig www.baidu.com @DNS_IP +trace +short
精簡結果
還有一些命令,事實上,入門并不需要,如果大家感興趣可以自行BAIDU,比如+noall +nocmd +ttlid等,從我維護的經驗來說,PING命令可以解決50%的情況了,NSLOOKUP命令可以解決40%的情況,最后的DIG命令基本我只在DNS服務器上使用,今天就說到這里吧,大家有問題可以留言跟我溝通交流。