當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 嵌入式微處理器
[導(dǎo)讀]提到網(wǎng)絡(luò),基本上都能把DNS給扯上去。為啥呢,今天我們來(lái)一探究竟。 提綱 1 Chrome瀏覽器原理 還記得面試過(guò)程中被問(wèn)了千百遍的"輸入U(xiǎn)RL后發(fā)生了什么"這個(gè)經(jīng)典問(wèn)題嗎?因?yàn)檫@個(gè)問(wèn)題覆蓋了太多的知識(shí)點(diǎn),其中包括計(jì)算機(jī)網(wǎng)絡(luò),操作系統(tǒng),數(shù)據(jù)結(jié)構(gòu)等一些列問(wèn)題,

提到網(wǎng)絡(luò),基本上都能把DNS給扯上去。為啥呢,今天我們來(lái)一探究竟。

提綱

1 Chrome瀏覽器原理

還記得面試過(guò)程中被問(wèn)了千百遍的"輸入U(xiǎn)RL后發(fā)生了什么"這個(gè)經(jīng)典問(wèn)題嗎?因?yàn)檫@個(gè)問(wèn)題覆蓋了太多的知識(shí)點(diǎn),其中包括計(jì)算機(jī)網(wǎng)絡(luò),操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)等一些列問(wèn)題,對(duì)于面試官和面試者來(lái)說(shuō)都更方便后續(xù)面試的進(jìn)展。想必很多小伙伴都做過(guò)web開(kāi)發(fā),或多或少都會(huì)和各種瀏覽器聯(lián)系在一起,最終做測(cè)試的時(shí)候也會(huì)使用多種瀏覽器測(cè)試以保證能很好地兼容。那么現(xiàn)在我們先從Chrome瀏覽器說(shuō)起。

我們先想想一個(gè)問(wèn)題,我們打開(kāi)一個(gè)微信或者一個(gè)XX音樂(lè),一個(gè)網(wǎng)頁(yè),到底會(huì)開(kāi)幾個(gè)進(jìn)程。

我們實(shí)驗(yàn)看看,打開(kāi)一個(gè)網(wǎng)頁(yè)到底開(kāi)了幾個(gè)進(jìn)程,又分別有什么作用

打開(kāi)瀏覽器使用的 進(jìn)程數(shù)

從上圖我們發(fā)現(xiàn),打開(kāi)一個(gè)網(wǎng)頁(yè),使用了四個(gè)進(jìn)程,分別為GPU進(jìn)程,Network Service進(jìn)程當(dāng)前網(wǎng)頁(yè)進(jìn)程瀏覽器。到此,我們先復(fù)習(xí)進(jìn)程與線程。

假設(shè)現(xiàn)在有這樣幾行偽代碼,我們看看應(yīng)該怎么去執(zhí)行,可能分為四步

示例偽代碼
  • 計(jì)算X=5+2

  • 計(jì)算y=8/4

  • 計(jì)算z=2*5

  • 顯示出最后的結(jié)果

這也是采用串行的方式運(yùn)行,也可說(shuō)為單線程方式執(zhí)行了四個(gè)任務(wù),其好處是不用考慮諸如多線程的同步等問(wèn)題。但是如果采用多線程

  • 啟動(dòng)三個(gè)線程分別處理前面三個(gè)任務(wù)

  • 最后一個(gè)線程顯示結(jié)果

從上面這個(gè)小實(shí)驗(yàn),我們可以知道使用多線程只需要兩步就完成,但是單線程卻使用了四步,可知使用多線程大大的提升了性能,記住:并不是多線程就一定會(huì)比單線程好,還需要從CPU使用率,IO磁盤(pán)等多個(gè)因素考慮。

進(jìn)程

進(jìn)程是一個(gè)程序的運(yùn)行實(shí)體,在上面我們比較直觀的感受到了多線程并行處理提高性能的優(yōu)點(diǎn)。一個(gè)進(jìn)程可以包含多個(gè)線程,但是一個(gè)線程只能歸屬于一個(gè)進(jìn)程,那么一個(gè)進(jìn)程到底是什么樣子呢(ps 下面是在Linux中執(zhí)行的代碼,道理差不多)

創(chuàng)建進(jìn)程

在Linux中使用fork創(chuàng)建進(jìn)程,返回進(jìn)程id。通過(guò)id的不同讓父子進(jìn)程各干其事,然后使用execvp執(zhí)行具體任務(wù)

創(chuàng)建進(jìn)程

創(chuàng)建主函數(shù)來(lái)使用上面的函數(shù),看看會(huì)出現(xiàn)什么情況

主函數(shù)

好了,現(xiàn)在主函數(shù)和執(zhí)行函數(shù)都寫(xiě)完了,但是這還只是文本文件,對(duì)于計(jì)算機(jī)而言只喜歡"01"組合,cpu執(zhí)行的命令需要是二進(jìn)制,所以需要進(jìn)行「編譯」,但是二進(jìn)制的組合也得有一定的格式,不然定會(huì)亂套,在Linux中這種格式是"ELF"Executeableand Linkable Format),后續(xù)會(huì)詳細(xì)介紹。程序編譯到進(jìn)程的過(guò)程如下圖所示

文本文件到二進(jìn)制

現(xiàn)在帶參數(shù)編譯兩個(gè)程序

編譯

在編譯的過(guò)程中,第一步預(yù)處理,將頭文件直接嵌入到文件正文中,將定義的相關(guān)宏展開(kāi),最終編譯為.o文件(可重定文件),那么ELF是什么樣子呢

ELF頭部

上圖給大家準(zhǔn)備了幾個(gè)高頻面試題目(哪些在代碼段,數(shù)據(jù)段。。)

那么在Linux中如何查看呢(readelf)

可重定位什么意思呢?

字面意思是可以隨時(shí)放在其他位置。對(duì)的,目前我們只是編譯了文件,將來(lái)會(huì)被加載到內(nèi)存里面,也就是加在某一個(gè)位置??上КF(xiàn)在還是.o文件(代碼片段),不具備可執(zhí)行的權(quán)限,它以后想變?yōu)楹瘮?shù)庫(kù),哪里需要就在哪里去完成任務(wù),搬到了哪里就重新定位了位置。要讓它可重用,就得成為庫(kù)文件,這個(gè)文件分為靜態(tài)鏈接庫(kù)(.a)動(dòng)態(tài)鏈接庫(kù),它能將一系列的.o文件歸檔為文件。怎么創(chuàng)建呢

ar

這個(gè)時(shí)候其他開(kāi)發(fā)人員準(zhǔn)備使用這個(gè)功能,加上參數(shù)連接過(guò)去就好了

上面命令中"-L"代表默認(rèn)在當(dāng)前目錄尋找.a文件,然后取出.o文件和creteprocess.o做連接形成二進(jìn)制執(zhí)行文件 staticcreateprocess。

一旦靜態(tài)鏈接庫(kù)連接出去,它的代碼和變量的section合并,一次程序運(yùn)行不再依賴(lài)這個(gè)庫(kù)。這就可能出問(wèn)題了,如果同樣的代碼段被多個(gè)程序使用,就會(huì)導(dǎo)致在內(nèi)存中出現(xiàn)多份的情況,而且代碼一旦更新,二進(jìn)制文件也需要重新編譯才能及時(shí)的更新。所以出現(xiàn)了動(dòng)態(tài)鏈接庫(kù),使用這種方式的時(shí)候,程序并不在一開(kāi)始就完成動(dòng)態(tài)鏈接,而是需要到真正調(diào)用動(dòng)態(tài)代碼時(shí),載入程序才會(huì)計(jì)算動(dòng)態(tài)代碼的邏輯地址。這種方式讓程序初始化時(shí)間短,但是運(yùn)行期間性能比不上靜態(tài)連接的程序

說(shuō)的有點(diǎn)遠(yuǎn)了,回來(lái)回來(lái)。剛才我們說(shuō)了多線程并行計(jì)算的優(yōu)勢(shì),畫(huà)個(gè)圖對(duì)比加深印象下

單線程與多線程

ok總結(jié)下進(jìn)程線程有哪些特點(diǎn)(面試跑不脫)

  • 進(jìn)程中的任意一個(gè)線程出錯(cuò),將導(dǎo)致整個(gè)進(jìn)程崩潰

假設(shè)將之前的偽代碼修改為
X=5+2
Y=8/0
Z=5*2

此時(shí)Y很明顯就是錯(cuò)的,當(dāng)線程執(zhí)行到Y(jié)的時(shí)候就會(huì)報(bào)錯(cuò),進(jìn)程崩潰大致其他兩個(gè)線程也沒(méi)有結(jié)果

  • 當(dāng)一個(gè)進(jìn)程關(guān)閉后,操作系統(tǒng)會(huì)回收進(jìn)程占用的資源

比如我們會(huì)使用很多不錯(cuò)的Chrome插件,當(dāng)啟動(dòng)瀏覽器并打開(kāi)這些插件的時(shí)候,都會(huì)占用內(nèi)存,當(dāng)關(guān)閉進(jìn)程Chrome瀏覽器,這些內(nèi)存就會(huì)被收回

  • 進(jìn)程之間內(nèi)容相互隔離

這個(gè)機(jī)制是防止多個(gè)進(jìn)程讀寫(xiě)混亂,所以進(jìn)程之間通信需要IPC(消息隊(duì)列,共享內(nèi)存等)。

  • 線程之間共享進(jìn)程數(shù)據(jù)

線程共享數(shù)據(jù)

從上圖我們可以知道線程1,2和線程3分別將數(shù)據(jù)寫(xiě)入ABC,線程2在負(fù)責(zé)處理ABC三種讀取數(shù)據(jù)并顯示

現(xiàn)在我們基本上了解了線程和進(jìn)程。我們想象一下,某寶級(jí)別的系統(tǒng)架構(gòu)一開(kāi)始就能抵抗這么大的流量嗎,當(dāng)然不是,最開(kāi)始小黃頁(yè)的單體架構(gòu),隨著需求的復(fù)雜和多樣化主鍵演變而來(lái)。那么瀏覽器依然如此。我們看看最開(kāi)始的Chrome單進(jìn)程樣子。

最初的瀏覽器單進(jìn)程,意味著無(wú)論是網(wǎng)絡(luò),頁(yè)面渲染引擎還是js環(huán)境都在一個(gè)進(jìn)程中,如下圖所示。

瀏覽器單進(jìn)程

那個(gè)時(shí)候單體結(jié)構(gòu)都有什么問(wèn)題?

  • 不穩(wěn)定/不流暢

以前頁(yè)面中的視頻等元素需要使用插件才能觀看,插件在頁(yè)面進(jìn)程中,插件出問(wèn)題很容易導(dǎo)致瀏覽器崩潰。頁(yè)面中如此多模塊都運(yùn)行在該線程中,一旦其中一個(gè)模塊獨(dú)占線程,其他的就只能當(dāng)觀眾(ps 能不能完成了就走,別蹲著不X),所以也就出現(xiàn)卡頓現(xiàn)象

  • 安全性很難保障

當(dāng)時(shí)很多插件能夠比較輕松的拿到操作系統(tǒng)的shell,如果是頁(yè)面腳本,可以通過(guò)瀏覽器爆出的漏銅來(lái)到shell,拿了shell就無(wú)法想象能干啥了

如何解決上述問(wèn)題

  • 不穩(wěn)定和不流暢

原因是頁(yè)面模塊都在一個(gè)進(jìn)程,采用進(jìn)程分離,這樣即使某個(gè)插件崩潰也只是影響某一部分,不會(huì)導(dǎo)致整個(gè)瀏覽器掛。

  • 安全性問(wèn)題

使用一個(gè)箱子(安全沙箱),箱子里面程序可以運(yùn)行且把箱子上鎖,但是無(wú)法讀取外部任何程序。這樣的話,我把容易出錯(cuò)且關(guān)鍵的兩個(gè)進(jìn)程插件進(jìn)程與渲染進(jìn)程裝進(jìn)去,這樣的話,即使兩者之一被執(zhí)行惡意程序也只是在這個(gè)箱子里瞎擺弄,無(wú)法翻越出去拿到更高的權(quán)限干壞事。

當(dāng)前架構(gòu)

我們最初的時(shí)候,發(fā)現(xiàn)使用chrome瀏覽器打開(kāi)一個(gè)網(wǎng)頁(yè)的有四個(gè)進(jìn)程,下面我來(lái)看看這些都有什么功能

一共是四個(gè)進(jìn)程,分別為網(wǎng)絡(luò)進(jìn)程,GPU進(jìn)程,渲染進(jìn)程和瀏覽器主進(jìn)程。

網(wǎng)絡(luò)進(jìn)程

作為一個(gè)單獨(dú)進(jìn)程,負(fù)責(zé)頁(yè)面網(wǎng)絡(luò)資源的加載。

插件進(jìn)程

由于插件容易崩潰,單獨(dú)進(jìn)程對(duì)其進(jìn)行管理

GPU進(jìn)程

Chrome中UI界面繪制和3DCSS等需要GPU計(jì)算密集性的幫助,從而引入GPU進(jìn)程

瀏覽器進(jìn)程

瀏覽器進(jìn)程負(fù)責(zé)用戶(hù)交互,各個(gè)子進(jìn)程等功能

乍一看全是優(yōu)點(diǎn),通常事物都會(huì)有兩面性,進(jìn)程多了,開(kāi)銷(xiāo)當(dāng)然也大也就是更高的資源占用和更加復(fù)雜的體系結(jié)構(gòu)。

2 DNS簡(jiǎn)介

上面之所以介紹瀏覽器,因?yàn)镈NS很多時(shí)候是我們?cè)跒g覽器敲下回車(chē)時(shí)開(kāi)始興奮,這也是為什么從瀏覽器說(shuō)起的原因?,F(xiàn)在我們看看DNS到底是個(gè)啥玩意

mac地址誕生,可是太不容易記憶了,出現(xiàn)了簡(jiǎn)化了IP形式,它被直接暴露給外網(wǎng)不說(shuō),還讓人類(lèi)還是覺(jué)得比較麻煩,干脆用幾個(gè)字母算了,也就是域名了。域名不僅僅能夠代替IP,還有很多其他的用途比如在web應(yīng)用中用來(lái)標(biāo)識(shí)虛擬主機(jī)。

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

說(shuō)了這么多,協(xié)議頭部,到底有哪些字段,其含義是什么都還不知道,那怎么去分析報(bào)文,下面我們一起再看看報(bào)文什么樣子

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

基礎(chǔ)結(jié)構(gòu)部分

DNS報(bào)文基礎(chǔ)部分為DNS首部。其中包含了事務(wù)ID,標(biāo)志,問(wèn)題計(jì)數(shù),回答資源計(jì)數(shù),回答計(jì)數(shù),權(quán)威名稱(chēng)服務(wù)器計(jì)數(shù)和附加資源記錄數(shù)。

  • 事務(wù)ID:報(bào)文標(biāo)識(shí),用來(lái)區(qū)分DNS應(yīng)答報(bào)文是對(duì)哪個(gè)請(qǐng)求進(jìn)行響應(yīng)

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

  • 問(wèn)題計(jì)數(shù):DNS查詢(xún)請(qǐng)求了多少次

  • 回答資源記錄數(shù):DNS響應(yīng)了多少次

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

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

基礎(chǔ)結(jié)構(gòu)中的標(biāo)志字段細(xì)分如下:

標(biāo)志字段
  • QR(Response):查詢(xún)請(qǐng)求,值為0;響應(yīng)為1

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

  • AA(Authoritative):授權(quán)應(yīng)答,該字段在響應(yīng)報(bào)文中有效。通過(guò)0,1區(qū)分是否為權(quán)威服務(wù)器。如果值為 1 時(shí),表示名稱(chēng)服務(wù)器是權(quán)威服務(wù)器;值為 0 時(shí),表示不是權(quán)威服務(wù)器。

  • TC(Truncated):表示是否被截?cái)唷.?dāng)值為1的時(shí)候時(shí),說(shuō)明響應(yīng)超過(guò)了 512字節(jié)并已被截?cái)?,此時(shí)只返回前512個(gè)字節(jié)。

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

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

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

  • rcode(Reply code):通過(guò)返回值判斷相應(yīng)的狀態(tài)。

當(dāng)值為0時(shí),表示沒(méi)有錯(cuò)誤;

當(dāng)值為1時(shí),表示報(bào)文格式錯(cuò)誤(Format error),服務(wù)器不能理解請(qǐng)求的報(bào)文;

當(dāng)值為2時(shí),表示域名服務(wù)器失?。⊿erver failure),因?yàn)榉?wù)器的原因?qū)е聸](méi)辦法處理這個(gè)請(qǐng)求;

當(dāng)值為3時(shí),表示名字錯(cuò)誤(Name Error),只有對(duì)授權(quán)域名解析服務(wù)器有意義,指出解析的域名不存在;

當(dāng)值為4時(shí),表示查詢(xún)類(lèi)型不支持(Not Implemented),即域名服務(wù)器不支持查詢(xún)類(lèi)型;

當(dāng)值為5時(shí),表示拒絕(Refused),一般是服務(wù)器由于設(shè)置的策略拒絕給出應(yīng)答,如服務(wù)器不希望對(duì)某些請(qǐng)求者給出應(yīng)答。

問(wèn)題部分

該部分是用來(lái)顯示DNS查詢(xún)請(qǐng)求的問(wèn)題,其中包含正在進(jìn)行的查詢(xún)信息,包含查詢(xún)名(被查詢(xún)主機(jī)名字)、查詢(xún)類(lèi)型、查詢(xún)類(lèi)。

  • 查詢(xún)名:一般為查詢(xún)的域名,也可能是通過(guò)IP地址進(jìn)行反向查詢(xún)

  • 查詢(xún)類(lèi)型:查詢(xún)請(qǐng)求的資源類(lèi)型。常見(jiàn)的如果為A類(lèi)型,表示通過(guò)域名獲取IP。具體如下圖所示

  • 查詢(xún)類(lèi):地址類(lèi)型,通常為互聯(lián)網(wǎng)地址為1

資源記錄部分

資源記錄部分包含回答問(wèn)題區(qū)域,權(quán)威名稱(chēng)服務(wù)器區(qū)域字段、附加信息區(qū)域字段,格式如下

資源記錄部分
  • 域名:所請(qǐng)求的域名

  • 類(lèi)型:與問(wèn)題部分查詢(xún)類(lèi)型值一直

  • 類(lèi):地址類(lèi)型,和問(wèn)題部分查詢(xún)類(lèi)值一樣

  • 生存時(shí)間:以秒為單位,表示資源記錄的生命周期

  • 資源數(shù)據(jù)長(zhǎng)度:資源數(shù)據(jù)的長(zhǎng)度

  • 資源數(shù)據(jù):按照查詢(xún)要求返回的相關(guān)資源數(shù)據(jù)

4 DNS解析詳解

知道了DNS大概是什么,它的域名結(jié)構(gòu)和報(bào)文結(jié)構(gòu),是時(shí)候看看到底怎么解析的以及如何保證域名的解析比較穩(wěn)定和可靠

DNS核心系統(tǒng)

  • 根域名服務(wù)器(Root DNS Server),大哥,管理頂級(jí)域名服務(wù)并放回頂級(jí)域名服務(wù)器IP,比如"com","cn"

  • 頂級(jí)域名服務(wù)器(Top-level DNS Server),每個(gè)頂級(jí)域名服務(wù)器管理各自下屬,比如com可以返回baidu.com域名服務(wù)器的IP

  • 權(quán)威域名服務(wù)器(Authoritative DNS Server),管理當(dāng)前域名下的IP地址,比如Tencent.com可以返回www.tencent.com的IP地址

核心系統(tǒng)

舉個(gè)例子,假設(shè)我們?cè)L問(wèn)"www.google.com"

  • 訪問(wèn)根域名服務(wù)器,這樣我們就會(huì)知道"com"頂級(jí)域名的地址

  • 訪問(wèn)"com"頂級(jí)域名服務(wù)器,可知道"google.com"域名服務(wù)器的地址

  • 最后方位"google.com"域名服務(wù)器,就可知道"www.google.com"的IP地址

嘿嘿,目前全世界13根域名服務(wù)器還有上百太鏡像,但是為了讓它能力更強(qiáng),處理任務(wù)效率更高,盡量減少域名解析的壓力,通常會(huì)加一層"緩存",意思是如果訪問(wèn)過(guò)了,就緩存,下一次再訪問(wèn)就直接取出,也就是咱么經(jīng)常配置的"8.8.8.8"等

操作系統(tǒng)中同樣也對(duì)DND解析做緩存,比如說(shuō)曾訪問(wèn)過(guò)"www.google.com",

其次,還有我們熟知的hosts文件,當(dāng)在操作系統(tǒng)中沒(méi)有命中則會(huì)在hosts中尋找。

這樣依賴(lài),相當(dāng)于有了DNS服務(wù)器,操作系統(tǒng)的緩存和hosts文件,能就近(緩存)完成解析就好,不用每次都跑到很遠(yuǎn)的地方去解析,這樣大大減輕的DNS服務(wù)器的壓力。畫(huà)了一個(gè)圖,加深印象

DNS解析過(guò)程

嗯?想必應(yīng)該知道這個(gè)過(guò)程了,我們?cè)倥e個(gè)例子,假設(shè)我們?cè)L問(wèn)www.qq.com

  • 客戶(hù)端發(fā)送一個(gè)DNS請(qǐng)求,請(qǐng)問(wèn)qq你的IP的什么啊,同時(shí)會(huì)在本地域名服務(wù)器(一般是網(wǎng)絡(luò)服務(wù)是臨近機(jī)房)打聲招呼

  • 本地收到請(qǐng)求以后,服務(wù)器會(huì)有個(gè)域名與IP的映射表。如果存在,則會(huì)告訴你,如果想訪問(wèn)qq,那么你就訪問(wèn)XX地址。不存在則會(huì)去問(wèn)上級(jí)(根域服務(wù)器):"老鐵,你能告訴我www.qq.com"的IP么

  • 根DNS收到本地DNS請(qǐng)求后,發(fā)現(xiàn)是.com,"www.qq.com喲,這個(gè)由.com大哥管理,我馬上給你它的頂級(jí)域名地址,你去問(wèn)問(wèn)它就好了"

  • 這個(gè)時(shí)候,本地DNS跑去問(wèn)頂級(jí)域名服務(wù)器,"老哥,能告訴下www.qq.com"的ip地址碼",這些頂級(jí)域名負(fù)責(zé)二級(jí)域名比如qq.com

  • 頂級(jí)域名回復(fù):"小本本記好,我給你www.qq.com區(qū)域的權(quán)威DNS服務(wù)器地址",它會(huì)告訴你

  • 本地DNS問(wèn)權(quán)威DNS服務(wù)器:"兄弟,能不能告訴我www.qq.com對(duì)應(yīng)IP是啥"

  • 權(quán)威DNS服務(wù)器查詢(xún)后將響應(yīng)的IP地址告訴了本地DNS,本地服務(wù)器將IP地址返回給客戶(hù)端,從而建立連接

5 DNS進(jìn)階之新玩法

這里主要分享DNS(GSLB)的全局負(fù)載均衡。不是所有的互聯(lián)網(wǎng)服務(wù)都適用于GSLB。

全局負(fù)載均衡采用的主要技術(shù)是智能DNS,它綜合多種不同的策略(比如根據(jù)地理位置或者根據(jù)繁忙程度的權(quán)重)將客戶(hù)訪問(wèn)的域名解析到不同的線路上。開(kāi)啟介紹之前,再一次復(fù)習(xí)下DNS中A記錄和NS記錄

  • A記錄

A記錄是名稱(chēng)解析的重要記錄,它用于將特定的主機(jī)名映射到對(duì)應(yīng)主機(jī)的IP地址上。你可以在DNS服務(wù)器中手動(dòng)創(chuàng)建或通過(guò)DNS客戶(hù)端動(dòng)態(tài)更新來(lái)創(chuàng)建

  • NS記錄

NS記錄此記錄指定負(fù)責(zé)此DNS區(qū)域的權(quán)威名稱(chēng)服務(wù)器。

  • 兩者區(qū)別

A記錄直接給出目的IP,NS記錄將DNS解析任務(wù)交給特定的服務(wù)器,NS記錄中記錄的IP即為該特定服務(wù)器的IP地址

在全局負(fù)載均衡解決方案中,NS記錄指向具有智能DNS解析功能的GSLB設(shè)備,通過(guò)GSLB設(shè)備進(jìn)行A記錄解析。為了保證高可用,如果為多地部署GSLB,則均配置記錄。另外,GSLB設(shè)備還會(huì)對(duì)所在的后端服務(wù)器公網(wǎng)IP進(jìn)行健康檢查,其結(jié)果通過(guò)自有協(xié)議在不同的的GLSB設(shè)備間同步。解析的步驟如下圖

智能DNS解析
  • 用戶(hù)給本地DNS服務(wù)器發(fā)送查詢(xún)請(qǐng)求,如果本地有緩存直接返回給用戶(hù),否則通過(guò)遞歸查詢(xún)獲得名服務(wù)商商處的授權(quán)DNS服務(wù)器

  • 授權(quán)服務(wù)器返回NS記錄給本地DNS服務(wù)器。其中NS記錄指向一個(gè)GSLB設(shè)備接口地址

  • GSLB設(shè)備決策最優(yōu)解析結(jié)果并返回A記錄給本地DNS服務(wù)器。

  • 本地服務(wù)器將查詢(xún)結(jié)果通過(guò)一條A記錄返回給用戶(hù),并緩存這條記錄。

6 DNS實(shí)戰(zhàn)(wireshark)

使用工具為wireshark,訪問(wèn)www.baidu.com

分析DNS請(qǐng)求幀,如下圖所示

DNS請(qǐng)求幀

從上圖我們可知道請(qǐng)求計(jì)數(shù)為1,請(qǐng)求的域名為dss0.bdstatic.com

分析DNS響應(yīng)幀

DNS響應(yīng)

從響應(yīng)頭可以知道,問(wèn)題計(jì)數(shù)為1,正好對(duì)應(yīng)請(qǐng)求幀1個(gè)問(wèn)題?;貞?yīng)了2個(gè)問(wèn)題。分別為

answers
權(quán)威域名服務(wù)器

從上圖可以得出當(dāng)前共有13個(gè)權(quán)威域名服務(wù)器,當(dāng)然每一個(gè)的服務(wù)器地址不同,其中類(lèi)型為NS代表權(quán)威域名服務(wù)器服務(wù)器

兩個(gè)相似面試題

7 使用IP地址訪問(wèn)瀏覽器的原理

  • 打開(kāi)chrome瀏覽器,輸入IP

  • 三次握手建立連接

  • 建立連接以后HTTP開(kāi)始工作,通過(guò)TCP發(fā)送一個(gè)"GET / HTTP/1.1",服務(wù)端給予回應(yīng)

  • 解析請(qǐng)求,根據(jù)HTTP協(xié)議規(guī)定解析,看看那瀏覽器想干啥

  • 哦,原來(lái)你想獲取我的視頻呀,那我讀出來(lái)拼接為HTTP格式給你,回復(fù)"HTTP/1.1 200 OK"

  • 作為瀏覽器回復(fù)一個(gè)TCP的ACK表示確認(rèn)

  • 瀏覽器收到響應(yīng)數(shù)據(jù)后,需要使用相應(yīng)的引擎進(jìn)行渲染,將更好的頁(yè)面展現(xiàn)給用戶(hù)

8 使用域名訪問(wèn)瀏覽器的原理

這一次從瀏覽器角度回答,相信大家已經(jīng)了解一部分瀏覽器知識(shí)了,我們先看看URL到網(wǎng)頁(yè)展示的完整流程是什么樣子

  • 用戶(hù)輸入

在地址欄輸入相應(yīng)的內(nèi)容,如果為關(guān)鍵字,如果直接輸入搜索內(nèi)容,瀏覽器默認(rèn)引擎會(huì)合成為URL,如果符合URL規(guī)則,加上協(xié)議合成完整URL,回車(chē)就會(huì)出現(xiàn)加載頁(yè)面,也就是等待提交文檔的階段

  • URL請(qǐng)求過(guò)程

此時(shí)瀏覽器進(jìn)程將URL通過(guò)進(jìn)程間通信的方式發(fā)送給網(wǎng)絡(luò)進(jìn)程,開(kāi)啟真正的請(qǐng)求流程。注意了,網(wǎng)絡(luò)進(jìn)程這里也有緩存,它會(huì)現(xiàn)在本地緩存查看是否緩存了資源,如果有則直接返回。如果沒(méi)有,那就需要DNS解析獲取服務(wù)器IP地址(HTTPS還少不了TLS連接)

此時(shí)使用IP和服務(wù)器建立三次握手。連接成功開(kāi)始構(gòu)造請(qǐng)求頭等信息。

服務(wù)器收到請(qǐng)求信,根據(jù)請(qǐng)求信息生成響應(yīng)信息給網(wǎng)絡(luò)進(jìn)程。然后開(kāi)始解析響應(yīng)頭內(nèi)容。如果返回值為302/301,說(shuō)明需要跳轉(zhuǎn)到其他URL,如果為200則繼續(xù)處理該請(qǐng)求。

URL的請(qǐng)求數(shù)據(jù)類(lèi)型多種,對(duì)于瀏覽器而言是怎么區(qū)分的呢

這個(gè)時(shí)候就必須強(qiáng)調(diào)下Content-type了,因?yàn)樗鞔_服務(wù)器返回響應(yīng)體數(shù)據(jù)屬于什么類(lèi)型,此時(shí)的瀏覽器也會(huì)根據(jù)Content-type對(duì)決定響應(yīng)體是什么內(nèi)容

  • 進(jìn)入渲染階段

通常情況下,當(dāng)前多進(jìn)程架構(gòu)的瀏覽器對(duì)于每一個(gè)頁(yè)面都有一個(gè)渲染進(jìn)程,前提是如果從X頁(yè)面打開(kāi)Y頁(yè)面,x和y屬于同一個(gè)"站點(diǎn)"(使用相同的協(xié)議和根域名),此時(shí)y頁(yè)面會(huì)復(fù)用x頁(yè)面,否則y頁(yè)面會(huì)單獨(dú)對(duì)應(yīng)一個(gè)渲染進(jìn)程。

  • 提交階段

渲染進(jìn)程收到瀏覽器進(jìn)程的"提交文檔"后,通過(guò)和網(wǎng)絡(luò)進(jìn)程使用"管道"的方式通信。一旦這些文檔數(shù)據(jù)傳輸完成,渲染進(jìn)程就會(huì)告訴瀏覽器進(jìn)程"確認(rèn)提交",此時(shí)瀏覽器進(jìn)程收到"確認(rèn)提交"就會(huì)更新地址欄的URL,歷史狀態(tài)等,這就是為什么當(dāng)我們?cè)诘刂窓谳斎氲刂沸畔⒑笮枰?span style="color: rgb(255, 41, 65);">加載一小會(huì)兒到另一個(gè)頁(yè)面。over

  • 渲染階段

文檔提交以后,此時(shí)就需要使用js,css等美化頁(yè)面,并通過(guò)構(gòu)建DOM樹(shù)等讓用戶(hù)有更好的使用體驗(yàn)。

9 DNS劫持

到這里我們至少知道了DNS可以將域名映射為IP,并且知道了使用了多種緩存方案來(lái)減少DNS訪問(wèn)的壓力。那么DNS一旦出錯(cuò),很可能將域名解析到其他IP地址,這樣我們也就無(wú)法正確訪問(wèn)網(wǎng)頁(yè)(PS是不是有的時(shí)候發(fā)現(xiàn)開(kāi)啟不了網(wǎng)頁(yè)但是qq等可以使用,很可能就是DNS搞鬼了喲)


DNS劫持
  • 利用DNS服務(wù)器進(jìn)行DDOS攻擊

什么是DDOS,我們應(yīng)該知道SYN Flood,是一種DoS(拒絕服務(wù)攻擊)與DDOS(分布式拒絕服務(wù)攻擊的方式),利用大量的偽造TCP請(qǐng)求讓被攻擊方資源榨干。

DDOS

我們假設(shè)攻擊者已經(jīng)知道了攻擊者IP(如果需要了解這一部分內(nèi)容,可以去搜索主動(dòng)被動(dòng)信息搜集/sodan等關(guān)鍵字),此時(shí)攻擊者使用此地址作為解析命令的源地址,當(dāng)DNS請(qǐng)求的時(shí)候返回恰巧也是被攻擊者。此時(shí)如果足夠多的請(qǐng)求(群肉雞)就很容易使網(wǎng)絡(luò)崩潰。

  • 緩存感染

我們已經(jīng)知道了在DNS查詢(xún)過(guò)程中,會(huì)經(jīng)過(guò)操作系統(tǒng)的緩存,hosts文件等,如果將數(shù)據(jù)放入有漏洞的服務(wù)器緩存中,當(dāng)進(jìn)行DNS請(qǐng)求的時(shí)候,就會(huì)將緩存信息返回給用戶(hù),這樣用戶(hù)就會(huì)莫名訪問(wèn)入侵者所設(shè)置的陷阱頁(yè)面中。

  • DNS信息劫持

看到這里的小伙伴,先思考一個(gè)問(wèn)題,在TCP/IP協(xié)議棧中,三次握手中的序列號(hào)到底什么意思?

其功能之一就是避免偽裝數(shù)據(jù)的插入。我們知道,如果我們知道DNS報(bào)文中的ID,我們就可以知道這個(gè)ID請(qǐng)球員位置。作為攻擊者,會(huì)通過(guò)旁路監(jiān)聽(tīng)客戶(hù)端和服務(wù)端的會(huì)話,拿到DNS中的ID,此時(shí)相當(dāng)于在DNS服務(wù)器之前拿到ID,偽裝DNS服務(wù)器回復(fù)客戶(hù)端,引導(dǎo)客戶(hù)端訪問(wèn)惡意的網(wǎng)站

電腦小故障

比如qq可用但是瀏覽器就是不好使

  • 輸入:http://192.168.1.1(可能是http://192.168.0.1),輸入路由器用戶(hù)名密碼

  • DHCP服務(wù)器-----DHCP服務(wù)-,修改DNS為更加可靠的DNS服務(wù)器IP.保存即可

方法2:修改路由器password

  • 地址欄輸入"http://192.168.1.1",登錄并進(jìn)入路由器頁(yè)面

  • 系統(tǒng)工具--修改登錄口令頁(yè)面

保護(hù)域名/盡量避免攻擊

  • 備份策略。一般至少會(huì)使用兩個(gè)域名,一旦其中一個(gè)被攻擊,用戶(hù)可以通過(guò)另一個(gè)訪問(wèn)

  • 隨時(shí)留意域名注冊(cè)中的電子郵件

  • 保存好所有權(quán)信息(比如賬單記錄,注冊(cè)信息等)

  • 隨時(shí)關(guān)注安全補(bǔ)丁

10 本文涉及高頻面試題(自行測(cè)試)

  • 講講DNS原理

  • 進(jìn)程與線程

  • 遞歸查詢(xún)和遞歸查詢(xún)區(qū)別

  • DNS解析流程

  • chrome架構(gòu)演變

  • ELF是什么,數(shù)據(jù)段,代碼段,全局變量等分別存放在哪兒

  • DNS劫持

  • 描述下DDOS與DOS攻擊

  • 使用IP地址訪問(wèn)web服務(wù)器

  • 使用域名訪問(wèn)web服務(wù)器過(guò)程

  • 可重定位什么意思?

  • 靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別

  • 進(jìn)程與線程間共享數(shù)據(jù)

嘮嗑

今日的分享也就告一段落了,碼字不易,不想被「白嫖」,文末點(diǎn)個(gè)「在看」吧,讓我們一起「Smile」。如需帶目錄PDF,后臺(tái)回復(fù)「DNS即可!

巨人的肩膀

https://baike.baidu.com/item/%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/574285?fr=aladdin
https://baijiahao.baidu.com/sid=1623434144833493787&wfr=spider&for=pc
https://www.sohu.com/a/229518877_609556
https://time.geekbang.org/column/intro/100024701?utm_source=pinpaizhuanqu&utm_medium=geektime&utm_campaign=guanwang&utm_term=guanwang&utm_content=0511


本文授權(quán)轉(zhuǎn)載自公眾號(hào)“我是程序員小賤”,作者:L的存在


-END-




推薦閱讀



【01】搞懂這 9 個(gè)步驟,DNS 訪問(wèn)原理就明明白白了
【02】工程師純干貨總結(jié):TCP/IP網(wǎng)絡(luò)編程
【03】深度解析U-Boot網(wǎng)絡(luò)實(shí)現(xiàn)(長(zhǎng)篇好文)
【04】真正漲知識(shí)了!Linux五大網(wǎng)絡(luò)IO模型詳解
【05】ZigBee射頻無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)計(jì)方案


免責(zé)聲明:整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉