<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      引言

      今天我們來聊聊DNS。
      所謂域名系統(tǒng)(Domain Name System縮寫DNS,Domain
      Name被譯為域名)是因特網(wǎng)的一項核心服務(wù),它作為可以將域名和IP地址相互映射的一個分布式數(shù)據(jù)庫,可以balabala..省略一萬字不表,因為這都不是重點!
      重點只有一個,大廠經(jīng)常問!
      沒錯,正是因為DNS包含著很多大廠??济嬖囍R點!因此,煙哥認(rèn)為很有必要再開一文說明。

      正文

      概念

      DNS 的全稱是 Domain Name System 或者 Domain Name Service,它主要的作用就是將人們所熟悉的網(wǎng)址 (域名)
      “翻譯”成電腦可以理解的 IP 地址,這個過程叫做 DNS 域名解析。
      打個比方,我們登百度的地址的時候,都是敲www.baidu.com,進(jìn)行登陸,難道你會去敲IP地址登百度?明顯,域名容易記憶。
      而且,一個域名往往對應(yīng)多個DNS地址,如下圖所示

      如果要全部都記住,嗯,我相信兄臺記憶力一定十分驚人!

      流程

      接下來,就不得不說一道經(jīng)典面試題了

      其實回答很簡單(俗稱天龍八步)

      * 1.根據(jù)域名,進(jìn)行DNS域名解析;
      * 2.拿到解析的IP地址,建立TCP連接;
      * 3.向IP地址,發(fā)送HTTP請求;
      * 4.服務(wù)器處理請求;
      * 5.返回響應(yīng)結(jié)果;
      * 6.關(guān)閉TCP連接;
      * 7.瀏覽器解析HTML;
      * 8.瀏覽器布局渲染;
      ps:由于本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

      * 1、一個 TCP 連接可以對應(yīng)幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區(qū)別)
      * 2、一個 TCP 連接中 HTTP
      請求發(fā)送可以一起發(fā)送么(比如一起發(fā)三個請求,再三個響應(yīng)一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協(xié)議的區(qū)別)
      * 3、瀏覽器對同一Host建立TCP連接到數(shù)量有沒有限制?(拜托,一個網(wǎng)站那么多圖片,開一個TCP連接,按順序下載?那不是等到死?)
      好了,不扯了,本文不是在講Http協(xié)議。
      下面我們著重來說DNS解析這塊

      解析

      OK,著重說DNS解析這塊,流程圖如下


      如圖所示,大致就是:瀏覽器輸入地址,然后瀏覽器這個進(jìn)程去調(diào)操作系統(tǒng)某個庫里的gethostbyname函數(shù)(例如,Linux GNU
      glibc標(biāo)準(zhǔn)庫的gethostbyname函數(shù)),然后呢這個函數(shù)通過網(wǎng)卡給DNS服務(wù)器發(fā)UDP請求,接收結(jié)果,然后將結(jié)果給返回給瀏覽器。

      這張圖其實已經(jīng)講明白大致的流程,但是細(xì)節(jié)上可能有些差異。
      例如

      * (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存里頭查詢,dns緩存中沒有,再去調(diào)用gethostbyname函數(shù)
      * (2)gethostbyname函數(shù)在試圖進(jìn)行DNS解析之前首先檢查域名是否在本地 Hosts 里,如果沒找到再去DNS服務(wù)器上查
      不過,看到這里!請回憶下這兩道面試題?

      現(xiàn)在,會回答了么?

      什么,你還不懂怎么答?把文章拉到開頭。從頭看過。
      不過呢,需要補(bǔ)充說明一下,DNS中也有一個地方用到了TCP協(xié)議。那就是區(qū)域傳送!


      DNS的規(guī)范規(guī)定了2種類型的DNS服務(wù)器,一個叫主DNS服務(wù)器,一個叫輔助DNS服務(wù)器。在一個區(qū)中主DNS服務(wù)器從自己本機(jī)的數(shù)據(jù)文件中讀取該區(qū)的DNS數(shù)據(jù)信息,而輔助DNS服務(wù)器則從區(qū)的主DNS服務(wù)器中讀取該區(qū)的DNS數(shù)據(jù)信息。當(dāng)一個輔助DNS服務(wù)器啟動時,它需要與主DNS服務(wù)器通信,并加載數(shù)據(jù)信息,這就叫做區(qū)傳送(zone
      transfer)。 這種情況下,使用TCP協(xié)議。

      講到這里。其實面試官是可以深入追問的,如下所示


      針對第一問,為什么域名解析用UDP協(xié)議?

      因為UDP快??!UDP的DNS協(xié)議只要一個請求、一個應(yīng)答就好了。而使用基于TCP的DNS協(xié)議要三次握手、發(fā)送數(shù)據(jù)以及應(yīng)答、四次揮手。但是UDP協(xié)議傳輸內(nèi)容不能超過512字節(jié)。不過客戶端向DNS服務(wù)器查詢域名,一般返回的內(nèi)容都不超過512字節(jié),用UDP傳輸即可。

      針對第二問,為什么區(qū)域傳送用TCP協(xié)議?
      因為TCP協(xié)議可靠性好??!你要從主DNS上復(fù)制內(nèi)容啊,你用不可靠的UDP?
      因為TCP協(xié)議傳輸?shù)膬?nèi)容大啊,你用最大只能傳512字節(jié)的UDP協(xié)議?萬一同步的數(shù)據(jù)大于512字節(jié),你怎么辦?

      講到這里,我突然想到一個段子(沒辦法,頭腦中知識太多)!


      這個問題,我們這里當(dāng)段子來講,改天寫一篇《TCP/IP面試指南》!
      三次握手:


      兩次握手:


      四次握手:


      所以啊。三次握手資源最省(當(dāng)段子看看就好)!扯回我們的DNS話題!

      原理

      現(xiàn)在,講最后一塊DNS解析域名的原理!這塊是重中之重!
      先介紹linux下一個dig命令,以顯示解析域名的過程。
      為了便于說明,我們來dig一下天貓的過程
      dig www.tmall.com
      結(jié)果如下圖所示


      莫方,看不懂沒事。
      現(xiàn)在我們來讀重點的兩段。第一段代表請求參數(shù)如下圖所示


      這段為查詢內(nèi)容。
      DNS的查詢參數(shù)一般有三個

      * (1)域名:服務(wù)器、郵件服務(wù)器(郵件地址中 @ 后面的部分)的名稱
      * (2)Class:在設(shè)置DNS方案時,互聯(lián)網(wǎng)之外的網(wǎng)絡(luò)也考慮到了,而Class就是用來識別網(wǎng)絡(luò)的,不過現(xiàn)在只有互聯(lián)網(wǎng),所以它的值永遠(yuǎn)都是代表互聯(lián)網(wǎng)的IN
      *
      (3)記錄類型:標(biāo)識域名對應(yīng)何種類型的記錄。類型為A,表示域名對應(yīng)的IP地址。類型為MX時,表示域名對應(yīng)的是郵件服務(wù)器。類型為PTR,表示根據(jù)IP地址反查域名。類型為CNAME,表示查詢域名相關(guān)別名。
      當(dāng)然,你這個時候要問我一個問題啦(注意上圖紅框)
      煙哥,我輸入的明明是www.tmall.com可是命令里解析的地址是www.tmall.com.啊,多了一個.的符號啊?這個.符號是什么意思呢?

      于是乎,又扯了一道經(jīng)典面試題


      OK,好,要講明白這個問題。我們要先把域名的結(jié)構(gòu)講清楚!
      www.tmall.com對應(yīng)的真正的域名為www.tmall.com.。末尾的.稱為根域名,因為每個域名都有根域名,因此我們通常省略。

      根域名的下一級,叫做"頂級域名"(top-level domain,縮寫為TLD),比如.com、.net;

      再下一級叫做"次級域名"(second-level domain,縮寫為SLD),比如www.tmall.com里面的.tmall
      ,這一級域名是用戶可以注冊的;

      再下一級是主機(jī)名(host),比如www.tmall.com里面的www,又稱為"三級域名",這是用戶在自己的域里面為服務(wù)器分配的名稱,是用戶可以任意分配的。

      那么解析流程就是分級查詢!
      (1)先在本機(jī)的DNS里頭查,如果有就直接返回了。本機(jī)DNS就是下面這個東東


      (2)本機(jī)DNS里頭發(fā)現(xiàn)沒有,就去根服務(wù)器里查。根服務(wù)器發(fā)現(xiàn)這個域名是屬于com域,,因此根域DNS服務(wù)器會返回它所管理的com域中的DNS
      服務(wù)器的IP地址,意思是“雖然我不知道你要查的那個域名的地址,但你可以去com域問問看”
      (3)本機(jī)的DNS接到又會向com域的DNS服務(wù)器發(fā)送查詢消息。com 域中也沒有www.tmall.com這個域名的信息,和剛才一樣,com
      域服務(wù)器會返回它下面的tmall.com域的DNS服務(wù)器的IP地址。
      以此類推,只要重復(fù)前面的步驟,就可以順藤摸瓜找到目標(biāo)DNS服務(wù)器

      ps:溫馨提醒,dig +trace www.tmall.com 可以看到解析過程。有興趣的讀者,自己實驗一下。

      扯了那么多東西,我們來看第二段內(nèi)容,也就是響應(yīng)體的部分!
      如下所示


      很明顯,第一行就是說www.tmall.com有一個別名是www.tmall.com.danuoyi.tbcache.com。后面幾行就是這個
      www.tmall.com.danuoyi.tbcache.com地址的真實IP。

      為什么天貓要設(shè)一個別名到www.tmall.com.danuoyi.tbcache.com地址呢?
      于是乎,又一道經(jīng)典面試題出現(xiàn)


      說句實在話,我當(dāng)初第一眼,見到這題的時候,我覺得應(yīng)該是方便cdn配置。
      回到我們的例子,如果煙哥的猜測正確,www.tmall.com.danuoyi.tbcache.com這個地址,應(yīng)該是淘寶的一個cdn地址。
      因此,我特意去查了域名備案記錄。如下圖所示


      果然,就是一個淘寶的cdn環(huán)境。
      那么這么配有什么好處呢?
      唉,這題當(dāng)思考題,快過來探討留言!

      總結(jié)

      本文講了DNS的一些常見知識點,希望大家有所收獲。如果有其他關(guān)于DNS的問題,歡迎留言咨詢。

      (啊,呸,我就隨便說說,不要當(dāng)真,千萬別問,萬一我不會,不是暴露了我是個水貨)!

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          免费无遮挡在线观看视频网站 | 久久精品三级电影 | 白丝调教高潮失禁丨vk | 国产精品成人一区二区三区吃奶 | 国产做爰又粗又大又爽小妖精 | 污污视频网站免费在线观看 | 亚洲AV男人天堂 | 99热在线观看 | 2024黄色免费网站 | 老女人色黄大片 |