輕知 | 爲什麼全球只有13組根域名服務器?

歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~

本文由9527發表

根域名服務器是域名解析系統(DNS)中最爲頂級的域名服務器,它們負責管理頂級域的權威域名服務器地址。作爲互聯網基礎設施的重要部分,所有域名的解析操作均離不開它們。下面我們將從 DNS 協議實現的角度分析爲什麼全球只有13組根域名服務器。

13組根域名服務器的信息

img

其中,13組根域名服務器以英文字母 a 到 m 順序命名,域名格式爲“a~m.root-servers.net”,如“b.root-servers.net”。

DNS 數據包的大小限制

我們知道 DNS 協議是應用層協議,大多數情況下依賴傳輸層的 UDP 協議進行數據的傳輸(僅在重試的情況下可能使用 TCP 協議)。根據RFC 791規定,未保證 UDP 數據包傳輸成功率,儘量數據包控制在 571 字節以使數據包不會被分片傳輸。

img

除去 UDP 數據包自身包頭佔用的字節數,DNS 數據包被設計爲不超過512字節。

DNS 協議格式

下面我們從根域名解析的返回數據包截圖:

img

我們假設根域名由 N 組,計算數據包各部分字節佔用的情況如下:

  • Header 部分佔用12個字節,包括 Transaction ID (2字節),Flags (2字節),Questions (2字節),Answer RRs (2字節),Authority RRs (2字節),Additional RRs (2字節);
  • Question Section 部分佔用5個字節,包括根標籤(1字節),Class (2字節,基本取值都是IN),查詢類型(2字節);
  • Answer Section 部分佔用的字節數爲所有記錄字節數之和,每條記錄包括根標籤(1字節),TTL (4字節),Class (2字節,基本取值都是IN),查詢類型(2字節),域名存儲佔用的字節數;因爲域名在 DNS 解析協議當中按照長度(2字節)+數據的形式存儲,其中數據部分是分段存儲的,存儲格式如下所示,所以第一條記錄的域名存儲佔用22個字節,繼而第一條記錄總共佔用31個字節;而從第二條記錄開始,因爲記錄中出現的域名存在部分內容與第一條記錄重複,即“root-servers.net”部分,這部分可以利用 DNS 指針壓縮存儲,只需要存儲2個字節的指針,指向第一條記錄出現的部分,而不需要存儲實際的內容,所以第二條記錄~N條記錄佔用的字節數分別爲11+4=15個字節;

img

  • Additional Section 部分佔用的字節數爲所有記錄字節數之和,每條記錄包括域名,TTL (4字節),Class (2字節,基本取值都是IN),查詢類型(2字節),IP 地址(2字節長度+4字節內容);因爲 Additional Section 記錄的域名都在 Answer Section 中出現過,所以這部分都可以利用 DNS 指針壓縮存儲,只需要存儲2個字節的指針即可表示對應的域名,所以Additional Section 部分的記錄佔用的字節數爲2+4+2+2+6=16個字節;

綜上所述,數據包總長度爲12+5+(31+(15(N-1))+16N,再根據前述 DNS 大小限制不超過512字節的要求,可以得 N 不超過15組,再加上早期設計的時候考慮到預留一些 buffer 於是就有了現在全球13組根域名服務器的結果。

此文已由作者授權騰訊雲+社區發佈,更多原文請點擊

搜索關注公衆號「雲加社區」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章