1. 程式人生 > >DNS(域名系統),互聯網的翻譯官

DNS(域名系統),互聯網的翻譯官

域名 .com orien window 查找 報文 打包 auto 難度

前言
DNS身為TCP/IP協議族的“高層”(第7層,頂層),專職互聯網的翻譯任務,是一位出色的“翻譯官”。本文將和大家一起接近、了解這位我們每天都要接觸多次的翻譯專家。

基本概念
DNS(Domain Name System):域名系統,DNS其實就是一個分布式的數據庫系統,它主要的功能是提供主機名和IP地址之間的轉換功能。我們每天在瀏覽器上輸入的網址,比如www.jianshu.com,當你敲擊回車時,就開始使用DNS服務了。最早,在DNS還沒被發明之現,所有的地址都由一個中樞主機名進行管理,在那個“上古”時代,因為網站十分的稀少,管理難度還可以操控,但隨著互聯網的野蠻式發展,網站數量驟增,這種中央工作模式開始暴露出響應慢、安全性等一系列的問題,DNS適時的出現了。

DNS是如何工作的

我們還是用例子來說明。

172.27.0.14是筆者的主機(簡稱A),183.60.83.19是筆者網絡運營商的DNS服務器(簡稱B)。
首先A主機發出了需要訪問www.jianshu.com的請求,但這個域名,在系統內部要本不知道你要訪問什麽,TCP/IP協議只認IP地址,就像人臉識別一樣,換個人就會識別錯誤。此時就需要一個稱職的翻譯官,將適合人記錄的域名翻譯成IP地址。這時候DNS進場了。
DNS首先會查找本機有無對應的DNS記錄,windows系統會通過windows\system32\drivers\etc\hosts文件查找,Linux會通過/etc/hosts文件查找。
技術分享圖片
host記錄的格式如上,分為2個部分,前半部分是IP地址,後半部分是對應的域名。

如果host找不到記錄,就會先發送DNS查詢請求到指定的DNS服務器(這也就是為什麽你的電腦為何必須指明DNS服務器地址的原因)。我們來看2條報文。

技術分享圖片
此時A通過54889端口(臨時端口,使用UDP協議,如果你不清楚UDP協議是什麽,請參考我的另一篇文檔TCP和UDP,你要知道的123 (UDP篇)),和B主機的53端口通信,第1條報文是A主機發向B主機,+號表示遞歸查詢,A表示查詢類型,意思是需要查詢IP地址,?表示這是一條查詢報文。www.jianshu.com表示要查詢的域名,33表示字節,UDP的首部長度是12個字節,域名長度為17個字節,查詢類型和類占4個字節。
技術分享圖片
簡單解釋下域名長度為何是17個字節,以小數點為分隔單位,第1個3表示www占3個字節,第2個7表示jianshu占7個字節,第3個3表示com占3個字節,最後一個置0,表示後域名結束。

現在來看第2條報文,這是B服務器的響應報文,3/0/0表示返回了3資源記錄(Resource Record),第2個0表示返回0條授權回答,第3個0表示返回了0條附加記錄(一般都是0)。第1條資源記錄類型為CNAME(域名規範名稱),第2條就是A記錄,表示返回對應CNAME的IP地址,第3條也是A記錄返回的是該域名的另一個IP地址。有時候甚至可能返回N條A記錄,這是因為使用了負載均衡技術,目的是增加服務提供的可靠性和並發處理能力。

此時DNS系統已經拿到了www.jianshu.com對應IP地址記錄,即完成了翻譯任務,並將其返回給系統,系統拿到了IP地址,將訪問網頁的請求進行打包封裝,並指定報文的目的地址為剛剛獲取到的域名對應IP地址,數據就順利的發送到目的主機了。

至於DNS服務器是如何查詢到域名IP地址的,後續有機會再跟大家匯報。

DNS(域名系統),互聯網的翻譯官