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)上的主機,可以使用多種方式標識史辙,比如主機名或IP地址汹买。
- 一種標識方法就是用它的主機名(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ù)器必須面對所有用戶垮兑,距離過遠會有嚴重的時延冷尉。
- 維護:該數(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ù)器(標號A到M),1個為主根服務(wù)器在美國迹栓。其余12個均為輔根服務(wù)器掉分,其中9個在美國,歐洲2個克伊,位于英國和瑞典酥郭,亞洲1個位于日本。這里的個
并不是指物理意義上的單個服務(wù)器答毫,它是一個邏輯概念褥民,根DNS服務(wù)器可以由分布在全球的多個服務(wù)器組成,形成一個集群洗搂,對外統(tǒng)一為1臺邏輯的根DNS服務(wù)器(即每個標號下的根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ù)器,其嚴格來說不屬于該服務(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ù)睁搭。
在一個請求鏈中,當某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遇八、如果
本地緩存
中有,直接返回目標IP地址躺酒,否則將域名解析請求發(fā)送給本地DNS服務(wù)器
- 3押蚤、如果
本地DNS服務(wù)器
中有,直接返回目標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)當從緩存中刪除的時間涩惑。
Name和Value的值取決于Type(以下涉及的foo,bar均為偽變量):
- Type = A,則Name是主機名搬味,Value使其對應(yīng)的IP地址境氢。這也是一個標準的主機名到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ū)域预烙。
標識符用于標識該查詢,這個標識符會被復(fù)制到對查詢的回答報文中道媚,以便讓客戶用它來匹配發(fā)送的請求和接收到的回答扁掸。
標志字段中含有若干標志。1比特的“查詢/回答”標志位指出報文是查詢報文(0)還是回答報文(1)最域。當某DNS服務(wù)器是所請求名字的權(quán)威DNS服務(wù)器時谴分,1比特的“權(quán)威的”標志位被置在回答報文中。此外镀脂,還有“希望遞歸”牺蹄、“遞歸可用”等標志位。
在首部中薄翅,還有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