轉(zhuǎn)發(fā)自自己的公眾號(hào)(灰子學(xué)技術(shù)):通過Dig來學(xué)Dns
DNS是網(wǎng)絡(luò)里面很常用的服務(wù)俭令,有一整套的設(shè)計(jì) 策略和方法拂封,算是很成熟的技術(shù)了换吧。作者本人最近剛好用到了DNS泌霍,便順便整理的了筆記,希望對大家有些幫助教沾。本文筆者主要想通過dig工具來講解下DNS是怎么一回事蒲跨。
一、DNS基礎(chǔ)知識(shí)簡介
DNS:(Domain Name System的縮寫)授翻,作用就是根據(jù)域名查找到對應(yīng)的IP地址 或悲,就像是一個(gè)存儲(chǔ)了很多條電話記錄的電話本一樣。詳細(xì)參考維基百科:https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F
域名:是服務(wù)器的別名堪唐,例如:www.baidu.com巡语,互聯(lián)網(wǎng)中每個(gè)地址都需要有一個(gè)IP,才能通訊淮菠,但是IP地址太難記住了男公,于是便有了域名作為該服務(wù)器的別名。
域名的引入除了能讓人更好的記住之外合陵,還有另外一個(gè)好處枢赔,那就是一個(gè)域名可以對應(yīng)1個(gè)或者多個(gè)IP地址,用戶在訪問一個(gè)網(wǎng)站的時(shí)候拥知,只需要輸入它的域名就好了踏拜,但是實(shí)際上到底訪問的是那臺(tái)服務(wù)器,卻是不一定的举庶。
二执隧、Dig中涉及到的基本概念
Dig:是一個(gè)在類Unix命令行模式下查詢DNS包括NS記錄,A記錄户侥,MX記錄等相關(guān)信息的工具。
三峦嗤、Dig例子詳解
我們先看一個(gè)dig的例子蕊唐。
$dig baidu.com
1.顯示Dig的版本號(hào)以及查詢參數(shù)。
2.顯示查詢的結(jié)果烁设,status表示的是查詢的結(jié)果替梨,NOERROR表示查詢成功。
3.QuestionSection表示的是查詢的域名信息装黑,上圖顯示的是baidu.com副瀑。
4.Answer Section 表示的是查詢到的結(jié)果,其中baidu.com對應(yīng)兩個(gè)A記錄恋谭,分別是220.181.38.148和39.156.69.79糠睡。
5.表示的是查詢baidu.com,到返回查詢結(jié)果疚颊,花費(fèi)的時(shí)間狈孔,查詢的服務(wù)器信认,查詢的時(shí)間。
緊接著均抽,我們來看下整個(gè)dig的詳細(xì)步驟嫁赏,因?yàn)槿绱艘詠恚覀儽憧梢钥吹紻NS的詳細(xì)解析步驟了油挥。
$ dig +trace baidu.com
從上面dig的顯示可以看到潦蝇,www.baidu.com是如何一步步被DNS服務(wù)器解析的,下面我們來分步驟介紹下:
1.根域名. ,需要到DNS的根域名服務(wù)器進(jìn)行查詢深寥,全球總共有13個(gè)根域名服務(wù)器攘乒,它們分別從a.root-servers.net.到m.root-servers.net. 。它們的IP地址可以參看:https://www.iana.org/domains/root/servers
2.頂級(jí)域名TLD(top-level domain).com. 翩迈,根域名服務(wù)器會(huì)告訴對應(yīng)的頂級(jí)域名服務(wù)器是那一些持灰。查找頂級(jí)域名.com.則需要到DNS的頂級(jí)域名服務(wù)器來查詢,這里顯示的頂級(jí)域名服務(wù)器是a.gtld-servers.net.负饲。
3.次級(jí)域名SLD(second-level domain)baidu.com.堤魁,頂級(jí)域名服務(wù)器會(huì)告知對應(yīng)的次級(jí)域名服務(wù)器,baidu.com對應(yīng)的次級(jí)域名服務(wù)器是ns1.baidu.com.返十,看起來是百度自己的DNS服務(wù)器妥泉。
4.三級(jí)域名www.baidu.com.,通過次級(jí)域名服務(wù)器的查詢洞坑,我們知道了三級(jí)域名對應(yīng)的CName(全稱:Canonical Name 別名解析的意思)為www.a.shifen.com.盲链,到了這里我們就知道了www.baidu.com最終對應(yīng)的記錄是CName,值是www.a.shifen.com.迟杂。
5.別名解析a.shifen.com.對應(yīng)的NS服務(wù)器是ns5.a.shifen.com.刽沾,我們可以繼續(xù)去查看該CName的解析過程,這個(gè)與上面的baidu.com是類似的排拷。
四侧漓、域名層次介紹
從上面的例子中,我們可以看到域名的層次關(guān)系监氢,筆者剛開始看的時(shí)候只是知道個(gè)大概布蔗,想著大部分人應(yīng)該也是,于是便順便整理下這部分基礎(chǔ)知識(shí)浪腐,讓大家熟悉下纵揍。
從上面的例子可以看出來,www.baidu.com會(huì)顯示為www.baidu.com.议街,這里多了一個(gè).,而這一個(gè).表示的就是根域名泽谨,并且所有的域名后面實(shí)際上都有這么一個(gè).root,一般用.來代替。
根域名的下一級(jí)叫做頂級(jí)域名TLD隔盛,例如這里的.com犹菱,詳細(xì)列表參考:https://www.iana.org/domains/root/db
根域名的下一級(jí)叫做次級(jí)域名SLD,例如www.baidu.com.中的.baidu吮炕,用戶可以注冊這一季的域名腊脱,例如dnspod上面就是支持的這一層的域名記錄。
次級(jí)域名的下一級(jí)叫做三級(jí)域名龙亲,例如www.baidu.com.中的www就是一個(gè)三級(jí)域名陕凹,這一層域名往往表示的是主機(jī)(Host)的域名,等同與Host的IP地址鳄炉。
五杜耙、Go中關(guān)于DNS使用
Go中的基礎(chǔ)庫里面也提供了一個(gè)簡單的pkg, net, 實(shí)現(xiàn)例子如下所示:
Code:
Output:
除此之外,Go有一套使用很廣拂盯,功能很強(qiáng)的的dns開源項(xiàng)目"github.com/miekg/dns"佑女。詳細(xì)地址:https://github.com/miekg/dns
歡迎關(guān)注,訂閱谈竿,評(píng)論团驱,共同學(xué)習(xí),共同進(jìn)步空凸!
灰子學(xué)技術(shù):
灰子作于二零一九年八月十七日嚎花。