DNS的祕密(1) 工做原理

這是我參與8月更文挑戰的第13天,活動詳情查看:8月更文挑戰html

這世上本沒有DNS,後來網站多了,也就有了DNS。windows

DNS協議

DNS——Domain Name System 域名系統,在網絡世界充當「指針」的角色。它的功能很直接:從域名查詢到IP地址。瀏覽器

在互聯網剛出現的時候,尚未DNS一說,有專人把網址的IP地址記錄到txt文本,供使用者去搜索。後來網站愈來愈多,TXT登記和查詢的效率都過低了,無法維護了,纔出現了DNS的雛形。緩存

DNS是經過各個散落世界各地的Name Server域名服務器按照DNS protocol進行工做的。下圖是DNS的協議棧:安全

image.png

  1. 通常認爲DNS協議位於應用層;
  2. DNS查詢消息,信息量小,格式固定,因此在傳輸層優先使用UDP協議進行發送,這樣作的好處是傳輸速率更快!只有在無響應狀況下才會使用TCP;
  3. DNS服務器默認端口是53,客戶端端口隨機;
  4. DNS協議採用的是和HTTP相似的C/S模式下的請求-應答模型,即客戶端向服務器發起查詢請求,服務器進行應答

來看一個真實的DNS請求-應答消息:服務器

image.png

  • 客戶端向DNS服務器的53端口發送請求,查詢"activity.windows.com」的A地址(IPV4地址),能夠看到使用的是UDP傳輸

image.png

  • 服務器響應,一樣使用UDP傳輸,客戶都會對收到的信息進行校驗;
  • 消息還有2個answers,一個是告訴客戶端,"activity.windows.com」實際指向的是另外一個域名"activity-geo.trafficmanager.net"(CName);另外一個是把真實域名的IP地址返回給了客戶端,完成響應;
  • 關於消息中的type A, type CName,是DNS的記錄類型(record type),我在下文會詳細說明

DNS分級

要說清楚DNS是如何工做的,讓咱們先來解析一個網址:微信

image.png

  • URL:上圖是咱們平時輸入的網址,它其實是一個URL(Uniform Resouce Locator),統一資源定位符,是用來標識互聯網上的資源位置。咱們知道網頁其實就是一個HTML文件,因此打開這個網址,就是打開這個地址對應的HTML文件。markdown

  • data-flair.training :就是咱們向域名註冊商申請的域名。它包含兩個部分,TLD(頂級域名)和SLD(次級域名)。「.training"是頂級域TLD(top level domain),是咱們註冊域名時選擇的,常見的頂級域名還包括國家碼/com/net/org等;"data-flair",又稱爲次級域名(second-level domain,SLD),是咱們私有的,從屬於選擇的頂級域(TLD);網絡

  • www: 這是咱們的subdomain(子域名),子域名對應具體的host, 這個子域名不須要向域名註冊商申請,能夠由咱們自行指定。dom

  • 域名的等級:從頂級域到子域,咱們能看出域名是有層級的。即主機名(host).次級域名(SLD,也就是咱們所說的域名).頂級域名(TLD).根域名(root) # 即host.sld.tld.root以下圖所示:

image.png

  • 根域名: 其實咱們的網址最後都有一個句號".",這就是根域名,由於根域名對全部域名都同樣,因此都被省略了。根域名有專門的根DNS服務器進行管理,這個咱們後面在講anycast時會專門介紹。

  • DNS的等級:既然域名有等級,那麼登記和管理域名的DNS也有了相應的等級

image.png

查詢方式

DNS的分級機制是爲了應對愈來愈多的域名與查詢請求,那麼咱們在查詢一個域名時,爲了加快查詢效率並下降DNS服務器壓力,也須要遵循兩個原則:

  1. 分級查詢
    • 就是從根域名開始,依次查詢每一級域名的DNS記錄,直到查到最終的IP地址;
    • 每一級的域名服務器都知道它下一級的域名記錄,好比.com域名服務器知道google.com的域名服務器地址,由此類推,最終查到host的IP地址;

image.png

  1. 就近原則:
    • 客戶端首先向本地DNS(resolver)發送查詢請求,若是本地DNS有對應的緩存,則直接應答;
    • 若是本地DNS沒有對應結果,則經過resolver向距離最近的根節點發送查詢請求,並進行遞歸查詢,直到返回最終結果;

基於此,DNS通常支持兩種查詢方式:遞歸查詢recursive與迭代查詢iterative;

二者的區別在於執行查詢的主體:若是是由本地Name Server執行查詢並返回給客戶端,則爲遞歸查詢;若是是由客戶端直接向不一樣級別的Name Server執行查詢,則爲迭代查詢;

通常來講,都採用遞歸查詢方式,由於兩個緣由:

  1. 本地name server性能更強,查詢速度更快;
  2. 查詢到結果後,能夠緩存,緩存結果能夠供本地全部客戶端使用,效率更高;

遞歸查詢

image.png

咱們分步講解一下:

  1. 客戶端瀏覽器輸入一個網址以後,會先向本機的DNS緩存和host文件發起查詢,若是有相應記錄,則立刻返回對應IP地址,查詢結束。
    • 須要注意一點,這個返回結果不是權威的(non-authoritative),可能會導向錯誤的IP地址
    • 這裏應用到的是瀏覽器和系統自帶的DNS服務,能夠用 ipconfig/displaydns來查看本地的緩存,並用ipconfig/flushdns 命令來清楚本地緩存;

image.png

  1. 若是本地緩存沒有結果,則客戶端會按照「就近原則」,向ISP指定的本地Name server,也就是咱們上一節說的LDNS發起查詢,若是LDNS有結果則返回,查詢結束;若是沒有結果,則LDNS會按照「分級查詢」原則,向根域名服務器發起查詢

  2. 根域名會返回TLD域名的記錄和IP,而後LDNS會向TLD服務器發起查詢,依次類推,最終得到目標host的IP地址,並返回給客戶端,同時講結果保存在LDNS本地,保存時間爲TTL(timee to live)

以上就是DNS協議的關鍵內容和工做原理,咱們下一篇來詳細看一下DNS的查詢過程。

感謝閱讀,若有不許確和錯誤之處請留言指正,我會當即修正,感謝!




總結不易,請勿私自轉載,不然別怪老大爺不客氣

歡迎喜歡技術的小夥伴和我交流,微信1296386616

參考資料:

《How to Choose a Perfect Domain Name – SEO Best Practices》 Data Flair data-flair.training/blogs/seo-d…

《雲解析 DNS》 阿里雲 help.aliyun.com/document_de…

《DNS解析的工做原理及遞歸與迭代的區別》 WytheOnly blog.csdn.net/wytheonly/a…

《DNS 安全問題研究》 郭巨俠 zhuanlan.zhihu.com/p/345791057

相關文章
相關標籤/搜索