日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

作者 | 寫代碼的明哥

來源 | Python編程時(shí)光

頭圖 | CSDN付費(fèi)下載自視覺中國

在找工作面試的過程中,面試官非常喜歡考察基礎(chǔ)知識(shí),除了數(shù)據(jù)結(jié)構(gòu)與算法之外,網(wǎng)絡(luò)知識(shí)也是一個(gè)非常重要的考察對(duì)象。

而網(wǎng)絡(luò)知識(shí),通常是很抽象,不容易理解的,有很多同學(xué)就在這里裁了跟頭。為了更好地通過面試,本文講進(jìn)行一次網(wǎng)絡(luò)知識(shí)大掃盲,聊一聊網(wǎng)絡(luò)知識(shí)最基本的DNS。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

DNS 是什么?

DNS是 Domain Name System 的縮寫,也就是 域名解析系統(tǒng),它的作用非常簡單,就是根據(jù)域名查出對(duì)應(yīng)的 IP地址。

你可以把它想象成一本巨大的電話本,比如當(dāng)你要訪問域名www.163.com,首先要通過DNS查出它的IP地址是112.48.162.8。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

域名的層級(jí)

由于后面我會(huì)講到 DNS 的解析過程,因此需要你對(duì)域名的層級(jí)有一些了解

  • 根域名 :.root 或者 . ,通常是省略的

  • 頂級(jí)域名,如 .com,.cn 等

  • 次級(jí)域名,如 baidu.com 里的 baidu,這個(gè)是用戶可以進(jìn)行注冊(cè)購買的

  • 主機(jī)域名,比如 baike.baidu.com 里的baike,這個(gè)是用戶可分配的


 

主機(jī)名.次級(jí)域名.頂級(jí)域名.根域名

baike.baidu.com.root


網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

DNS 解析過程

咱們以訪問 www.163.com 這個(gè)域名為例,來看一看當(dāng)你訪問 www.163.com 時(shí),會(huì)發(fā)生哪些事:

  1. 先查找本地 DNS 緩存(自己的電腦上),有則返回,沒有則進(jìn)入下一步

  2. 查看本地 hosts 文件有沒有相應(yīng)的映射記錄,有則返回,沒有則進(jìn)入下一步

  3. 向本地 DNS 服務(wù)器(一般都是你的網(wǎng)絡(luò)接入服務(wù)器商提供,比如中國電信,中國移動(dòng))發(fā)送請(qǐng)求進(jìn)行查詢,本地DNS服務(wù)器收到請(qǐng)求后,會(huì)先查下自己的緩存記錄,如果查到了直接返回就結(jié)束了,如果沒有查到,本地DNS服務(wù)器就會(huì)向DNS的根域名服務(wù)器發(fā)起查詢請(qǐng)求:請(qǐng)問老大, www.163.com 的ip是啥?

  4. 根域名服務(wù)器收到請(qǐng)求后,看到這是個(gè) .com 的域名,就回信說:這個(gè)域名是由 .com 老弟管理的,你去問他好了,這是.com老弟的聯(lián)系方式(ip1)。

  5. 本地 DNS 服務(wù)器接收到回信后,照著老大哥給的聯(lián)系方式(ip1),馬上給 .com 這個(gè)頂級(jí)域名服務(wù)器發(fā)起請(qǐng)求:請(qǐng)問 .com 大大,www.163.com 的ip 是啥?

  6. .com 頂級(jí)域名服務(wù)器接收到請(qǐng)求后,看到這是 163.com 的域名,就回信說:這個(gè)域名是 .163.com 老弟管理的,你就去問他就行了,這是他的聯(lián)系方式(ip2)

  7. 本地 DNS 服務(wù)器接收到回信后,按照前輩的指引(ip2),又向 .163.com 這個(gè)權(quán)威域名服務(wù)器發(fā)起請(qǐng)求:請(qǐng)問 163.com 大大,請(qǐng)問 www.163.com 的ip是啥?

  8. 163.com 權(quán)威域名服務(wù)器接收到請(qǐng)求后,確認(rèn)了是自己管理的域名,馬上查了下自己的小本本,把 www.163.com 的ip告訴了 本地DNS服務(wù)器。

  9. 本地DNS服務(wù)器接收到回信后,非常地開心,這下總算拿到了www.163.com的ip了,馬上把這個(gè)消息告訴了要求查詢的客戶(就是你的電腦)。由于這個(gè)過程比較漫長,本地DNS服務(wù)器為了節(jié)省時(shí)間,也為了盡量不去打擾各位老大哥,就把這個(gè)查詢結(jié)果偷偷地記在了自己的小本本上,方便下次有人來查詢時(shí),可以快速回應(yīng)。

總結(jié)起來就是三句話:

  1. 從"根域名服務(wù)器"查到"頂級(jí)域名服務(wù)器"的NS記錄和A記錄(IP地址)

  2. 從"頂級(jí)域名服務(wù)器"查到"次級(jí)域名服務(wù)器"的NS記錄和A記錄(IP地址)

  3. 從"次級(jí)域名服務(wù)器"查出"主機(jī)名"的IP地址

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

DNS的緩存時(shí)間

上面的幾個(gè)步驟里,可以看到有兩個(gè)地方會(huì)緩存 DNS 的查詢記錄,有了緩存,在一定程度上會(huì)提高查詢效率,但同時(shí)在準(zhǔn)確率上會(huì)有所損失。

因此我們?cè)谂渲?DNS 解析的時(shí)候,會(huì)有一個(gè) TTL 參數(shù)(Time To Live),意思就是這個(gè)緩存可以存活多長時(shí)間,過了這個(gè)時(shí)間,本地 DNS 就會(huì)刪除這條記錄,刪除了緩存后,你再訪問,就要重新走一遍上面的流程,獲取最新的地址。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

DNS 的記錄類型

當(dāng)我們?cè)诎⒗镌瀑I了一個(gè)域名后,可以配置我們主機(jī)域名解析規(guī)則,也就是 記錄。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

阿里云 域名云解析

常見的 DNS 記錄類型如下

  • A:地址記錄(Address),返回域名指向的IP地址。

  • NS:域名服務(wù)器記錄(Name Server),返回保存下一級(jí)域名信息的服務(wù)器地址。該記錄只能設(shè)置為域名,不能設(shè)置為IP地址。

  • MX:郵件記錄(Mail eXchange),返回接收電子郵件的服務(wù)器地址。

  • CNAME:規(guī)范名稱記錄(Canonical Name),返回另一個(gè)域名,即當(dāng)前查詢的域名是另一個(gè)域名的跳轉(zhuǎn),詳見下文。

  • PTR:逆向查詢記錄(Pointer Record),只用于從IP地址查詢域名,詳見下文。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

DNS 報(bào)文結(jié)構(gòu)

后面我將使用 wireshark 抓取 DNS 的數(shù)據(jù)包,但是在開始之前 ,得先了解一下 DNS 的報(bào)文結(jié)構(gòu)

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS
  • 事務(wù) ID:DNS 報(bào)文的 ID 標(biāo)識(shí)。對(duì)于請(qǐng)求報(bào)文和其對(duì)應(yīng)的應(yīng)答報(bào)文,該字段的值是相同的。通過它可以區(qū)分 DNS 應(yīng)答報(bào)文是對(duì)哪個(gè)請(qǐng)求進(jìn)行響應(yīng)的。

  • 標(biāo)志:DNS 報(bào)文中的標(biāo)志字段。

  • 問題計(jì)數(shù):DNS 查詢請(qǐng)求的數(shù)目。

  • 回答資源記錄數(shù):DNS 響應(yīng)的數(shù)目。

  • 權(quán)威名稱服務(wù)器計(jì)數(shù):權(quán)威名稱服務(wù)器的數(shù)目。

  • 附加資源記錄數(shù):額外的記錄數(shù)目(權(quán)威名稱服務(wù)器對(duì)應(yīng) IP 地址的數(shù)目)。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

Wireshark抓包實(shí)戰(zhàn)

打開 Wireshark 后,使用 ping 163.com 來發(fā)起 DNS 解析請(qǐng)求,使用 DNS 關(guān)鍵字在Wireshark 過濾。

從抓取的報(bào)文整體來看,我們可以粗略獲取幾個(gè)信息

  1. DNS 是應(yīng)用層協(xié)議,傳輸層協(xié)議使用的是 UDP

  2. DNS 默認(rèn)端口是 53

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

請(qǐng)求和應(yīng)答的報(bào)文的截圖我放在了下面,接下來我將逐個(gè)分析。

請(qǐng)求

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

應(yīng)答

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

Transaction ID

請(qǐng)求和應(yīng)答的事務(wù)ID應(yīng)當(dāng)是一個(gè):0xd0d7

 

Flags

標(biāo)志字段里的內(nèi)容比較多,每個(gè)字段的含義如下:

  • QR(Response):查詢請(qǐng)求/響應(yīng)的標(biāo)志信息。查詢請(qǐng)求時(shí),值為 0;響應(yīng)時(shí),值為 1。

  • Opcode:操作碼。其中,0 表示標(biāo)準(zhǔn)查詢;1 表示反向查詢;2 表示服務(wù)器狀態(tài)請(qǐng)求。

  • AA(Authoritative):授權(quán)應(yīng)答,該字段在響應(yīng)報(bào)文中有效。值為 1 時(shí),表示名稱服務(wù)器是權(quán)威服務(wù)器;值為 0 時(shí),表示不是權(quán)威服務(wù)器。

  • TC(Truncated):表示是否被截?cái)唷V禐?1 時(shí),表示響應(yīng)已超過 512 字節(jié)并已被截?cái)啵环祷厍?512 個(gè)字節(jié)。

  • RD(Recursion Desired):期望遞歸。該字段能在一個(gè)查詢中設(shè)置,并在響應(yīng)中返回。該標(biāo)志告訴名稱服務(wù)器必須處理這個(gè)查詢,這種方式被稱為一個(gè)遞歸查詢。如果該位為 0,且被請(qǐng)求的名稱服務(wù)器沒有一個(gè)授權(quán)回答,它將返回一個(gè)能解答該查詢的其他名稱服務(wù)器列表。這種方式被稱為迭代查詢。

  • RA(Recursion Available):可用遞歸。該字段只出現(xiàn)在響應(yīng)報(bào)文中。當(dāng)值為 1 時(shí),表示服務(wù)器支持遞歸查詢。

  • Z:保留字段,在所有的請(qǐng)求和應(yīng)答報(bào)文中,它的值必須為 0。

  • rcode(Reply code):返回碼字段,表示響應(yīng)的差錯(cuò)狀態(tài)。當(dāng)值為 0 時(shí),表示沒有錯(cuò)誤;當(dāng)值為 1 時(shí),表示報(bào)文格式錯(cuò)誤(Format error),服務(wù)器不能理解請(qǐng)求的報(bào)文;當(dāng)值為 2 時(shí),表示域名服務(wù)器失敗(Server failure),因?yàn)榉?wù)器的原因?qū)е聸]辦法處理這個(gè)請(qǐng)求;當(dāng)值為 3 時(shí),表示名字錯(cuò)誤(Name Error),只有對(duì)授權(quán)域名解析服務(wù)器有意義,指出解析的域名不存在;當(dāng)值為 4 時(shí),表示查詢類型不支持(Not Implemented),即域名服務(wù)器不支持查詢類型;當(dāng)值為 5 時(shí),表示拒絕(Refused),一般是服務(wù)器由于設(shè)置的策略拒絕給出應(yīng)答,如服務(wù)器不希望對(duì)某些請(qǐng)求者給出應(yīng)答。

 

Answer RRs

回答資源記錄數(shù),在應(yīng)答包里為 2,說明返回了兩條查詢結(jié)果,你可以在 Answer 字段里看到。

 

Authority RRs

權(quán)威名稱服務(wù)器計(jì)數(shù)

 

Additionnal RRs

附加資源記錄數(shù)

 

Answers

應(yīng)答的主要內(nèi)容,這里返回兩條結(jié)果,每條結(jié)果里的字段有


 
網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS
網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

DNS 劫持 與 HTTP 劫持

通過上面的講解,我們都知道了,DNS 完成了一次域名到 IP 的映射查詢,當(dāng)你在訪問 www.baidu.com 時(shí),能正確返回給你 百度首頁的 ip。

但如果此時(shí) DNS 解析出現(xiàn)了一些問題,當(dāng)你想要訪問 www.baidu.com 時(shí),卻返回給你 www.google.com 的ip,這就是我們常說的 DNS 劫持。

與之容易混淆的有 HTTP 劫持。

那什么是 HTTP 劫持呢?

你一定見過當(dāng)你在訪問 某個(gè)網(wǎng)站時(shí),右下角也突然彈出了一個(gè)扎眼的廣告彈窗。這就是 HTTP 劫持。

借助別人文章里的例子,它們倆的區(qū)別就好比是

  • DNS劫持是你想去機(jī)場(chǎng)的時(shí)候,把你給丟到火車站。

  • HTTP劫持是你去機(jī)場(chǎng)途中,有人給你塞小廣告。

那么 DNS劫持 是如何產(chǎn)生的呢?

下面大概說幾種DNS劫持方法:

1.本機(jī)DNS劫持

攻擊者通過某些手段使用戶的計(jì)算機(jī)感染上木馬病毒,或者惡意軟件之后,惡意修改本地DNS配置,比如修改本地hosts文件,緩存等。

2. 路由DNS劫持

很多用戶默認(rèn)路由器的默認(rèn)密碼,攻擊者可以侵入到路由管理員賬號(hào)中,修改路由器的默認(rèn)配置。

3.攻擊DNS服務(wù)器

直接攻擊DNS服務(wù)器,例如對(duì)DNS服務(wù)器進(jìn)行DDoS攻擊,可以是DNS服務(wù)器宕機(jī),出現(xiàn)異常請(qǐng)求,還可以利用某些手段感染dns服務(wù)器的緩存,使給用戶返回來的是惡意的ip地址。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

工具的使用

dig 命令

dig是一個(gè)在類Unix命令行模式下查詢DNS包括NS記錄,A記錄,MX記錄等相關(guān)信息的工具。

通過 dig (參數(shù):+trace)命令,我們可以看到上面描述的 DNS 解析的詳細(xì)過程

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

從返回的結(jié)果,我們可以看得出幾點(diǎn)信息:

  1. 我們的本地 DNS 服務(wù)器 ip 為 192.168.1.1,端口為53,你可以在 /etc/resolv.conf 里看到這個(gè)配置

  2. 根域名服務(wù)器目前全球一共只有十三臺(tái),從a.root-servers.net. 到m.root-servers.net. ,它們對(duì)應(yīng)的ip地址,已經(jīng)內(nèi)置在本地DNS服務(wù)器中。

如果你只想看到結(jié)果,可以使用 +short 參數(shù),可以直接返回 www.163.com 對(duì)應(yīng)著哪幾個(gè)ip。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

你也可以加個(gè) @ 參數(shù) ,指定從某個(gè) DNS 服務(wù)器進(jìn)行查詢。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

如果你只想查看指定的記錄類型:

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

host 命令

host 命令 可以看作dig命令的簡化版本,返回當(dāng)前請(qǐng)求域名的各種記錄。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

whois命令

whois命令用來查看域名的注冊(cè)情況。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

nslookup命令

nslookup也是常用的一個(gè)查詢 DNS 解析結(jié)果的工具


 
網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS
網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

你也可以指定公網(wǎng)的域名服務(wù)器進(jìn)行查詢,比如常見的 114.114.114.114。

網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS網(wǎng)絡(luò)知識(shí)掃盲,一文搞懂 DNS

 

手動(dòng)清理本地緩存

macOS


 
$ sudo dscacheutil -flushcache$ sudo killall -HUP mDNSResponder

windows

$ ipconfig /flushdns
linux

 
# 使用NSCD的DNS緩存$ sudo /etc/init.d/nscd restart# 服務(wù)器或者路由器使用DNSMASQ$ sudo dnsmasq restart

分享到:
標(biāo)簽:DNS
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定