2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之DNS

2019 iOS面試題大全---全方面剖析面試
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之HTTP協(xié)議
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之HTTPS、對稱加密、非對稱加密
2019 iOS面試-----一個基于UDP的簡單的聊天Demo(用C語言、python、GCDAsyncUdpSocket來實現(xiàn)UDP通信)
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之UDP的特點、UDP的報文結(jié)構(gòu)及差錯檢測
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之TCP、三次握手、四次揮手、代碼實現(xiàn)
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之TCP進階:可靠數(shù)據(jù)傳輸、流量控制(滑動窗口)、擁塞控制
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之DNS
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之Cookie和Session
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之IP協(xié)議、IP數(shù)據(jù)報分片、IPv4編址、網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)
2019 iOS面試題-----網(wǎng)絡(luò)相關(guān)之IPv6、從IPv4到IPv6的遷移

一、DNS

因特網(wǎng)上的主機,可以使用多種方式標(biāo)識,比如主機名或IP地址。

  • 一種標(biāo)識方法就是用它的主機名(hostname),比如·www.baidu.com、www.google.com、gaia.cs.umass.edu等。這方式方便人們記憶和接受,但是這種長度不一、沒有規(guī)律的字符串路由器并不方便處理。
  • 還有一種方式,就是直接使用定長的、有著清晰層次結(jié)構(gòu)的IP地址,路由器比較熱衷于這種方式。

為了折衷這兩種方式,我們需要一種能進行主機名到IP地址轉(zhuǎn)換的目錄服務(wù)。這就是域名系統(tǒng)(Domain Name System,DNS)的主要任務(wù)。

DNS是:
1、一個由分層的DNS服務(wù)器實現(xiàn)的分布式數(shù)據(jù)庫
2、一個使得主機能夠查詢分布式數(shù)據(jù)庫的應(yīng)用層協(xié)議

而DNS服務(wù)器通常是運行BIND軟件的UNIX機器,DNS協(xié)議運行在UDP上,使用53號端口
DNS通常是由其他應(yīng)用層協(xié)議所使用的,包括HTTP、SMTP等。其作用則是:將用戶提供的主機名解析為IP地址

DNS的一種簡單設(shè)計就是在因特網(wǎng)上只使用一個DNS服務(wù)器,該服務(wù)器包含所有的映射。很明顯這種設(shè)計是有很大的問題的:

  • 單點故障:如果該DNS服務(wù)器崩潰,全世界的網(wǎng)絡(luò)隨之癱瘓
  • 通信容量:單個DNS服務(wù)器必須處理所有DNS查詢
  • 遠距離的集中式數(shù)據(jù)庫:單個DNS服務(wù)器必須面對所有用戶,距離過遠會有嚴(yán)重的時延。
  • 維護:該數(shù)據(jù)庫過于龐大,還需要對新添加的主機頻繁更新。

所以,DNS被設(shè)計成了一個分布式、層次數(shù)據(jù)庫

二、DNS服務(wù)器

為了處理擴展性問題,DNS使用了大量的DNS服務(wù)器,它們以層次方式組織,并且分布在全世界范圍內(nèi)。

域名服務(wù)器是提供域名解析的服務(wù)器,在有基本的知識下,任何人都可以搭建域名服務(wù)器,甚至是根域名服務(wù)器,有名的軟件有:BIND

目前的DNS服務(wù)器大致分為3種類型的DNS服務(wù)器:根DNS服務(wù)器、頂級域DNS服務(wù)器、權(quán)威DNS服務(wù)器

1、 根DNS服務(wù)器

因特網(wǎng)上有13個根DNS服務(wù)器(標(biāo)號A到M),1個為主根服務(wù)器在美國。其余12個均為輔根服務(wù)器,其中9個在美國,歐洲2個,位于英國和瑞典,亞洲1個位于日本。這里的并不是指物理意義上的單個服務(wù)器,它是一個邏輯概念,根DNS服務(wù)器可以由分布在全球的多個服務(wù)器組成,形成一個集群,對外統(tǒng)一為1臺邏輯的根DNS服務(wù)器(即每個標(biāo)號下的根DNS服務(wù)器的IP地址是一樣的)。而實際物理意義上的根DNS服務(wù)器,已超過千臺
https://root-servers.org/ 這里可以查到所有根DNS服務(wù)器的分布



如圖,截止發(fā)這篇文章之前,中國有19臺根DNS服務(wù)器,分別位于:

  • 北京:F,I,J,L
  • 杭州:J
  • 澳門:F
  • 香港:A、D、E、F、F、I、J
  • 臺北:E、F、F、I、K、L
2、頂級域(TLD)DNS服務(wù)器

這些服務(wù)器負責(zé)頂級域名如com、org、net、edu和gov,以及所有國家的頂級域名如uk、fr、ca和cn

3、權(quán)威DNS服務(wù)器

在因特網(wǎng)上具有公共可訪問主機的每個組織機構(gòu)必須提供公共可訪問的DNS記錄,這些記錄將這些主機的名字映射為IP地址。一個組織機構(gòu)的權(quán)威DNS服務(wù)器收藏了這些DNS記錄。

除此之外,還有一種很重要的DNS,成為本地DNS服務(wù)器,其嚴(yán)格來說不屬于該服務(wù)器的層次結(jié)構(gòu),但它對DNS層次結(jié)構(gòu)是重要的。每個ISP (互聯(lián)網(wǎng)服務(wù)提供商),比如一個大學(xué),一個公司或一個居民區(qū)的ISP,都有一臺本地DNS服務(wù)器。

三、DNS解析過程

1、迭代查詢和遞歸查詢


如圖,很清晰地顯示出了一條DNS查詢鏈:本地DNS服務(wù)器-->根DNS服務(wù)器-->頂級域DNS服務(wù)器-->權(quán)威DNS服務(wù)器 ,所有查詢都是遞歸的。
這是遞歸查詢。

這種利用了迭代查詢遞歸查詢,從Client與本地DNS之間是遞歸查詢,其余則是迭代查詢。
所謂 遞歸查詢過程 就是 “查詢的遞交者” 更替, 而 迭代查詢過程 則是 “查詢的遞交者”不變。
從理論上講,任何DNS查詢既可以是迭代的也能是遞歸的。
而在實際過程中,更常用的是圖上 從請求主機到本地DNS服務(wù)器的查詢是遞歸,其余查詢是迭代的這種方式。

2、DNS緩存

DNS緩存(DNS Caching):為了改善時延性能并減少在因特網(wǎng)上到處傳輸?shù)腄NS報文數(shù)量,DNS廣泛使用了緩存技術(shù)。
在一個請求鏈中,當(dāng)某DNS服務(wù)器接收一個DNS回答時,它能將該回答中的信息緩存在本地存儲器中。那么另一個對相同主機名的查詢到達該DNS服務(wù)器時,該DNS服務(wù)器就可以提供所要求的IP地址,即使它不是該主機名的權(quán)威服務(wù)器。
由于IP和主機名的映射并不是永久的,DNS服務(wù)器在一段時間后就會丟棄緩存的信息。
本地DNS服務(wù)器也能夠緩存TLD服務(wù)器的IP地址,從而允許本地DNS繞過查詢鏈中的根DNS服務(wù)器。

而事實上,有DNS的地方,就有緩存。瀏覽器、操作系統(tǒng)、本地 DNS服務(wù)器、根DNS服務(wù)器,它們都會對DNS結(jié)果做一定程度的緩存。
3、DNS解析過程

上圖一目了然,大致分為8步:

  • 1、發(fā)起基于域名的請求后,首先檢查本地緩存(瀏覽器緩存-->操作系統(tǒng)的hosts文件)
  • 2、如果本地緩存中有,直接返回目標(biāo)IP地址,否則將域名解析請求發(fā)送給本地DNS服務(wù)器
  • 3、如果本地DNS服務(wù)器中有,直接返回目標(biāo)IP地址,到這一步基本能解析80%的域名。如果沒有,本地DNS服務(wù)器將解析請求發(fā)送給根DNS服務(wù)器
  • 4、根DNS服務(wù)器會返回給本地DNS服務(wù)器一個所查詢的TLD服務(wù)器地址列表
  • 5、本地DNS服務(wù)器再向上一步返回的TLD服務(wù)器發(fā)送請求,TLD服務(wù)器查詢并返回域名對應(yīng)的權(quán)威域名服務(wù)器的地址
  • 6、本地DNS服務(wù)器再向上一步返回的權(quán)威域名服務(wù)器發(fā)送請求,權(quán)威域名服務(wù)器會查詢存儲的域名和IP的映射關(guān)系表,將IP連同一個TTL(過期時間)值返回給本地DNS服務(wù)器
  • 7、本地DNS服務(wù)器會將IP和主機名的映射保存起來,保存時間由TTL來控制
  • 8、本地DNS服務(wù)器把解析的結(jié)果返回給用戶,用戶根據(jù)TTL值緩存在本地系統(tǒng)緩存中,域名解析過程結(jié)束

四、DNS記錄和報文

1、資源記錄

所有DNS服務(wù)器都存儲了資源記錄(Resource Record,RR),其提供了主機名到IP的映射。
資源記錄是一個包含以下字段的四元組:
(Name,Value,Type,TTL)
TTL是該記錄的生存時間,決定了資源記錄應(yīng)當(dāng)從緩存中刪除的時間。
Name和Value的值取決于Type(以下涉及的foo,bar均為偽變量):

  • Type = A,則Name是主機名,Value使其對應(yīng)的IP地址。這也是一個標(biāo)準(zhǔn)的主機名到IP地址的映射。如(replay1.bar.foo.com,145.37.93.126,A)
  • Type = NS,則Name是個域(如foo.com),而Value是個知道如何獲取該域中主機IP地址的權(quán)威DNS服務(wù)器的主機名,如(foo.com,dns.foo.com,NS)
  • Type = CNAME,則Name是別名為Name的主機對應(yīng)的規(guī)范主機名。該記錄能夠向查詢的主機提供一個主機名對應(yīng)的規(guī)范主機名,如(foo.com,replay1.bar.foo.com,CNAME)
  • Type = MX,則Value是個別名為Name的郵件服務(wù)器的規(guī)范主機名。如(foo.com,main.bar.foo.com,MX)
2、DNS報文

DNS只有查詢和回答兩種報文,這兩種報文格式是一樣的。

  • 前12個字節(jié)是首部區(qū)域。
    標(biāo)識符用于標(biāo)識該查詢,這個標(biāo)識符會被復(fù)制到對查詢的回答報文中,以便讓客戶用它來匹配發(fā)送的請求和接收到的回答。
    標(biāo)志字段中含有若干標(biāo)志。1比特的“查詢/回答”標(biāo)志位指出報文是查詢報文(0)還是回答報文(1)。當(dāng)某DNS服務(wù)器是所請求名字的權(quán)威DNS服務(wù)器時,1比特的“權(quán)威的”標(biāo)志位被置在回答報文中。此外,還有“希望遞歸”、“遞歸可用”等標(biāo)志位。
    在首部中,還有4個數(shù)量相關(guān)的字段,指出來在首部后的4類數(shù)據(jù)區(qū)域出現(xiàn)的數(shù)量,其中RR是資源記錄的意思。
  • 問題區(qū)域包含著正在進行的查詢信息。該區(qū)域包括:?名字字段,指出正在被查詢的主機名字;?類型字段,指出有關(guān)該名字的正被查詢的問題類型,即上邊說的四元組中的Type
  • 回答區(qū)域包含了對最初請求的名字的資源記錄。在回答區(qū)域中可以包含多條RR,因此一個主機名理論上能夠有多個IP地址(不同用戶在不同地點訪問同一個域名,可能會訪問到不同的IP地址)
  • 權(quán)威區(qū)域中包含了其他權(quán)威服務(wù)器的記錄
  • 附加區(qū)域包含了其他有幫助的記錄

得知DNS的報文格式后,我們也就可以手動發(fā)送DNS查詢包了。
一個在線DNS查詢的工具:https://tool.lu/dns/index.html

五、DNS解析安全問題

1、DNS劫持

一種可能的域名劫持方式即黑客侵入了寬帶路由器并對終端用戶的本地DNS服務(wù)器進行篡改,指向黑客自己偽造的本地DNS服務(wù)器,進而通過控制本地DNS服務(wù)器的邏輯返回錯誤的IP信息進行域名劫持。

另一方面,由于DNS解析主要是基于UDP協(xié)議,除了上述攻擊行為外,攻擊者還可以監(jiān)聽終端用戶的域名解析請求,并在本地DNS服務(wù)器返回正確結(jié)果之前將偽造的DNS解析響應(yīng)傳遞給終端用戶,進而控制終端用戶的域名訪問行為。

2、緩存污染(DNS污染)。

我們知道在接收到域名解析請求時,本地DNS服務(wù)器首先會查找緩存,如果緩存命中就會直接返回緩存結(jié)果,不再進行遞歸DNS查詢。這時候如果本地DNS服務(wù)器針對部分域名的緩存進行更改,比如將緩存結(jié)果指向第三方的廣告頁,就會導(dǎo)致用戶的訪問請求被引導(dǎo)到這些廣告頁地址上。

3、如何解決DNS劫持?

DNS解析發(fā)生在HTTP協(xié)議之前,DNS解析和DNS劫持和HTTP沒有關(guān)系,DNS協(xié)議使用的是UDP協(xié)議向服務(wù)器的53端口進行請求。
要想解決DNS劫持:

  • 可以使用HttpDNS的方案:使用 HTTP協(xié)議向DNS服務(wù)器的80端口進行請求,來規(guī)避DNS劫持
    比如:http://119.29.29.29/d?dn=domain&ip=clientIp
  • 在終端上,可以更換DNS服務(wù)器,不管手機還是電腦,都能手動配置DNS


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容