'面試官:講講DNS的原理?'

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

面試官:講講DNS的原理?

四次握手:

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

面試官:講講DNS的原理?

四次握手:

面試官:講講DNS的原理?

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

原理

現在,講最後一塊DNS解析域名的原理!這塊是重中之重! 先介紹linux下一個dig命令,以顯示解析域名的過程。 為了便於說明,我們來dig一下天貓的過程

dig www.tmall.com

結果如下圖所示

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

面試官:講講DNS的原理?

四次握手:

面試官:講講DNS的原理?

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

原理

現在,講最後一塊DNS解析域名的原理!這塊是重中之重! 先介紹linux下一個dig命令,以顯示解析域名的過程。 為了便於說明,我們來dig一下天貓的過程

dig www.tmall.com

結果如下圖所示

面試官:講講DNS的原理?

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

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

面試官:講講DNS的原理?

四次握手:

面試官:講講DNS的原理?

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

原理

現在,講最後一塊DNS解析域名的原理!這塊是重中之重! 先介紹linux下一個dig命令,以顯示解析域名的過程。 為了便於說明,我們來dig一下天貓的過程

dig www.tmall.com

結果如下圖所示

面試官:講講DNS的原理?

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

面試官:講講DNS的原理?

這段為查詢內容。 DNS的查詢參數一般有三個

  • (1)域名:服務器、郵件服務器(郵件地址中 @ 後面的部分)的名稱(2)Class:在設置DNS方案時,互聯網之外的網絡也考慮到了,而Class就是用來識別網絡的,不過現在只有互聯網,所以它的值永遠都是代表互聯網的IN(3)記錄類型:標識域名對應何種類型的記錄。類型為A,表示域名對應的IP地址。類型為MX時,表示域名對應的是郵件服務器。類型為PTR,表示根據IP地址反查域名。類型為CNAME,表示查詢域名相關別名。

當然,你這個時候要問我一個問題啦(注意上圖紅框)

煙哥,我輸入的明明是http://www.tmall.com可是命令裡解析的地址是www.tmall.com.啊,多了一個.的符號啊?這個.符號是什麼意思呢?

於是乎,又扯了一道經典面試題

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

面試官:講講DNS的原理?

四次握手:

面試官:講講DNS的原理?

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

原理

現在,講最後一塊DNS解析域名的原理!這塊是重中之重! 先介紹linux下一個dig命令,以顯示解析域名的過程。 為了便於說明,我們來dig一下天貓的過程

dig www.tmall.com

結果如下圖所示

面試官:講講DNS的原理?

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

面試官:講講DNS的原理?

這段為查詢內容。 DNS的查詢參數一般有三個

  • (1)域名:服務器、郵件服務器(郵件地址中 @ 後面的部分)的名稱(2)Class:在設置DNS方案時,互聯網之外的網絡也考慮到了,而Class就是用來識別網絡的,不過現在只有互聯網,所以它的值永遠都是代表互聯網的IN(3)記錄類型:標識域名對應何種類型的記錄。類型為A,表示域名對應的IP地址。類型為MX時,表示域名對應的是郵件服務器。類型為PTR,表示根據IP地址反查域名。類型為CNAME,表示查詢域名相關別名。

當然,你這個時候要問我一個問題啦(注意上圖紅框)

煙哥,我輸入的明明是http://www.tmall.com可是命令裡解析的地址是www.tmall.com.啊,多了一個.的符號啊?這個.符號是什麼意思呢?

於是乎,又扯了一道經典面試題

面試官:講講DNS的原理?

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

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

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

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

那麼解析流程就是分級查詢!

(1)先在本機的DNS裡頭查,如果有就直接返回了。本機DNS就是下面這個東東

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

面試官:講講DNS的原理?

四次握手:

面試官:講講DNS的原理?

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

原理

現在,講最後一塊DNS解析域名的原理!這塊是重中之重! 先介紹linux下一個dig命令,以顯示解析域名的過程。 為了便於說明,我們來dig一下天貓的過程

dig www.tmall.com

結果如下圖所示

面試官:講講DNS的原理?

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

面試官:講講DNS的原理?

這段為查詢內容。 DNS的查詢參數一般有三個

  • (1)域名:服務器、郵件服務器(郵件地址中 @ 後面的部分)的名稱(2)Class:在設置DNS方案時,互聯網之外的網絡也考慮到了,而Class就是用來識別網絡的,不過現在只有互聯網,所以它的值永遠都是代表互聯網的IN(3)記錄類型:標識域名對應何種類型的記錄。類型為A,表示域名對應的IP地址。類型為MX時,表示域名對應的是郵件服務器。類型為PTR,表示根據IP地址反查域名。類型為CNAME,表示查詢域名相關別名。

當然,你這個時候要問我一個問題啦(注意上圖紅框)

煙哥,我輸入的明明是http://www.tmall.com可是命令裡解析的地址是www.tmall.com.啊,多了一個.的符號啊?這個.符號是什麼意思呢?

於是乎,又扯了一道經典面試題

面試官:講講DNS的原理?

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

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

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

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

那麼解析流程就是分級查詢!

(1)先在本機的DNS裡頭查,如果有就直接返回了。本機DNS就是下面這個東東

面試官:講講DNS的原理?

(2)本機DNS裡頭髮現沒有,就去根服務器裡查。根服務器發現這個域名是屬於com域,因此根域DNS服務器會返回它所管理的com域中的DNS 服務器的IP地址,意思是“雖然我不知道你要查的那個域名的地址,但你可以去com域問問看”

(3)本機的DNS接到又會向com域的DNS服務器發送查詢消息。com 域中也沒有www.tmall.com這個域名的信息,和剛才一樣,com域服務器會返回它下面的tmall.com域的DNS服務器的IP地址。

以此類推,只要重複前面的步驟,就可以順藤摸瓜找到目標DNS服務器

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

扯了那麼多東西,我們來看第二段內容,也就是響應體的部分! 如下所示

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

面試官:講講DNS的原理?

四次握手:

面試官:講講DNS的原理?

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

原理

現在,講最後一塊DNS解析域名的原理!這塊是重中之重! 先介紹linux下一個dig命令,以顯示解析域名的過程。 為了便於說明,我們來dig一下天貓的過程

dig www.tmall.com

結果如下圖所示

面試官:講講DNS的原理?

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

面試官:講講DNS的原理?

這段為查詢內容。 DNS的查詢參數一般有三個

  • (1)域名:服務器、郵件服務器(郵件地址中 @ 後面的部分)的名稱(2)Class:在設置DNS方案時,互聯網之外的網絡也考慮到了,而Class就是用來識別網絡的,不過現在只有互聯網,所以它的值永遠都是代表互聯網的IN(3)記錄類型:標識域名對應何種類型的記錄。類型為A,表示域名對應的IP地址。類型為MX時,表示域名對應的是郵件服務器。類型為PTR,表示根據IP地址反查域名。類型為CNAME,表示查詢域名相關別名。

當然,你這個時候要問我一個問題啦(注意上圖紅框)

煙哥,我輸入的明明是http://www.tmall.com可是命令裡解析的地址是www.tmall.com.啊,多了一個.的符號啊?這個.符號是什麼意思呢?

於是乎,又扯了一道經典面試題

面試官:講講DNS的原理?

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

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

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

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

那麼解析流程就是分級查詢!

(1)先在本機的DNS裡頭查,如果有就直接返回了。本機DNS就是下面這個東東

面試官:講講DNS的原理?

(2)本機DNS裡頭髮現沒有,就去根服務器裡查。根服務器發現這個域名是屬於com域,因此根域DNS服務器會返回它所管理的com域中的DNS 服務器的IP地址,意思是“雖然我不知道你要查的那個域名的地址,但你可以去com域問問看”

(3)本機的DNS接到又會向com域的DNS服務器發送查詢消息。com 域中也沒有www.tmall.com這個域名的信息,和剛才一樣,com域服務器會返回它下面的tmall.com域的DNS服務器的IP地址。

以此類推,只要重複前面的步驟,就可以順藤摸瓜找到目標DNS服務器

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

扯了那麼多東西,我們來看第二段內容,也就是響應體的部分! 如下所示

面試官:講講DNS的原理?

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

為什麼天貓要設一個別名到http://www.tmall.com.danuoyi.tbcache.com地址呢? 於是乎,又一道經典面試題出現

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

面試官:講講DNS的原理?

四次握手:

面試官:講講DNS的原理?

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

原理

現在,講最後一塊DNS解析域名的原理!這塊是重中之重! 先介紹linux下一個dig命令,以顯示解析域名的過程。 為了便於說明,我們來dig一下天貓的過程

dig www.tmall.com

結果如下圖所示

面試官:講講DNS的原理?

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

面試官:講講DNS的原理?

這段為查詢內容。 DNS的查詢參數一般有三個

  • (1)域名:服務器、郵件服務器(郵件地址中 @ 後面的部分)的名稱(2)Class:在設置DNS方案時,互聯網之外的網絡也考慮到了,而Class就是用來識別網絡的,不過現在只有互聯網,所以它的值永遠都是代表互聯網的IN(3)記錄類型:標識域名對應何種類型的記錄。類型為A,表示域名對應的IP地址。類型為MX時,表示域名對應的是郵件服務器。類型為PTR,表示根據IP地址反查域名。類型為CNAME,表示查詢域名相關別名。

當然,你這個時候要問我一個問題啦(注意上圖紅框)

煙哥,我輸入的明明是http://www.tmall.com可是命令裡解析的地址是www.tmall.com.啊,多了一個.的符號啊?這個.符號是什麼意思呢?

於是乎,又扯了一道經典面試題

面試官:講講DNS的原理?

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

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

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

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

那麼解析流程就是分級查詢!

(1)先在本機的DNS裡頭查,如果有就直接返回了。本機DNS就是下面這個東東

面試官:講講DNS的原理?

(2)本機DNS裡頭髮現沒有,就去根服務器裡查。根服務器發現這個域名是屬於com域,因此根域DNS服務器會返回它所管理的com域中的DNS 服務器的IP地址,意思是“雖然我不知道你要查的那個域名的地址,但你可以去com域問問看”

(3)本機的DNS接到又會向com域的DNS服務器發送查詢消息。com 域中也沒有www.tmall.com這個域名的信息,和剛才一樣,com域服務器會返回它下面的tmall.com域的DNS服務器的IP地址。

以此類推,只要重複前面的步驟,就可以順藤摸瓜找到目標DNS服務器

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

扯了那麼多東西,我們來看第二段內容,也就是響應體的部分! 如下所示

面試官:講講DNS的原理?

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

為什麼天貓要設一個別名到http://www.tmall.com.danuoyi.tbcache.com地址呢? 於是乎,又一道經典面試題出現

面試官:講講DNS的原理?

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

"

來源:知乎

作者:孤獨煙

引言

今天我們來聊聊DNS。 所謂域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分佈式數據庫,可以balabala..省略一萬字不表,因為這都不是重點!

重點只有一個,大廠經常問!

沒錯,正是因為DNS包含著很多大廠常考面試知識點!因此,煙哥認為很有必要再開一文說明。

正文

概念

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

而且,一個域名往往對應多個DNS地址,如下圖所示

面試官:講講DNS的原理?

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

流程

接下來,就不得不說一道經典面試題了

面試官:講講DNS的原理?

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

  • 1.根據域名,進行DNS域名解析;2.拿到解析的IP地址,建立TCP連接;3.向IP地址,發送HTTP請求;4.服務器處理請求;5.返回響應結果;6.關閉TCP連接;7.瀏覽器解析HTML;8.瀏覽器佈局渲染;

ps:由於本文不是講HTTP請求,我提幾個思考題,讀者自己去思考(沒錯,我就是故意不說,咬我啊!)

  • 1、一個 TCP 連接可以對應幾個 HTTP 請求?(提示,這在問你HTTP1.0和1.1的區別)2、一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?(提示,這就是在問你HTTP2.0和HTTP1.1協議的區別)3、瀏覽器對同一Host建立TCP連接到數量有沒有限制?(拜託,一個網站那麼多圖片,開一個TCP連接,按順序下載?那不是等到死?)

好了,不扯了,本文不是在講Http協議。 下面我們著重來說DNS解析這塊

解析

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

面試官:講講DNS的原理?

如圖所示,大致就是:瀏覽器輸入地址,然後瀏覽器這個進程去調操作系統某個庫裡的gethostbyname函數(例如,Linux GNU glibc標準庫的gethostbyname函數),然後呢這個函數通過網卡給DNS服務器發UDP請求,接收結果,然後將結果給返回給瀏覽器。

這張圖其實已經講明白大致的流程,但是細節上可能有些差異。 例如

  • (1)我們在用chrome瀏覽器的時候,其實會先去瀏覽器的dns緩存裡頭查詢,dns緩存中沒有,再去調用gethostbyname函數(2)gethostbyname函數在試圖進行DNS解析之前首先檢查域名是否在本地 Hosts 裡,如果沒找到再去DNS服務器上查

不過,看到這裡!請回憶下這兩道面試題?

面試官:講講DNS的原理?

現在,會回答了麼?

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

DNS的規範規定了2種類型的DNS服務器,一個叫主DNS服務器,一個叫輔助DNS服務器。在一個區中主DNS服務器從自己本機的數據文件中讀取該區的DNS數據信息,而輔助DNS服務器則從區的主DNS服務器中讀取該區的DNS數據信息。當一個輔助DNS服務器啟動時,它需要與主DNS服務器通信,並加載數據信息,這就叫做區傳送(zone transfer)。 這種情況下,使用TCP協議。

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

面試官:講講DNS的原理?

針對第一問,為什麼域名解析用UDP協議?

因為UDP快啊!UDP的DNS協議只要一個請求、一個應答就好了。而使用基於TCP的DNS協議要三次握手、發送數據以及應答、四次揮手。但是UDP協議傳輸內容不能超過512字節。不過客戶端向DNS服務器查詢域名,一般返回的內容都不超過512字節,用UDP傳輸即可。

針對第二問,為什麼區域傳送用TCP協議?

因為TCP協議可靠性好啊!你要從主DNS上覆制內容啊,你用不可靠的UDP? 因為TCP協議傳輸的內容大啊,你用最大隻能傳512字節的UDP協議?萬一同步的數據大於512字節,你怎麼辦?

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

面試官:講講DNS的原理?

這個問題,我們這裡當段子來講,改天寫一篇《TCP/IP面試指南》!

三次握手:

面試官:講講DNS的原理?

兩次握手:

面試官:講講DNS的原理?

四次握手:

面試官:講講DNS的原理?

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

原理

現在,講最後一塊DNS解析域名的原理!這塊是重中之重! 先介紹linux下一個dig命令,以顯示解析域名的過程。 為了便於說明,我們來dig一下天貓的過程

dig www.tmall.com

結果如下圖所示

面試官:講講DNS的原理?

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

面試官:講講DNS的原理?

這段為查詢內容。 DNS的查詢參數一般有三個

  • (1)域名:服務器、郵件服務器(郵件地址中 @ 後面的部分)的名稱(2)Class:在設置DNS方案時,互聯網之外的網絡也考慮到了,而Class就是用來識別網絡的,不過現在只有互聯網,所以它的值永遠都是代表互聯網的IN(3)記錄類型:標識域名對應何種類型的記錄。類型為A,表示域名對應的IP地址。類型為MX時,表示域名對應的是郵件服務器。類型為PTR,表示根據IP地址反查域名。類型為CNAME,表示查詢域名相關別名。

當然,你這個時候要問我一個問題啦(注意上圖紅框)

煙哥,我輸入的明明是http://www.tmall.com可是命令裡解析的地址是www.tmall.com.啊,多了一個.的符號啊?這個.符號是什麼意思呢?

於是乎,又扯了一道經典面試題

面試官:講講DNS的原理?

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

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

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

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

那麼解析流程就是分級查詢!

(1)先在本機的DNS裡頭查,如果有就直接返回了。本機DNS就是下面這個東東

面試官:講講DNS的原理?

(2)本機DNS裡頭髮現沒有,就去根服務器裡查。根服務器發現這個域名是屬於com域,因此根域DNS服務器會返回它所管理的com域中的DNS 服務器的IP地址,意思是“雖然我不知道你要查的那個域名的地址,但你可以去com域問問看”

(3)本機的DNS接到又會向com域的DNS服務器發送查詢消息。com 域中也沒有www.tmall.com這個域名的信息,和剛才一樣,com域服務器會返回它下面的tmall.com域的DNS服務器的IP地址。

以此類推,只要重複前面的步驟,就可以順藤摸瓜找到目標DNS服務器

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

扯了那麼多東西,我們來看第二段內容,也就是響應體的部分! 如下所示

面試官:講講DNS的原理?

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

為什麼天貓要設一個別名到http://www.tmall.com.danuoyi.tbcache.com地址呢? 於是乎,又一道經典面試題出現

面試官:講講DNS的原理?

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

面試官:講講DNS的原理?

果然,就是一個淘寶的cdn環境。

那麼這麼配有什麼好處呢?

唉,這題當思考題,快過來探討留言!

總結

本文講了DNS的一些常見知識點,希望大家有所收穫。如果有其他關於DNS的問題,歡迎留言諮詢。

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

"

相關推薦

推薦中...