1. 網(wǎng)太卡?看 DNS 是如何影響你沖浪速度的?

        共 11502字,需瀏覽 24分鐘

         ·

        2023-04-26 18:33

        本文詳細(xì)介紹了 DNS 相關(guān)知識(shí),包括 DNS 工作原理、如何提升域名解析速度、以及 DNS 記錄與報(bào)文等內(nèi)容。



        1. 域名與域名服務(wù)器

        在日常上網(wǎng)過(guò)程中,出于好記的原因,人們更喜歡在瀏覽器中輸入網(wǎng)站的 域名 ,而不是 IP 地址。比如想要訪問(wèn)百度,則會(huì)輸入 www.baidu.com ,而不是 202.108.22.5 (或者百度網(wǎng)站的其他 IP)。

        然而計(jì)算機(jī)網(wǎng)絡(luò)通信中所識(shí)別的標(biāo)識(shí)并不是 域名 ,而是 IP 地址,因?yàn)槠淇梢蕴峁┲鳈C(jī)在互聯(lián)網(wǎng)中的位置信息,而且是定長(zhǎng)的,路由器等設(shè)備更容易處理。 9cbf7120cde7b5618914dccbb42129aa.webp

        為了折中人類和計(jì)算機(jī)不同的偏好,就出現(xiàn)了 DNS( D omain N ame S ystem,域名系統(tǒng)),其主要任務(wù)是 根據(jù)域名查出對(duì)應(yīng)的 IP 地址 。

        下面先介紹一下域名和域名服務(wù)器,之后再介紹 DNS 的工作原理。

        域名 由若干個(gè)英文字符串組成(不區(qū)分大小寫(xiě)),各字符串之間用點(diǎn)號(hào)『.』分隔連接,其中越靠右的表示域名級(jí)別越高。

        舉個(gè)例子,百度的域名為 www.baidu.com ,其中 com 是頂級(jí)域名(一級(jí)域名), baidu 是二級(jí)域名, www 是三級(jí)域名。 d6ddaa74064ad09c051f194bf0536078.webp

        域名服務(wù)器 (也稱為 DNS 服務(wù)器)負(fù)責(zé)存儲(chǔ)域名和 IP 地址的映射關(guān)系,當(dāng)我們需要獲取某個(gè)域名對(duì)應(yīng)的 IP 地址時(shí),只需要從域名服務(wù)器中查詢即可。

        f9fe3454aab1e0fbc8c1b6bf031ee936.webp

        由于域名非常非常多,如果都存放在一臺(tái)域名服務(wù)器中,那么不僅查詢速度慢,服務(wù)器壓力大,而且難以保證服務(wù)的可靠性。因此, DNS 采用了分布式的設(shè)計(jì)方案,大量的域名服務(wù)器之間通過(guò) 層次 方式組織,分布在全世界范圍內(nèi)。

        一般而言,域名服務(wù)器可以分為以下四類:

        • 根域名服務(wù)器 :最高層級(jí)的域名服務(wù)器,因特網(wǎng)上一共有 13 個(gè)根域名服務(wù)器(以英文字母 A 到 M 依序命名,格式為[a~m].root-servers.net), 每個(gè)根域名服務(wù)器都知道所有頂級(jí)域名服務(wù)器的 IP 地址 ,比如知道負(fù)責(zé) com 域的頂級(jí)域名服務(wù)器的 IP 地址。

        • 頂級(jí)域名服務(wù)器 :對(duì)于每個(gè)頂級(jí)域名,如 com、org、edu 等,都有對(duì)應(yīng)的頂級(jí)域名服務(wù)器。 頂級(jí)域名服務(wù)器知道其所管理的所有權(quán)威域名服務(wù)器的 IP 地址 ,比如負(fù)責(zé) com 域的頂級(jí)域名服務(wù)器知道負(fù)責(zé) baidu.com 域的權(quán)威域名服務(wù)器的 IP 地址。

        • 權(quán)威域名服務(wù)器 :一個(gè)網(wǎng)站需要將其域名和 IP 地址注冊(cè)到相應(yīng)的權(quán)威域名服務(wù)器中,比如網(wǎng)站 www.baidu.com 的域名和 IP 地址就存儲(chǔ)在負(fù)責(zé) baidu.com 域的權(quán)威域名服務(wù)器中。

        • 本地域名服務(wù)器:本地域名服務(wù)器不屬于上述域名服務(wù)器的層次結(jié)構(gòu),但是它對(duì)域名系統(tǒng)非常重要。每個(gè) ISP(如一個(gè)大學(xué)、一個(gè)公司)都有一個(gè)本地域名服務(wù)器(也叫默認(rèn)域名服務(wù)器) 。 具體在下一節(jié)中介紹。

        1ac69f7ebc7bf9f1933fdf2b609e10c9.webp



        2. 域名解析流程

        知道了域名和域名服務(wù)器的基礎(chǔ)知識(shí)后,我們來(lái)了解一下 域名解析 的具體流程,以輸入百度域名為例,看看我們的主機(jī)是如何得到 www.baidu.com 的 IP 地址的。

        f94272687e8275081ed4e1ce15ed2ae3.webp

        1. 請(qǐng)求主機(jī)向 本地域名服務(wù)器 發(fā)送 DNS 查詢報(bào)文,詢問(wèn) www.baidu.com 的 IP 地址是什么;

        2. 本地域名服務(wù)器 轉(zhuǎn)發(fā)此查詢報(bào)文到 根域名服務(wù)器 ;

        3. 根域名服務(wù)器 發(fā)現(xiàn)要查詢的頂級(jí)域名為 com ,于是向 本地域名服務(wù)器 發(fā)送響應(yīng)報(bào)文,報(bào)文中封裝了負(fù)責(zé) com 域的頂級(jí)域名服務(wù)器的 IP 地址列表;

        4. 本地域名服務(wù)器 收到根域名服務(wù)器響應(yīng)的報(bào)文后,選擇其中一個(gè) 頂級(jí)域名服務(wù)器 的 IP 地址,并向其發(fā)送查詢報(bào)文;

        5. 頂級(jí)域名服務(wù)器 發(fā)現(xiàn)要查詢的二級(jí)域名為 baidu ,于是向 本地域名服務(wù)器 發(fā)送響應(yīng)報(bào)文,報(bào)文中封裝了負(fù)責(zé) baidu.com 域的權(quán)威域名服務(wù)器的 IP 地址列表;

        6. 本地域名服務(wù)器 收到頂級(jí)域名服務(wù)器響應(yīng)的報(bào)文后,選擇其中一個(gè) 權(quán)威域名服務(wù)器 的 IP 地址,并向其發(fā)送查詢報(bào)文;

        7. 權(quán)威域名服務(wù)器 通過(guò)查詢數(shù)據(jù)庫(kù),找到 www.baidau.com 的 IP 地址,并將此信息封裝為一個(gè)響應(yīng)報(bào)文,發(fā)送給 本地域名服務(wù)器

        8. 本地域名服務(wù)器 將響應(yīng)報(bào)文發(fā)送給原請(qǐng)求主機(jī)。我們的主機(jī)就知道了百度的 IP 地址,DNS 查詢過(guò)程結(jié)束。

        在此過(guò)程中,請(qǐng)求主機(jī)與本地域名服務(wù)器之間的交互稱為 遞歸查詢 ,而本地域名服務(wù)器與域名服務(wù)器層次結(jié)構(gòu)中相關(guān)服務(wù)器的交互稱為 迭代查詢 。

        請(qǐng)求主機(jī)是如何知道本地域名服務(wù)器的 IP 地址的?

        當(dāng)用戶插上網(wǎng)線或者連上 WIFI 后,電腦會(huì)通過(guò) DHCP 協(xié)議分配一個(gè) IP 地址,與此同時(shí),也會(huì)獲取到本地域名服務(wù)器的 IP 地址!

        本地域名服務(wù)器是如何知道根域名服務(wù)器的 IP 地址的?

        因特網(wǎng)上一共有 13 個(gè)根域名服務(wù)器,它們的 IP 地址是固定不變的,因此被集成在了操作系統(tǒng)中,每臺(tái)電腦都知道!

        為了解析出百度域名的 IP 地址,一共發(fā)送了 8 份 DNS 報(bào)文。用戶本來(lái)只是想和百度的服務(wù)器進(jìn)行交互,卻耗費(fèi)了大量的時(shí)間進(jìn)行域名解析, 如果每次都這樣搞,豈不是得慢死?因此就需要有一些提升域名解析速度的方式。



        3. ?提升域名解析速度

        (1)TCP or UDP

        我們都知道, TCP 相較于 UDP 更可靠,但是速度更慢 。 f1a5e7e554d767220d95abb7916296b7.webp

        DNS 應(yīng)該采用哪個(gè)傳輸層協(xié)議呢?

        • 如果采用 TCP 協(xié)議,不僅需要三次握手建立連接,而且需要進(jìn)行擁塞控制等,那么域名解析速度將慢成龜速,不利于用戶體驗(yàn)。

        • 如果采用 UDP 協(xié)議,萬(wàn)一丟包了怎么辦?如果解析不出來(lái) IP,怎么訪問(wèn)目標(biāo)網(wǎng)站?不利于用戶體驗(yàn)。

        實(shí)際上, DNS 主要使用 UDP,在特殊情況下,也會(huì)使用 TCP,端口號(hào)都是 53 。

        一般情況下,DNS 報(bào)文都比較小,只需要一個(gè)包就能承載所有信息。既然只有一個(gè)包,就無(wú)需考慮哪個(gè)包未送達(dá),直接重發(fā)一個(gè)包即可,因此無(wú)需使用 TCP 那樣復(fù)雜的協(xié)議,直接 使用 UDP 協(xié)議 ,DNS 協(xié)議自己處理超時(shí)和重傳問(wèn)題,以提供可靠性服務(wù)。

        當(dāng)然有的時(shí)候 DNS 報(bào)文比較大,比如響應(yīng)報(bào)文中可能一個(gè)域名包含有很多 IP 記錄。當(dāng)服務(wù)器響應(yīng)時(shí),會(huì)將報(bào)文中的 TC 標(biāo)志位設(shè)置為 1,表示響應(yīng)長(zhǎng)度超過(guò)了 512 字節(jié),此報(bào)文僅僅返回前 512 字節(jié)。當(dāng)我們的主機(jī)收到響應(yīng)后,就會(huì) 使用 TCP 協(xié)議 重發(fā)原來(lái)的查詢請(qǐng)求,以獲取完整報(bào)文。

        此外,為了防止本地域名服務(wù)器(主域名服務(wù)器)宕機(jī)而導(dǎo)致無(wú)法對(duì)域名進(jìn)行解析,本機(jī)還需要設(shè)置一個(gè)輔助域名服務(wù)器。 當(dāng)主域名服務(wù)器宕機(jī)后,由輔助域名服務(wù)器繼續(xù)提供域名解析的服務(wù)。 輔助域名服務(wù)器會(huì)定時(shí)(通常是每隔 3小時(shí))向主服務(wù)器發(fā)送查詢請(qǐng)求以實(shí)現(xiàn)同步,此時(shí)傳輸數(shù)據(jù)較多,因而 使用 TCP 協(xié)議

        (2)DNS 緩存

        即使采用 UDP 協(xié)議,但是如果每次都需要從根服務(wù)器開(kāi)始一層一層的查詢,仍然很慢,且處于層級(jí)結(jié)構(gòu)中的域名服務(wù)器將會(huì)接收到大量的請(qǐng)求,處理速度進(jìn)一步降低!

        為了提升域名解析速度并減輕域名服務(wù)器的壓力,DNS 廣泛使用了 緩存 技術(shù)。

        當(dāng)用戶訪問(wèn)了某個(gè)網(wǎng)站后,本地域名服務(wù)器會(huì)將解析出的域名和 IP 地址的映射關(guān)系緩存一定時(shí)間。 在緩存過(guò)期前,用戶再訪問(wèn)相同網(wǎng)站時(shí),本地域名服務(wù)器就可以直接返回查詢結(jié)果 ,而無(wú)需再去詢問(wèn)根域名服務(wù)器、頂級(jí)域名服務(wù)器等,這樣就能大大減少傳輸?shù)?DNS 報(bào)文數(shù)量!

        實(shí)際上,不僅在本地域名服務(wù)器中設(shè)置了高度緩存,用戶主機(jī)也有緩存。對(duì)于 Windows 電腦,可以通過(guò)命令 ipconfig/displaydns 查詢當(dāng)前 DNS 緩存,比如當(dāng)我訪問(wèn)了百度后,本機(jī)就會(huì)緩存以下信息: b503af14fc659604b33088e7a1877892.webp

        緩存雖然提升了 DNS 解析速度,但并不能保證一致性,因?yàn)橐粋€(gè)網(wǎng)站的域名和 IP 地址的映射關(guān)系并不是永久不變的,可能緩存的解析結(jié)果已失效,因而 DNS 緩存時(shí)間不能設(shè)置太大!

        Windows 電腦也可以通過(guò)命令 ipconfig/flushdns 清空本機(jī)緩存。

        (3)切換本地域名服務(wù)器

        前面提到,在進(jìn)行域名解析時(shí),主機(jī)會(huì)向本地域名服務(wù)器發(fā)起 遞歸查詢 ,如果本地域名服務(wù)器的性能較差,或者未正確配置緩存,那么我們上網(wǎng)的速度將會(huì)變得非常慢,因此 選擇一個(gè)好的本地域名服務(wù)器將有助于提升沖浪速度 !

        默認(rèn)情況下,本機(jī)在聯(lián)網(wǎng)時(shí)會(huì)通過(guò) DHCP 協(xié)議自動(dòng)獲得一個(gè) DNS 服務(wù)器地址,那么如果此服務(wù)器性能不好,該如何更換呢?

        以 Windows 為例,可以通過(guò) 控制面板 —> 網(wǎng)絡(luò)和 Internet —> 網(wǎng)絡(luò)連接 —> Internet 協(xié)議版本4(TCP/IPv4) 修改本地域名服務(wù)器的 IP 地址。

        4084b46fc29b821736d4b9c6afab6b0f.webp

        互聯(lián)網(wǎng)上常見(jiàn)的 公共 DNS 服務(wù)器 的 IP 地址如下:


        首選 DNS?服務(wù)器地址
        備用 DNS 服務(wù)器地址
        阿里
        223.5.5.5
        223.6.6.6
        騰訊
        119.29.29.29
        182.254.116.116
        百度
        180.76.76.76
        114.114.114.114
        谷歌
        8.8.8.8
        8.8.4.4
        114DNS
        114.114.114.114
        114.114.115.115

        一般情況下,自動(dòng)獲取的本地域名服務(wù)器與主機(jī)位于同一個(gè)子網(wǎng)中,速度都挺快的。 但是如果在上網(wǎng)過(guò)程中,發(fā)現(xiàn)打開(kāi)網(wǎng)頁(yè)的速度很慢,也可以嘗試使用上面的公共 DNS 服務(wù)器,說(shuō)不定速度會(huì)有所改善。



        4. DNS 記錄和報(bào)文

        實(shí)際上,域名服務(wù)器中保存并不僅僅是域名和 IP 地址,而是保存了一個(gè)資源記錄(Resource Record,RR)。

        一個(gè)資源記錄包含四部分內(nèi)容,分別是 Name , Value , Type TTL 。

        TTL 指的是記錄的生存時(shí)間,以秒為單位,它決定了緩存此記錄的過(guò)期時(shí)間。

        Name 和 Value 的含義隨著 Type 的不同而不同,舉幾個(gè)常見(jiàn)例子:

        • 當(dāng) Type = A 時(shí)(A 是 Address 縮寫(xiě),也可用編號(hào) 1 表示),Name 表示域名,Value 表示對(duì)應(yīng)的 IP 地址 ,如( www.example.com ,93.184.216.34,A,86400 )。

        • 當(dāng) Type = NS 時(shí)(NS 是 Name Server 縮寫(xiě),也可用編號(hào) 2 表示),Name 表示一個(gè)域,Value 為負(fù)責(zé)該域解析的域名服務(wù)器的域名 ,如( baidu.com,ns1.baidu.com,NS,172800 ),此記錄用于沿著層級(jí)結(jié)構(gòu)查詢鏈來(lái)路由 DNS 查詢。

        如果一臺(tái)域名服務(wù)器是用于某特定域名的權(quán)威域名服務(wù)器,那么其將會(huì)有一條包含該域名的 A 記錄。

        如果一臺(tái)域名服務(wù)器不是用于某特定域名的權(quán)威域名服務(wù)器,那么其將包含一條 NS 記錄,該記錄用來(lái)指定該域名由哪個(gè)域名服務(wù)器來(lái)進(jìn)行解析;除此之外,它還將包含一條 A 記錄,該記錄提供了在 NS 記錄中 Value 字段中的域名服務(wù)器的 IP 地址。

        840245120efd0334a84de881a04f2f78.webp

        接下來(lái)介紹一下 DNS 報(bào)文的具體內(nèi)容。DNS 報(bào)文分為兩類: 查詢報(bào)文 回答報(bào)文 ,二者有著相同的格式,如下圖所示: 5bd3819858263353c969f0bf7daec350.webp

        • 事務(wù) ID :用于標(biāo)識(shí) DNS 查詢的標(biāo)識(shí)符。查詢報(bào)文和其對(duì)應(yīng)的回答報(bào)文有著相同的事務(wù) ID,因此通過(guò)它可以區(qū)分 DNS 回答報(bào)文是對(duì)哪個(gè)請(qǐng)求進(jìn)行響應(yīng)的。

        • 標(biāo)志 :此字段中含有若干標(biāo)志,比如有一個(gè)『QR』標(biāo)志位用于指出此報(bào)文是查詢報(bào)文(0)還是回答報(bào)文(1),再比如有一個(gè)『TC』標(biāo)志位用于指出此報(bào)文長(zhǎng)度是否大于 512 字節(jié)。

        • 問(wèn)題數(shù) :對(duì)應(yīng)于下面查詢問(wèn)題的數(shù)量(支持同時(shí)查詢多個(gè)域名,通常為一個(gè))。

        • 回答資源記錄數(shù) :對(duì)應(yīng)于下面回答問(wèn)題相關(guān)資源記錄的數(shù)量(一個(gè)域名可能有多個(gè) IP 對(duì)應(yīng),那么將會(huì)有多個(gè)回答記錄)。

        • 權(quán)威資源記錄數(shù) :對(duì)應(yīng)于下面權(quán)威域名服務(wù)器相關(guān)資源記錄的數(shù)量。

        • 附加資源記錄數(shù) :對(duì)應(yīng)于下面附加信息相關(guān)資源記錄的數(shù)量。

        • 查詢問(wèn)題 :此區(qū)域?yàn)椴樵儍?nèi)容,包含查詢域名和查詢類型(如 ? www.example.com ,A )。

        • 回答問(wèn)題 :此區(qū)域?yàn)椴樵兘Y(jié)果,包含一到多條資源記錄(如 www.example.com ,93.184.216.34, A,300 )。

        • 權(quán)威域名服務(wù)器 :此區(qū)域?yàn)槠渌麢?quán)威域名服務(wù)器的記錄,即含有指向權(quán)威域名服務(wù)器的資源記錄,用以繼續(xù)解析過(guò)程。(如 baidu.com,ns1.baidu.com,NS,172800 )。

        • 附加信息 :此區(qū)域?yàn)槠渌袔椭男畔?,比如提供?quán)威域名服務(wù)器所對(duì)應(yīng)的 IP 地址。

        最后,使用 Wireshark 抓一個(gè) DNS 查詢報(bào)文和回答報(bào)文:

        查詢報(bào)文: 4d11b1cd003054869c34eed5e1eca3d4.webp

        回答報(bào)文: 8b8f1b8cf7ac07e413985612d2d7feb8.webp

        我是小富,下期見(jiàn)~

        ··········? END? ··············

            

        在看 、 點(diǎn)贊 轉(zhuǎn)發(fā) ,是對(duì)我最大的鼓勵(lì) 。


        技術(shù)書(shū)籍公眾號(hào)內(nèi)回復(fù)[? pdf ?] Get


        面試筆記、springcloud進(jìn)階實(shí)戰(zhàn)PDF,公眾號(hào)內(nèi)回復(fù)[? 1222 ?]?Get。



        有幾個(gè) 技術(shù)群 ,想進(jìn)的同學(xué)可以加我好友,備注: 進(jìn)群 ,一起成長(zhǎng)。

        瀏覽 56
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 日韩成人在线观看视频 | 天堂俺去俺来也WWW色光网 | 影音先锋麻豆传媒 | 日韩操操 | 免费黄色小说在线观看 |