身為一位前端工程師,除了懂得如何切版,以及如何使用前端框架外,了解跟Internet及其他知識也很重要,所以就想說花點時間來惡補一下><
這次先從最近有碰到的DNS和Domain開始看起!
什麼是Domain Name?
Domain Name簡單來說就是我們在用網址時,會看到的XXX.com的這段文字,例如google.com。
Domain Name的結構
Domain Name可能會由多個部分組合而成,不同的部分間是以"."區隔,並且閱讀方式並不是我們習慣的由左至右,而是由右至左。
Domain通常會以這兩個部分組成:
top-level domain(簡稱TLD)
就是我們在網址上會看到的.com、.net的部分。
label(也稱為second-level domain,簡稱SLD)
TLD左側的部分就是label的部分。
什麼是DNS?
DNS全名是Domain Name System,會將前面提到的Domain Name轉換成電腦看得懂的IP(例如:154.61.0.16)。
DNS的運作方式
當我們在瀏覽器上輸入網址之後,會經歷的DNS解析過程如下:
1. 瀏覽器將Domain送出,交由DNS 遞迴解析器(DNS recursive resolver)接收查詢任務。
2. DNS 遞迴解析器會查詢DNS根名稱伺服器。
3. DNS根名稱伺服器將TLD的部分的位址回應給DNS 遞迴解析器。
4. DNS遞迴解析器接著再向TLD Server發出請求。
5. TLD Server將對應Domain的Name Server IP回應給DNS 遞迴解析器。
6. DNS遞迴解析器向對應Domain發送查詢的請求。
7. Name Server將查詢到的該Domain Name的IP回傳給DNS遞迴解析器。
8. DNS遞迴解析器接著會把查詢到的Domain IP回應給瀏覽器。
9. 瀏覽器接著會向此Domain IP發送HTTP請求。
10. 在這IP上的伺服器最後會回傳要渲染在瀏覽器上的網頁。
上面這一串流程是不是讓人看到頭很暈?其實簡單來說可以想成中間人(DNS 遞迴解析器)必須一層層的往下找,才能要到Name Server的IP。要到Name Server的IP,才能向Name Server請求尋找對應Domain的IP,最後再把Domain IP回覆給瀏覽器,讓瀏覽器能有真正拿來發送HTTP請求的位址,並向該位址發送請求。
DNS cache
除了以上的內容,我覺得還有一個部分很重要,就是瀏覽器的DNS cache。
瀏覽器預設會cache DNS記錄一陣子,當有DNS cache紀錄在,就不用再經過冗長的DNS解析流程。
結論
其實Domain Name和DNS的關係有點像是人名和電話簿一樣,DNS會把搜尋(解析)到的電話(IP)結果回傳回來,就可以用那個電話(IP)打給剛剛搜尋的那個人。只不過DNS解析的過程,沒有像在電話簿裡找某個人的電話那麼簡單就是了XD
參考資料
https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_domain_name
https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/