當前位置:
首頁 > 知識 > 寫給前端工程師的DNS基礎知識

寫給前端工程師的DNS基礎知識

DNS


在工作中,經常切換本地和伺服器,添加各種解析。遇到DNS引起的一些問題。發現網上資料很混亂,用心整理寫了下,希望對大家有幫助。


DNS(Domain Name System,域名系統),最初,由於ip長且難記,通過ip訪問網站不方便。所以後來通過發明了DNS伺服器,這個時候我們訪問網站輸入網站域名,DNS伺服器就解析我們的域名為ip。這樣我們實際訪問的就是對應的ip地址啦。


抽象點DNS就是一個記錄ip地址的超級分布式資料庫。


根域和根域伺服器

首先我們要明白如何區分域,至於如何解析我們後面慢慢講。


其中「.」是DNS命稱空間,用來分割不同域。


www,sunhao,win分別代表不同的域。其實還有個域,跟在win後面,只是因為是域名系統默認的,所以這裡不用寫,這個就是根域。


意義上域名應該是這樣


根域記錄了所有win域(這一個位置的叫頂級域),它和sunhao(二級域),共同構成頂級域名sunhao.win


因為我們上網使用的UDP/TCP,UDP數據往往沒有保障,但速度快,通常用於查詢和響應,TCP由於多次驗證,傳輸有保證,但速度慢,多用於主伺服器和從伺服器之間的傳送。


因此我們DNS主要通過UDP。


也就是它會向根伺服器請求win域的地址。然後通過win域繼續向下請求。根域名伺服器並不直接把待查詢的域名直接解析出IP地址,而是告訴本地域名伺服器下一步應當找哪一個頂級域名伺服器進行查詢。


所以根域名伺服器很重要。假定所有的根域名伺服器都癱瘓了,那麼整個DNS系統就無法工作。


頂級域和頂級域伺服器

win所在的位置就是頂級域


域名只是邏輯概念,並不代表計算機所在的物理地點。據2006年12月統計,現在頂級域名TLD(Top Level Domain)已有265個,分為三大類:


國家頂級域名nTLD:採用ISO3166的規定。如:cn代表中國,us代表美國,uk代表英國,等等。國家域名又常記為ccTLD(cc表示國家代碼contry-code)。


通用頂級域名gTLD:最常見的通用頂級域名有7個,即:com(公司企業),net(網路服務機構),org(非營利組織),int(國際組織),gov(美國的政府部門),mil(美國的軍事部門)。


基礎結構域名(infrastructure domain):這種頂級域名只有一個,即arpa,用於反向域名解析,因此稱為反向域名。


頂級域名伺服器主要負責管理在該頂級域名伺服器註冊的二級域名。


例如,


dns9.hichina.com


dns10.hichina.com


但是由於業務我從後台調整解析到yunjiasu

其中


的權威伺服器。


^_^。


通俗點說,就是爸爸給孩子十塊錢(這裡指域名),這十塊錢,孩子可以自己花,也可以轉給別人。擁有了控制十塊錢的所有許可權。簡單點說,就是一旦把域名授權給我,授權給我的那部分,我做主。


運營商DNS伺服器


和本地DNS伺服器


在實際上網中,我們不是直接連接根伺服器,而是通過本地DNS伺服器上網。


如果DNS設置不好,或者不對,會導致如我們qq能登陸,而頁面無法瀏覽網頁的癥狀。


在這,本地DNS主要是指各地電信運營商提供的域名解析伺服器。也就是我們在上網網卡裡面你設置的DNS地址。當然也可以自己建設一個伺服器。

寫給前端工程師的DNS基礎知識


當一個主機發出DNS查詢請求時,這個查詢請求報文就發送給本地域名伺服器,本地伺服器替我們進行DNS解析,我們得到的ip地址是由本地伺服器返回的。


查詢


我們了解了伺服器,理一下常規DNS系統如何運作的吧


1. 用戶—>本地遞歸伺服器—>根權威伺服器—>COM權威伺服器—>X(X代表任意地址).COM權威伺服器—>本地遞歸伺服器—>用戶


2. 用戶—>本地遞歸伺服器—>緩存—>用戶


在這我們要明白兩點:


遞歸查詢:主機向本地域名伺服器的查詢一般都是採用遞歸查詢。所謂遞歸查詢就是:如果主機所詢問的本地域名伺服器不知道被查詢的域名的IP地址,那麼本地域名伺服器就以DNS客戶的身份,向其它根域名伺服器繼續發出查詢請求報文(即替主機繼續查詢),而不是讓主機自己進行下一步查詢。因此,遞歸查詢返回的查詢結果或者是所要查詢的IP地址,或者是報錯,表示無法查詢到所需的IP地址。


簡單說就是說我們請求的地址必須返回一個準確的ip地址,沒有就向別的地址查詢,然後返回給我們一個準確的ip地址。我們的本地伺服器就是遞歸伺服器。


迭代查詢:本地域名伺服器向根域名伺服器的查詢的迭代查詢。迭代查詢的特點:當根域名伺服器收到本地域名伺服器發出的迭代查詢請求報文時,要麼給出所要查詢的IP地址,要麼告訴本地伺服器:「你下一步應當向哪一個域名伺服器進行查詢。」然後讓本地伺服器進行後續的查詢。

根域名伺服器通常是把自己知道的頂級域名伺服器的IP地址告訴本地域名伺服器,讓本地域名伺服器再向頂級域名伺服器查詢。頂級域名伺服器在收到本地域名伺服器的查詢請求後,要麼給出所要查詢的IP地址,要麼告訴本地伺服器下一步應當向哪一個許可權域名伺服器進行查詢。


最後,知道了所要解析的IP地址或報錯,然後把這個結果返回給發起查詢的主機。


這裡由各級伺服器進行的就是迭代查詢,自身不返回ip,而是返回給下一級的DNS伺服器地址。


實際一般本地DNS訪問量巨大,會有一個前置的F5伺服器,用於分發給後綴的伺服器實現負載均衡。同時伺服器會根據設置會緩存一段時間地址。所以有時候我們在伺服器改完DNS,有時候會等一段時間,才能訪問到新的地址。


解析記錄


域名解析記錄A、CNAME、MX、NS、TXT、AAAA、SRV、顯性URL、隱形URL含義


A記錄:解析域名到指定ip


CNAME記錄(Canonical Name 別名指向):解析域名到域名


MX記錄:指向一個郵件伺服器,用於電子郵件系統發郵件時根據收信人的地址後綴來定位郵件伺服器。


NS記錄:解析伺服器記錄。用來表明由哪台伺服器對該域名進行解析,這裡的NS記錄只對子域名生效。

優先順序:NS記錄優先於A記錄。即,如果一個主機地址同時存在NS記錄和A記錄,則A記錄不生效。這裡的NS記錄只對子域名生效。


TXT記錄:為某個主機名或域名設置聯繫信息,如:


AAAA記錄(AAAA record):是用來將域名解析到IPv6地址的DNS記錄。用戶可以將一個域名解析到IPv6地址上,也可以將子域名解析到IPv6地址上。


SRV記錄:一般是為Microsoft的活動目錄設置時的應用。


顯性URL記錄:訪問域名時,會自動跳轉到所指的另一個網路地址(URL),此時在瀏覽器地址欄中顯示的是跳轉的地址。


隱形URL記錄:訪問域名時,會自動跳轉到所指的另一個網路地址(URL),此時在瀏覽器地址欄中顯示的是原域名地址。


應答


權威應答


由權威伺服器區域直接返回的應答地址


非權威應答

由緩存或者其他伺服器返回的地址


TTL值和緩存


假如我們每次都發送一次DNS請求,那麼伺服器的壓力會相當大,但是伺服器的ip地址一般會經常變,所以實際我們都設置TTL把DNS緩存到本地。


什麼是域名的TTL值?


TTL(Time- To-Live),簡單的說它就是返回的記錄在DNS伺服器上保留的時間,就是TTL值。

寫給前端工程師的DNS基礎知識



DNS會將最終域名解析的結果緩存至本地。分為兩種瀏覽器緩存和操作系統(OS)緩存。


在瀏覽器中訪問的時候,會優先訪問瀏覽器緩存,如果訪問指定域名,沒有命中返回,則訪問OS緩存。最後再次訪問dns伺服器。


所以我們在調試的時候,更換了本地hosts仍然訪問的是舊地址,那麼就等一會吧。

寫給前端工程師的DNS基礎知識



我們可以看到chrome會自動緩存70s dns。


那麼我們如果想在70s內清除緩存怎麼辦呢?

寫給前端工程師的DNS基礎知識



我們在chrome地址欄裡面輸入chrome,會自動索引出有關的基本地址。選擇chrome-urls


往下拉選擇chrome://net-internals


其中最右面

寫給前端工程師的DNS基礎知識


可以清除頁面緩存

寫給前端工程師的DNS基礎知識



點Clear host cache,可以用於清除DNS緩存。


其實這個頁面最好收藏下來,便於以後調試時及時刷新。


hosts


在DNS系統之前,對應ip都是保存在hosts文件之中,現在系統仍然保留它。


實際通過瀏覽器訪問,會先查詢瀏覽器dns緩存,再查詢hosts裡面是否有記錄

寫給前端工程師的DNS基礎知識



一般win系統Hosts文件就在


C:WINDOWSsystem32driversetc中


通過hosts我們可以把域名改成本地的地址,進行調試開發。


對於經常訪問的網站,也可以直接設置到hosts里,加快訪問速度。


sunhao.win解析過程分析


最後我們看下用dig +trace 跟蹤的全部解析過程

寫給前端工程師的DNS基礎知識



.就是一開始說的根域。NS就是指定該域名由哪個DNS伺服器來進行解析。


我們可以清晰的看到第一步先從13台dns伺服器,然是頂級域win,最後權威域sunhao.win。


查到地址在162.159.211.33和162.159.210.33上。最後的是A記錄。不再是NS了哦。


文章來源:


http://www.sunhao.win/articles/netwrok-dns.html


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 優才學院 的精彩文章:

JS與面向對象
10個JavaScript概念!Node.js程序員必須掌握
Vue 用戶的 React 上手小結
ui 設計中的插畫與情感化設計
快速學會SVN的搭建和使用

TAG:優才學院 |

您可能感興趣

SQL基礎知識
一個合格程序猿應該知道的基礎知識—XML注入介紹
註冊安全工程師基礎知識:人的特性
遞歸皮層網路RCN識別文本CAPTCHAS的Science論文基礎知識和譯文
一個合格程序猿應該知道的基礎知識(二)—XXE注入攻擊
科普:四大主流介面VGA、DVI、HDMI、DP基礎知識詳解
詳談NVMe和NVMe-oF基礎架構和概念
LINUX用戶管理和用戶組管理基礎
UI設計師必備的AI基礎!
服裝製版師應具備的基礎知識
焊接工藝基礎知識
ARVIlab信息圖闡明了VR頭顯的所有基礎知識
MG動畫基礎小知識
吃奶率篇:DNF基礎知識科普專欄
JS基礎知識點 一
超詳細的PPT基礎教程
BitMEX研究院:EOS需要重構其基礎設施以成為一個成功的基層協議
淺談顯示器DyAc技術與動態模糊基礎知識
零基礎的IT小白 能不能成為人工智慧工程師
監控網路系列知識六:VLAN的基礎知識及劃分方法